Ошибки, баги, вопросы - страница 2856

 

Здравствуйте. Есть у меня недопонимание:
Как с помощью Trade\Trade.mqh модифицировать выставленный ордер?
команда OrderModify из Trade.mqh  требует выставления 7и параметров, в том числе последний: StopLimit ордер,что меня вводит в ступор, поскольку последний параметр мне совершенно не нужен..Да и в стандартном исполнении его указывать не надо..

OrderModify(const ulong ticket,const double price,const double sl,const double tp, const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit=0.0);

У меня есть   Sell Stop ,  я его хочу подвинуть вверх, вслед за минимумом..И не могу этого сделать с помощью OrderModify ,  и не понимаю, как модифицировать существующий СеллСтоп ордер с помощью  Trade\Trade.mqh

Приходиться через дилейт и новое выставление.

Как правильно двигать уровень Sell Stop?

 
Сергей Таболин:

Игорь, вопрос был не про ошибку в самом коде, а про то - почему при оптимизации пишет ошибку, а при одиночном прогоне нет?

у меня плохо с телепатией, я только учусь

но попробую.... если предположить, что код у Вас написан на должном уровне, то возможно, что при оптимизации Вы попадаете на значение input-переменной которое и вызывает критическую ошибку

.... можно еще предположить, что Вы не знаете, что оптимизатору задания выдаются пачками, и может быть там в одной из задач возникает ошибка

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

... хз

 
Yura Fomin:

Здравствуйте. Есть у меня недопонимание:
Как с помощью Trade\Trade.mqh модифицировать выставленный ордер?
команда OrderModify из Trade.mqh  требует выставления 7и параметров, в том числе последний: StopLimit ордер,что меня вводит в ступор, поскольку последний параметр мне совершенно не нужен..Да и в стандартном исполнении его указывать не надо..

У меня есть   Sell Stop ,  я его хочу подвинуть вверх, вслед за минимумом..И не могу этого сделать с помощью OrderModify ,  и не понимаю, как модифицировать существующий СеллСтоп ордер с помощью  Trade\Trade.mqh

Приходиться через дилейт и новое выставление.

Как правильно двигать уровень Sell Stop?

Пример есть в Pending Trailing

Pending Trailing
Pending Trailing
  • www.mql5.com
Советник относится к классу утилит. Работает со всеми отложенными ордерами установленными в терминале. Подтягивает отложенный ордер вслед за ценой. Например отложенные ордера 'Buy stop' и 'Sell limit'...
 
TheXpert:
после фигурных скобок вообще нигде не надо ставить точку с запятой, наверное ни в одном языке
Спасибо. Неоднозначность синтаксиса, когда и так и так правильно не очень хорошо.
 
Igor Makanu:

у меня плохо с телепатией, я только учусь

но попробую.... если предположить, что код у Вас написан на должном уровне, то возможно, что при оптимизации Вы попадаете на значение input-переменной которое и вызывает критическую ошибку

.... можно еще предположить, что Вы не знаете, что оптимизатору задания выдаются пачками, и может быть там в одной из задач возникает ошибка

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

... хз

)))))

Ну при чём тут телепатия?

Есть массив, он инициализируется и используется без проблем. Всё работает. А вот при выходе возникает такая катавасия...

void OnDeinit(const int reason)
{
   //Print(ArraySize(netMLP));
   //Print(ArraySize(indicators)+1);
   for(int i = ArraySize(indicators); i >= 0; i--) delete netMLP[i];

Всё было проверено. Но разница поведения в режиме оптимизации и одиночного прогона налицо. Вопрос - почему? Если уж где-то, как-то, что-то не так, то это "не так" должно быть и там, и там. Разве нет?

 
Сергей Таболин:

)))))

Ну при чём тут телепатия?

Есть массив, он инициализируется и используется без проблем. Всё работает. А вот при выходе возникает такая катавасия...

Всё было проверено. Но разница поведения в режиме оптимизации и одиночного прогона налицо. Вопрос - почему? Если уж где-то, как-то, что-то не так, то это "не так" должно быть и там, и там. Разве нет?

Для приличия напишите:

for(int i = ArraySize(netMLP); i >= 0; i--) delete netMLP[i];

А так нет никакой гарантии, что размеры одинаковы. Что за массивы - никому не известно.

 
Stanislav Korotky:

Для приличия напишите:

А так нет никакой гарантии, что размеры одинаковы. Что за массивы - никому не известно.

Мне то известны )))

Заменил. Указанная мною ошибка исчезла ))) Зато сыпится другая:

2020.09.24 22:48:38.470 Core 3  pass 11877 tested with error "OnInit returned non-zero code 1" in 0:00:00.000

Повторюсь, в предыдущем релизе такого не было.

У меня есть несколько проверок с return(INIT_FAILED);

Но они все предваряются принтами... А принтов то и нет. (((

 
Сергей Таболин:

только писать в файл:

- признак оптимизация вкл/выкл

- номер агента

- и все используемые в ОнДеинит() переменные

без этого не найдете баг - оптимизатор работает без проблем, постоянно юзаю

 
Сергей Таболин:

Мне то известны )))

Заменил. Указанная мною ошибка исчезла ))) Зато сыпится другая:

Повторюсь, в предыдущем релизе такого не было.

Делаете даблкликл на соответствующем проходе в таблице оптимизации и получаете лог одиночного прогона, со всеми подробностями - почему именно не прошла инициализация - с указанием строки и колонки в исходнике.

 
Igor Makanu:

только писать в файл:

- признак оптимизация вкл/выкл

- номер агента

- и все используемые в ОнДеинит() переменные

без этого не найдете баг - оптимизатор работает без проблем, постоянно юзаю

Ладно, буду опять подключать запись всего в файл. может найдётся причина... которой раньше не было...

Причина обращения: