- Вопросы от "чайника"
- ЦУЕНА В ПРОШЛОМ
- Подскажите как правильно написать функцию.
Как определить в скрипте что время нулевого бара с момента начала открытия пришло минимум определенный период , например минуту ?
От текущего времени надо отнять время открытия нулевого бара. TimeCurrent()-Time[0] В результате получится кол-во секунд прошедших с момента открытия бара.
вот под рукой была готовая ф-ция, требовалось закрывать ордера за t секунд до закрытия бара, проверенно ф-ция работает, модифицируйте под свои нужды
//+------------------------------------------------------------------+ bool CHeckBarTimeLeft(int sec) { datetime t; t=TimeCurrent()-Time[0]; if(t>=(PeriodSeconds()-sec)) return(true); return(false); } //+------------------------------------------------------------------+
в качестве аргумента ф-ция получает требуемое время до закрытия бара в секундах для проверки, возвращает true если бар закроется менее чем sec секунд
От текущего времени надо отнять время открытия нулевого бара. TimeCurrent()-Time[0] В результате получится кол-во секунд прошедших с момента открытия бара.
есть одно НО ... с открытия бара прошло даже больше минуты ... при определенных условиях он меняется и время отсчета становится равным серверному т. е. он определяется как новый и отсчет идет снова ... уточнение бар тот же .... как быть в этой ситуации ?
Как определить в скрипте что время нулевого бара с момента начала открытия пришло минимум определенный период , например минуту ?
В скрипте такое делать не рекомендуется - так как скрипт это программа одноразового запуска: запустили, скрипт отработал и выгрузился из памяти. Здесь нужен советник.
Алгоритм следующий: от текущего времени сервера отнимать время открытия бара #0.
Пример кода:
//+------------------------------------------------------------------+ //| From the moment of opening.mq5 | //| Copyright © 2018, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2018, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.000" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- long seconds=(long)(TimeCurrent()-iTime(Symbol(),Period(),0)); Comment("From the moment of opening there have passed ",seconds," seconds"); } //+------------------------------------------------------------------+
есть одно НО ... с открытия бара прошло даже больше минуты ... при определенных условиях он меняется и время отсчета становится равным серверному т. е. он определяется как новый и отсчет идет снова ... уточнение бар тот же .... как быть в этой ситуации ?
Не понял, что вы имеете в виду.
В скрипте такое делать не рекомендуется - так как скрипт это программа одноразового запуска: запустили, скрипт отработал и выгрузился из памяти. Здесь нужен советник.
Алгоритм следующий: от текущего времени сервера отнимать время открытия бара #0.
Пример кода:
код mq4 и скрипт не выгружается он работает всегда .... строит оффлайн
код mq4
Вы задали вопрос в главном разделе MQL5 форума - поэтому и ответ был на MQL5. Для MQL4 есть специально выделенный раздел: MQL4 и MetaTrader 4.
Тема перенесена.
есть одно НО ... с открытия бара прошло даже больше минуты ... при определенных условиях он меняется и время отсчета становится равным серверному т. е. он определяется как новый и отсчет идет снова ... уточнение бар тот же .... как быть в этой ситуации ?
Может вам надо это:
int TF = PERIOD_M15; datetime TM = 0; int BarI = 0; void OnTick() { if (TM!=iTime(Symbol(),TF,BarI)) { TM = iTime(Symbol(),TF,BarI); } Print("С момента открытия бара #",BarI, "прошло", TimeCurrent()-TM); }
Может вам надо это:
как узнать время открытия бара и уловить момент если оно меняется ?
Время открытия бара не меняется. Узнать его можно с помощью функции iTime()
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования