Size: a a a

2021 January 11

AS

Alexey Shumkin in Delphi & Lazarus
Рус
там длинная простыня, это уж слишком будет я думаю))
ну, т.е. ты показываешь одно, а запускаешь другое? )) оооок
источник

Р

Рус in Delphi & Lazarus
Alexey Shumkin
ну, т.е. ты показываешь одно, а запускаешь другое? )) оооок
Почему?

for MAsource in aMAsource do
 for MAlength in aMAlength do
     for shift in aShift do
       BackTest(MAsource, MAlength, (100 - shift) * 0.01);

вот точное место моей головной боли
источник

AS

Alexey Shumkin in Delphi & Lazarus
Рус
Почему?

for MAsource in aMAsource do
 for MAlength in aMAlength do
     for shift in aShift do
       BackTest(MAsource, MAlength, (100 - shift) * 0.01);

вот точное место моей головной боли
это вообще параллелится
ну и неизвестно, что у тебя в BackTest делается вообще
источник

Р

Рус in Delphi & Lazarus
Alexey Shumkin
это вообще параллелится
ну и неизвестно, что у тебя в BackTest делается вообще
Запускается один цикл для массива (он глобальный), внутри чистая математика + условия, ничего интересного
источник

Miss Очепятка... in Delphi & Lazarus
Рус
Запускается один цикл для массива (он глобальный), внутри чистая математика + условия, ничего интересного
Таки это самое интересное.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Рус
Запускается один цикл для массива (он глобальный), внутри чистая математика + условия, ничего интересного
ну, если ничего интересного, то о чём мы тут вообще? )))
источник

Р

Рус in Delphi & Lazarus
Miss Очепятка
Таки это самое интересное.
Почему? Вот почему это так интересно? Это ж никак не влияет на те циклы, которые мне нужно поставить на "паузу"
источник

Miss Очепятка... in Delphi & Lazarus
Рус
Почему? Вот почему это так интересно? Это ж никак не влияет на те циклы, которые мне нужно поставить на "паузу"
Так ставьте делаете if и сохраняете состояние Backrest и его окружения. При загрузки востанавливаете состояние пропускает первые интеграции. Как ранее говорили.
источник

Р

Рус in Delphi & Lazarus
Alexey Shumkin
ну, если ничего интересного, то о чём мы тут вообще? )))
for i := Max(fMAslow, fMAfast) to High(aOHLC) do
begin
 if aOHLC[i].T < fTestFromDate then
   Continue;
 if not position.ActiveShort then
   if (aMAvalue[i - 1][fMAslow] > aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] > aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] < aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveLong then
       begin
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerLong(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerShort(aOHLC[i].C, i);
     end;
 if not position.ActiveLong then
   if (aMAvalue[i - 1][fMAslow] < aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] < aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] > aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveShort then
       begin
         Inc(resultTotalClosedTrades);
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerShort(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerLong(aOHLC[i].C, i);
     end;
 { MA }
 if graphOut then
 begin
   if aMAvalue[i][fMAslow] > 0 then
     slowMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAslow]);
   if aMAvalue[i][fMAfast] > 0 then
     fastMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAfast]);
 end;
end;
источник

Р

Рус in Delphi & Lazarus
Miss Очепятка
Так ставьте делаете if и сохраняете состояние Backrest и его окружения. При загрузки востанавливаете состояние пропускает первые интеграции. Как ранее говорили.
Ну да. Тут у меня базару нет, на том и порешили.
источник

Miss Очепятка... in Delphi & Lazarus
Рус
for i := Max(fMAslow, fMAfast) to High(aOHLC) do
begin
 if aOHLC[i].T < fTestFromDate then
   Continue;
 if not position.ActiveShort then
   if (aMAvalue[i - 1][fMAslow] > aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] > aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] < aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveLong then
       begin
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerLong(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerShort(aOHLC[i].C, i);
     end;
 if not position.ActiveLong then
   if (aMAvalue[i - 1][fMAslow] < aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] < aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] > aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveShort then
       begin
         Inc(resultTotalClosedTrades);
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerShort(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerLong(aOHLC[i].C, i);
     end;
 { MA }
 if graphOut then
 begin
   if aMAvalue[i][fMAslow] > 0 then
     slowMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAslow]);
   if aMAvalue[i][fMAfast] > 0 then
     fastMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAfast]);
 end;
end;
Вам архитектуру менять надо. Делать MVC.
источник

Р

Рус in Delphi & Lazarus
Miss Очепятка
Вам архитектуру менять надо. Делать MVC.
Это что такое? Я не в курсе
источник

Р

Рус in Delphi & Lazarus
Кстати:
 if position.ActiveLong then
работать будет медленнее чем
 if positionActiveLong then
Короче запись - это тормоз😁👍
источник

Р

Рус in Delphi & Lazarus
Рус
Кстати:
 if position.ActiveLong then
работать будет медленнее чем
 if positionActiveLong then
Короче запись - это тормоз😁👍
position - type record
источник

Р

Рус in Delphi & Lazarus
Miss Очепятка
Вам архитектуру менять надо. Делать MVC.
примерно понял, нет, мне MVC явно не подойдёт
источник

AS

Alexey Shumkin in Delphi & Lazarus
Рус
for i := Max(fMAslow, fMAfast) to High(aOHLC) do
begin
 if aOHLC[i].T < fTestFromDate then
   Continue;
 if not position.ActiveShort then
   if (aMAvalue[i - 1][fMAslow] > aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] > aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] < aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveLong then
       begin
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerLong(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerShort(aOHLC[i].C, i);
     end;
 if not position.ActiveLong then
   if (aMAvalue[i - 1][fMAslow] < aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] < aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] > aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveShort then
       begin
         Inc(resultTotalClosedTrades);
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerShort(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerLong(aOHLC[i].C, i);
     end;
 { MA }
 if graphOut then
 begin
   if aMAvalue[i][fMAslow] > 0 then
     slowMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAslow]);
   if aMAvalue[i][fMAfast] > 0 then
     fastMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAfast]);
 end;
end;
и чо, например, как часто выполняется (истинное условие)
 if aOHLC[i].T < fTestFromDate then
   Continue;
?
источник

AS

Alexey Shumkin in Delphi & Lazarus
Рус
for i := Max(fMAslow, fMAfast) to High(aOHLC) do
begin
 if aOHLC[i].T < fTestFromDate then
   Continue;
 if not position.ActiveShort then
   if (aMAvalue[i - 1][fMAslow] > aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] > aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] < aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveLong then
       begin
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerLong(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerShort(aOHLC[i].C, i);
     end;
 if not position.ActiveLong then
   if (aMAvalue[i - 1][fMAslow] < aMAvalue[i][fMAslow]) then
     if (aMAvalue[i - 1][fMAfast] < aMAvalue[i - 1][fMAslow]) and
       (aMAvalue[i][fMAfast] > aMAvalue[i][fMAslow]) then
     begin
       if position.ActiveShort then
       begin
         Inc(resultTotalClosedTrades);
         if aOHLC[i].T > fResultFromDate then
           Inc(resultFromDateTotalClosedTrades);
         PositionCloseTakerShort(aOHLC[i].C, i);
         if aBalance[High(aBalance)].Sum < 1 then
           Break;
         if aBalance[High(aBalance)].Sum > resultBalanceMax then
           resultBalanceMax := aBalance[High(aBalance)].Sum;
       end;
       PositionOpenTakerLong(aOHLC[i].C, i);
     end;
 { MA }
 if graphOut then
 begin
   if aMAvalue[i][fMAslow] > 0 then
     slowMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAslow]);
   if aMAvalue[i][fMAfast] > 0 then
     fastMA.AddXY(aOHLC[i].T, aMAvalue[i][fMAfast]);
 end;
end;
и записи в массиве у тебя по дате упорядочены? )
источник

AS

Alexey Shumkin in Delphi & Lazarus
Рус
Кстати:
 if position.ActiveLong then
работать будет медленнее чем
 if positionActiveLong then
Короче запись - это тормоз😁👍
ну, если уж экономить на тактах..
у тебя
aBalance[High(aBalance)].Sum сколько раз используется? ;)
источник

Р

Рус in Delphi & Lazarus
Alexey Shumkin
и чо, например, как часто выполняется (истинное условие)
 if aOHLC[i].T < fTestFromDate then
   Continue;
?
в зависимости от конкретной истории торгов, наверное может и сотенку тысяч раз, а в др. массиве вообще ни разу
источник

Р

Рус in Delphi & Lazarus
Alexey Shumkin
и записи в массиве у тебя по дате упорядочены? )
конечно
источник