Victor Nikolaev: Данная функция будет вызываться каждый тик, но можно сделать контроль нового бара внутри функции.
Спасибо, разобрался более менее. Сравнивая prev_calculated и rates_total видно появление новых баров. А в советнике сложнее с новым баром - проверка времени и т.п.
Не надо их сравнивать, это не очень надёжный способ: переменная prev_calculated при некоторых условиях может быть обнулена. Запоминайте время текущего бара и проверяйте его изменение при следующем вызове:
// в самом начале функции OnCalculate()bool bNewBar = false;
staticdatetime dtLastBarTime = time[rates_total-1];
if(time[rates_total-1] > dtLastBarTime)
{
bNewBar = true;
dtLastBarTime = time[rates_total-1];
}
PS. Это пример для МТ5. В четвёрке (и в пятёрке, если массив time[] cделан таймсерией) заменить time[rates_total-1] на time[0].
решил создать простого советника, прочитав статью: "Пошаговое руководство по написанию MQL5-советников для начинающих".(https://www.mql5.com/ru/articles/100)
Протестировав эксперта на истории подумал, как его можно улучшить? Первое что пришло в голову , не считая оптимизации- применить трейлинг стоп-лосс . Есть хорошая статья по зтому вопросу: "Как создать свой Trailing Stop - Статьи по MQL5". (https://www.mql5.com/ru/articles/134) . Однако, возникла проблема , советник приложенный к статье не рабочий...то есть (my_first_ea_sartrailing.ex5) компилируется , но не торгует в журнале пишет: 2015.11.28 22:54:38.973 2015.02.04 17:00:00 Alert: Запрос на установку ордера Sell не выполнен - код ошибки:4756 2015.11.28 22:54:38.973 2015.02.04 17:00:00 failed instant sell 0.10 EURUSD at 1.14051 sl: 1.17051 tp: 1.04051 [Invalid request] Помогите разобраться.
Скажите, пожалуйста, какой самый быстрый и правильный способ удалить все существующие ордера, выставленные советником? Неужели создавать массив с номерами ордеров и удалять каждый? Получить список активных ордеров тоже нельзя?
Скажите, пожалуйста, какой самый быстрый и правильный способ удалить все существующие ордера, выставленные советником? Неужели создавать массив с номерами ордеров и удалять каждый? Получить список активных ордеров тоже нельзя?
Да, стоило сказать, что реализовать это нужно в советнике.
Нашел скрипт на mql4 - для 5 не актуально? Пару дней назад где-то видел строку с функцией что-то вроде "orderscancelbymagicnumber", но в документации ничего не получается найти... Запутался.
Подскажите, пожалуйста, как сделать, чтобы OnCalculate индикатора вызывалась не каждый тик, а только с новым баром?
Данная функция будет вызываться каждый тик, но можно сделать контроль нового бара внутри функции.
Спасибо, разобрался более менее. Сравнивая prev_calculated и rates_total видно появление новых баров. А в советнике сложнее с новым баром - проверка времени и т.п.
Не надо их сравнивать, это не очень надёжный способ: переменная prev_calculated при некоторых условиях может быть обнулена. Запоминайте время текущего бара и проверяйте его изменение при следующем вызове:
PS. Это пример для МТ5. В четвёрке (и в пятёрке, если массив time[] cделан таймсерией) заменить time[rates_total-1] на time[0].
решил создать простого советника, прочитав статью: "Пошаговое руководство по написанию
MQL5-советников для начинающих".(https://www.mql5.com/ru/articles/100)
Протестировав эксперта на истории подумал, как его можно улучшить?
Первое что пришло в голову , не считая оптимизации-
применить трейлинг стоп-лосс . Есть хорошая статья по зтому вопросу:
"Как создать свой Trailing Stop - Статьи по MQL5".
(https://www.mql5.com/ru/articles/134) . Однако, возникла
проблема , советник приложенный к статье не рабочий...то есть
(my_first_ea_sartrailing.ex5) компилируется , но не торгует
в журнале пишет:
2015.11.28 22:54:38.973 2015.02.04 17:00:00 Alert: Запрос на установку ордера Sell не выполнен - код ошибки:4756
2015.11.28 22:54:38.973 2015.02.04 17:00:00 failed instant sell 0.10 EURUSD at 1.14051 sl: 1.17051 tp: 1.04051 [Invalid request]
Помогите разобраться.
PS. Это пример для МТ5.
Здравствуйте.
Скажите, пожалуйста, какой самый быстрый и правильный способ удалить все существующие ордера, выставленные советником? Неужели создавать массив с номерами ордеров и удалять каждый? Получить список активных ордеров тоже нельзя?
Здравствуйте.
Скажите, пожалуйста, какой самый быстрый и правильный способ удалить все существующие ордера, выставленные советником? Неужели создавать массив с номерами ордеров и удалять каждый? Получить список активных ордеров тоже нельзя?
Не надо массив. Какой терминал?
Не надо массив. Какой терминал?
MT5
Да, стоило сказать, что реализовать это нужно в советнике.
Нашел скрипт на mql4 - для 5 не актуально? Пару дней назад где-то видел строку с функцией что-то вроде "orderscancelbymagicnumber", но в документации ничего не получается найти... Запутался.
Скрипт для МТ4 в пятёрке работать не будет, там совсем другие торговые функции.
Скрипт для МТ4 в пятёрке работать не будет, там совсем другие торговые функции.