Страница 4 из 4

Re: Несколько входных рядов в стратегиях

Добавлено: 22 апр 2021, 06:26
evge
В новой версии АД4 (АИ) 4.0.3032.1724, по информации из обновления, некорректный ПУ исправили. Пока не проверял.

Re: Несколько входных рядов в стратегиях

Добавлено: 22 апр 2021, 10:42
evge
С номером версии в истории явно какой-то баг, старая версия выше новой:

History-01.png
History-01.png (10.99 КБ) 10860 просмотров

Re: Несколько входных рядов в стратегиях

Добавлено: 05 май 2021, 11:34
Jude_Masson
Здравствуйте.
Если будет где то опечатка и не точность, простите мою не внимательность. Постараюсь без ошибок.
Теперь к делу, вроде бы да как нашёл новый баг, забегая на перёд проблема с CurrentPLper.
У меня есть робот, он пишет в файл лог свои действия (для анализа потом удобно) щас правда информации пока мало, но потом добавлю.
4 мая 2021 года SI инструмент таймфрейм 5 минут.
Stop Loss Enter Long 75416,0 75355,0 1 57,00 0,08 4 май 21 18:36 4 май 21 17:40
Это из файла операций в экселе. тут мы видим во сколько времени зашли, по какой цене.
В роботе у меня есть фиксация прибыли (поджимаем стопы) и происходит при 0.3 CurrentPLper до 0.08 что в принципе и произошло.
04.05.2021 0:00:00;18:10:00;75336;75593;75329;75575;TSL1 - строчка логов.

Код: Выделить всё

if (CurrentPosition() > 0 && (CurrentPLper() > Zero1)  && (LTRt < ((int)(AverPrice() + ((AverPrice()/100) * Stop1)))) )
{CancelStopLoss();   LTRt = (int) (AverPrice() + ((AverPrice()/100) * Stop1));   StopLoss(LTRt, SignalPriceType.Price);
WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "TSL1"));   
}

В этой свече и следующей цены закрытия с нужным CurrentPLper а именно 0.3 нету
От цены открытия 75355 + 0,3 процента = 75581 пункт цена закрытия была 75575 чего мало, а цена максимальная 75593.
Ну что ж, пусть будет так и теперь CurrentPLper будет считаться внутри свечи, а не по закрытию. Но при тестировании этого момента, тем же самым роботом. Стоп не передвигается.
Stop Loss Enter Long 75 325,00 75 357,00 1 -36,00 -0,05 4 май 21 23:05 4 май 21 17:40
Даже принимая во внимание, что в тестировании вход произошёл по другой цене .
От цены открытия 75357 + 0,3 процента = 75583 пункт.

Итог в тестированиях CurrentPLper считается от цены закрытия как и раньше, в жизни теперь внутри свечи.

п.с. В шапке робота точно нету UseClosedBar, может теперь надо его писать с true.

Re: Несколько входных рядов в стратегиях

Добавлено: 05 май 2021, 13:42
BugsDigger
В тестировании всегда все действия только по закрытой свечке: промежуточные данные просто неоткуда взять.

Вы не сказали, какие (разные) ТФ вы используете в роботе. Похоже, что вы как раз наткнулись на то, что в реале используются данные незакрытой "живой" свечи вспомогательного (неторгового) ТФ, а в тестировании такая свеча вообще недоступна.

Re: Несколько входных рядов в стратегиях

Добавлено: 05 май 2021, 15:42
Jude_Masson
У меня только один инструмент с одним ТФ. Второго входного ряда нету, всё по старинке.

п.с. В шапке робота точно нету UseClosedBar, может теперь надо его писать с true. <---- повторю.

Re: Несколько входных рядов в стратегиях

Добавлено: 05 май 2021, 16:12
Jude_Masson
Написал такого робота, протестировал советником, роботом. Ошибка не повторилась. Остаётся только принять что это была разовая акция и ошибка не повторяется и не тестируется.

Код: Выделить всё

/**

**/

function Initialize()
{
   StrategyName = "MyMTS65";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "SiM1=ФОРТС");
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{
var I1 = Input1;
if (CurrentPosition() > 0 && (CurrentPLper() > 0.06) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.06", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.08) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.08", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.1) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.1", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.12) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.12", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.14) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.14", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.16) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.16", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.18) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.18", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.2) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.2", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.22) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.22", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.24) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.24", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.26) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.26", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.28) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.28", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.3) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.3", CurrentPLper()));   
   }
if (CurrentPosition() > 0 && (CurrentPLper() > 0.32) )
   {
   WriteLine("C:\\TEMP\\VRat1.txt", String.Format("{0};{1};{2};{3};{4};{5};{6};{7}", I1.BarDate(), I1.BarTime(), I1.Open[0], I1.High[0], I1.Low[0], I1.Close[0], "0.32", CurrentPLper()));   
   }

}