Ведь понятно , советник стоит на конкретной паре и тики приходят в функцию OnTick() только по этой паре.
Как быть если нужно получить в функцию тики от других инструментов ?
понятно что в OnTick можно читать состояние других пар - но читаь их только когда тик пришел именно от того инструмента на котором стоит советник!
а как не пропустить тик на другом инструменте ?
пока вижу только использование конструкции EventSetMillisecondTimer с минимальным квантом
и затем чтением в OnTime нужных пар с анализом на изменения цены
В тестере стратегий используется минимальный интервал в 1000 миллисекунд. В общем случае при уменьшении периода таймера увеличивается время тестирования, так как возрастает количество вызовов обработчика событий таймера. При работе в режиме реального времени события таймера генерируются не чаще 1 раза в 10-16 миллисекунд, что связано с аппаратными ограничениями.
Но данное решение достаточно кривое , кроме того оно приведет к большой нагрузке в целом + тестирование такого советника будет медленным.
Ведь понятно , советник стоит на конкретной паре и тики приходят в функцию OnTick() только по этой паре.
Как быть если нужно получить в функцию тики от других инструментов ?
понятно что в OnTick можно читать состояние других пар - но читаь их только когда тик пришел именно от того инструмента на котором стоит советник!
а как не пропустить тик на другом инструменте ?
Данная тема уже неоднократно обсуждалась. Если кратко, то решения два:
- Через таймер.
- Через специальный индикатор, который загружает эксперт на инструмент, после чего получает от него событие приход нового тика через OnChartEvent.
Данная тема уже неоднократно обсуждалась. Если кратко, то решения два:
- Через таймер.
- Через специальный индикатор, который загружает эксперт на инструмент, после чего получает от него событие приход нового тика через OnChartEvent.
Спасибо! вопрос снят тема закрыта
кстати просто не успел описал вариант с индикаторами на нужных инструментах эта мысль тоже витала в мыслях
и пожалуй она лучше чем таймер - вот только тестировать такой вариант чуть сложней
Ведь понятно , советник стоит на конкретной паре и тики приходят в функцию OnTick() только по этой паре.
Как быть если нужно получить в функцию тики от других инструментов ?
понятно что в OnTick можно читать состояние других пар - но читаь их только когда тик пришел именно от того инструмента на котором стоит советник!
а как не пропустить тик на другом инструменте ?
OnBookEvent
Но в тестере не будет работать.Спасибо! вопрос снят тема закрыта
кстати просто не успел описал вариант с индикаторами на нужных инструментах эта мысль тоже витала в мыслях
и пожалуй она лучше чем таймер - вот только тестировать такой вариант чуть сложней
Просмотрел темы и идеи понравилась одна из них
https://www.mql5.com/ru/articles/234
//+------------------------------------------------------------------+ //| iSpy.mq5 | //| Copyright 2010, Lizar | //| lizar-2010@mail.ru | //+------------------------------------------------------------------+ #define VERSION "1.00 Build 2 (26 Dec 2010)" #property copyright "Copyright 2010, Lizar" #property link "https://www.mql5.com/ru/users/Lizar" #property version VERSION #property description "Индикатор iSpy - индикатор-шпион." #property description "Запускается на нужном торговом инструменте для получения тиков" #property indicator_chart_window input long chart_id=0; // идентификатор графика-получателя события input ushort custom_event_id=0; // идентификатор события //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // размер массива price[] const int prev_calculated,// обработано баров на предыдущем вызове const int begin, // откуда начинаются значимые данные const double& price[] // массив для расчета ) { double price_current=price[rates_total-1]; //--- Инициализация: if(prev_calculated==0) { // Генерируем и отправляем событие "Инициализация" EventChartCustom(chart_id,0,(long)_Period,price_current,_Symbol); return(rates_total); } // При появлении нового бара генерируем пользовательское событие "новый тик", // которое можно будет поймать в эксперте или индикаторе EventChartCustom(chart_id,custom_event_id+1,(long)_Period,price_current,_Symbol); //--- return value of prev_calculated for next call return(rates_total); }
//+------------------------------------------------------------------+ //| exSpy.mq5 | //| Copyright 2010, Lizar | //| https://www.mql5.com/ru/users/Lizar | //+------------------------------------------------------------------+ #define VERSION "1.00 Build 1 (26 Dec 2010)" #property copyright "Copyright 2010, Lizar" #property link "https://www.mql5.com/ru/users/Lizar" #property version VERSION #property description "Эксперт демонстрирует работу индикатора-шпиона iSPY" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(iCustom("GBPUSD",PERIOD_M1,"iSpy",ChartID(),0)==INVALID_HANDLE) { Print("Ошибка установки шпиона на GBPUSD"); return(true);} if(iCustom("EURUSD",PERIOD_M1,"iSpy",ChartID(),1)==INVALID_HANDLE) { Print("Ошибка установки шпиона на EURUSD"); return(true);} if(iCustom("USDJPY",PERIOD_M1,"iSpy",ChartID(),2)==INVALID_HANDLE) { Print("Ошибка установки шпиона на USDJPY"); return(true);} Print("Шпионы засланы, ждем шифровок..."); //--- return(0); } //+------------------------------------------------------------------+ //| Стандартная функция обработки событий. Она может использоваться | //| по своему прямому назначению, как описано в документации. | //| | //| В данном примере демонстрирует декодирвание сообщений индикатора-| //| шпиона iSPY. | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // идентификатор события: // если id-CHARTEVENT_CUSTOM=0 - событие "инициализация" const long& lparam, // период графика const double& dparam, // цена const string& sparam // инструмент ) { if(id>=CHARTEVENT_CUSTOM) { Print(TimeToString(TimeCurrent(),TIME_SECONDS)," -> id=", id-CHARTEVENT_CUSTOM,": ",sparam," ", EnumToString((ENUM_TIMEFRAMES)lparam)," price=",dparam); } }

- 2011.01.10
- Konstantin Gruzdev
- www.mql5.com
Тики приходят ну 10-ть в секунду, т.е. интервал порядка 100 млсек. Просто в цикле (без таймеров, без шпионов и т.д.) опрашивайте нужные инструменты и существенной разницы не будет. Пробовал различные варианты и все-равно вернулся в самому простому: опрос инструментов в цикле при приходе очередного тика.
идея с таймером плохая
Событие лучше получать в тот момент когда оно возникает!

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ведь понятно , советник стоит на конкретной паре и тики приходят в функцию OnTick() только по этой паре.
Как быть если нужно получить в функцию тики от других инструментов ?
понятно что в OnTick можно читать состояние других пар - но читаь их только когда тик пришел именно от того инструмента на котором стоит советник!
а как не пропустить тик на другом инструменте ?