expforex
Программиров
Алексей, перечитай сообщение внимательно.
Там ничего про OnTimer() не написано.
А то, что окончание одного временнОго интервала является началом следующего, таки я с этим тожэ согласен.:laugh:
Можно не на 59 секунде закрывать, а на нулевой.:laugh:
Я на время, здесь внимание акцентирую.
Приветствую,
эту функцию я выложил потому, что мне часто заказывают такую фишку:
я знаю как с ней работать не по наслышке а по опыту,
советник запускается по тику! если нет тиков, то даже Таймер иногда не поможет, потому что сервер вернет ошибку реквот или нет цен. Даже если делать Рефреш тиков перед отправкой.
Бывают брокеры, которые оооочень редко дают тики, и график выглядит корявой дорогой. - в таких ситуациях сервер очень часто дает неправильные цены как ошибку при запросе открыть ордер.
Есть масса программ которые работают по таймеру, причина естественна: Вы ставите эксперта на EURUSD , и тут надо обработать пару USDJPY . Но по EURUSD нет тиков - эксперт не запускается, тогда в помощь приходит Таймер.
так вот, если рынок по USDJPY стал. или у брокера проблемы - в таком случае сервер просто вернет ошибку открытия, мол реrвот, цена изменилась и так далее.
Если делать закрытие на 59 секунде - она может просто не наступить! ее нет, нет тиков, рынок стал, сервер заглючил ...............
Еще один вариант, который я рассказываю из личного опыта.
в МКЛ - нет понятия 59 секунд, есть понятие 59, 000000000001 секунды. ДАДАДА - нормализация, и так далее тут не поможет, и такая особенность языка есть не только в МКЛ, это нормально. Но оно может выстрельнуть в самый неподходящий момент.
Так вот, когда Вы будете сравнивать время в таймере по типу:
if(MathMod(Period()*60-1,TimeCurrent()-Time[0])==0) // по идее вы ловите именно 1 сек до закрытия бара.
так вот результат MathMod(Period()*60-1,TimeCurrent()-Time[0]) может быть не 0 а например 0.00000000001 = в итоге условие не выполнилось!
второй вариант Поставить таймер на Period()*60 ? типо каждый новый бар делать проверку на закрытие, есть такой прикол, что таймер выполняется, и после выполнения считается новый отчет, так вот в таком случае время может сдвинуться на пару секунд!!! - вот например на м1 и примерно 1 сутках могут дать расхождение в 10-15 минут.
Да и запускать таймер Вам надо будет на 1 секунде нового бара!!!! И не факт что этот тик придет именно на 1 секунде, он может прийти на 2-5-15 секунде, как итог таймер в топку,
Поэтому говоря "по опыту" я рекомендую все таки использовать первый тик следующего бара. в 99% - это будет цена открытия = цене закрытия предыдущего бара и условие будет выполнено.
Редко стал писать на форумах, извините, отвык. надеюсь ВЫ меня поймете правильно.
Последнее редактирование: