для мт4
if (day!=TimeDay(TimeCurrent())) { day=TimeDay(TimeCurrent()); // открываем сделку }
для мт5
MqlDateTime currTime=TimeToStruct(TimeCurrent()); if (day!=currTime.day) { day=currTime.day); // открываем сделку }
для мт4
для мт5
ИМХО. Такой способ годится, если советник работает по ценам открытия Д1. А у топикстартёра сделка открывается не на открытии дня, а где то внутри дня.
Подойдёт функция KimIV:
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает флаг торгов сегодня. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isTradeToDay(string sy="", int op=-1, int mn=-1) { int i, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) return(true); } } } } } } k=OrdersTotal(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) return(true); } } } } } } return(false); }
Условие для открытия сделки:
if(!isTradeToDay("0", -1, Magic))
ИМХО. Такой способ годится, если советник работает по ценам открытия Д1. А у топикстартёра сделка открывается не на открытии дня, а где то внутри дня.
Подойдёт функция KimIV:
Условие для открытия сделки:
if(!isTradeToDay("0", -1, Magic))
Благодарен за помощ. Работает!
Очень ресурсозатратная функция, я бы, хотя бы в режиме тестирования и оптимизации, использовал простейший флаг.
Очень ресурсозатратная функция, я бы, хотя бы в режиме тестирования и оптимизации, использовал простейший флаг.
Вы имеете ввиду при открытии сделки устанавливать в 1 глобальную переменную терминала, а на открытии дня сбрасывать её?
Можно и так.
Очень ресурсозатратная функция, я бы, хотя бы в режиме тестирования и оптимизации, использовал простейший флаг.
if (day!=TimeDay(TimeCurrent())) { // проверяем условие открытия { //если условие подходит, открываем сделку — и изменяем флаг day day=TimeDay(TimeCurrent()); } }обновил.
Извиняюсь, сразу не понял. Можно использовать. Только вам надо было более четко показать, что строка day=TimeDay(TimeCurrent()); должна выполняться только при открытии сделки, т.е. внутри фигурных скобок условия открытия.
для мт4
для мт5
а как сделать так чтоб 1 раз в сутки советник брал 1 раз в 00:00 показание индикатора с пред идущего дня к примеру PivotPoint максимум и минимум ну и на их данных, советник работал весь день не меняя показания индикатора,а на следующий день снова обновлял показания индикатора и так же сам советник продолжал работать ?
а как сделать так чтоб 1 раз в сутки оно брало 1 раз показание индикатора с пред идущего дня к примеру пивотпоинт максимум и минимум ну и на их данных советник работал весь день не меняя показания а на следуйщий день снова обновлял показания индикатора и так же?
Брать данные с дневного ТФ. Хотя тогда непонятно, почему в течение дня эти показания меняются. Не должны.
Брать данные с дневного ТФ. Хотя тогда непонятно, почему в течение дня эти показания меняются. Не должны. к сожалению меняются...( и он пересчитывает всё по новой... пробовал писал функцию с количеством свечей и потом типа такой - double MinPrice = iLow (Symbol(),PERIOD_D1,1); double MaxPrice = iHigh(Symbol(),PERIOD_D1,1); по идее он как то должен определить день и на 1 свечке нового дня выдать результат...но! он на второй свечке меняется и тянет за собой этот дневной показатель( ... надо как то установить так чтоб определение вершин и низов происходило в 00:01 и выдавало результат который не изменялся до следующего дня...тогда было бы прекрасно
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте уважаемые трейдеры программисты! Я в mql программировании новичок и по этому у меня возникают вопросы на очень обычные для профи вещи.
Написал советник который открывает сделки каждый день после пересечения цены определенного диапазона, советник все делает правильно как и написано в коде, но проблема в том что он не должен открывать только 1 ордер в день, но он открывает сделку заново когда с ново пересекает указанную линию. Мне нужно чтобы он после срабатывания стоп лосс или тейк профита ждал наступления следующего дня.