Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 476

 
Sergei Vladimirov:
Кстати, зачем вы объявляете функцию как int, если она в вашем варианте возвращает true, причём всегда? )
Исправил на void, цикл изменил на обратный, пока чужие ордера не трогает, спасибо! 
 
Подскажите, пожалуйста, как сделать, чтобы OnCalculate индикатора вызывалась не каждый тик, а только с новым баром?
 
Hexen:
Подскажите, пожалуйста, как сделать, чтобы OnCalculate индикатора вызывалась не каждый тик, а только с новым баром?
Данная функция будет вызываться каждый тик, но можно сделать контроль нового бара внутри функции.
 
Victor Nikolaev:
Данная функция будет вызываться каждый тик, но можно сделать контроль нового бара внутри функции.

Спасибо, разобрался более менее. Сравнивая prev_calculated и rates_total видно появление новых баров. А в советнике сложнее с новым баром - проверка времени и т.п. 

 

Не надо их сравнивать, это не очень надёжный способ: переменная prev_calculated при некоторых условиях может быть обнулена. Запоминайте время текущего бара и проверяйте его изменение при следующем вызове:

// в самом начале функции OnCalculate()
bool bNewBar = false;

static datetime 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]
Помогите разобраться.
 
Sergei Vladimirov:

 PS. Это пример для МТ5. 

Спасибо!
 

Здравствуйте.

 

 Скажите, пожалуйста, какой самый быстрый и правильный способ удалить все существующие ордера, выставленные советником? Неужели создавать массив с номерами ордеров и удалять каждый? Получить список активных ордеров тоже нельзя?

 
Антон:

Здравствуйте.

 

 Скажите, пожалуйста, какой самый быстрый и правильный способ удалить все существующие ордера, выставленные советником? Неужели создавать массив с номерами ордеров и удалять каждый? Получить список активных ордеров тоже нельзя?

Не надо массив. Какой терминал?

 
Sergei Vladimirov:

Не надо массив. Какой терминал?

MT5

Да, стоило сказать, что реализовать это нужно в советнике.

Нашел скрипт на mql4 - для 5 не актуально? Пару дней назад где-то видел строку с функцией что-то вроде "orderscancelbymagicnumber", но в документации ничего не получается найти... Запутался.