alchemist-trade:
Все правильно. По умолчанию советник получает только тики того инструмента, на котором стоит. Если нужны котировки других инструментов, их нужно запрашивать.
Привет!
Читаю документацию по MQL4 и не могу найти функций, которые бы позволили получить свежие данные по валютным парам.
marketeer:
Все правильно. По умолчанию советник получает только тики того инструмента, на котором стоит. Если нужны котировки других инструментов, их нужно запрашивать.
Все правильно. По умолчанию советник получает только тики того инструмента, на котором стоит. Если нужны котировки других инструментов, их нужно запрашивать.
Верно, и в мультивалютном советнике это удобно делать через таймер. Но с таймером возникает проблема, по крайней мере на МТ4 она точно есть и в сервисдеске мне ответили, что в ближайшее время решать ее не будут. Проблема - в тестере таймер на работает! Я выкручиваюсь так, имитирую вызов таймера в OnTick:
// код написан для MQL4, для MQL5 возможны небольшие отличия // имитирует вызов таймера с интервалом 1 сек при работе под тестером // Возвращает true, если работает под тестером bool IsRunOnTester() { if(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_OPTIMIZATION)) return true; return false; } void OnTick() { if(IsRunOnTester()) { static datetime dt1 = 0, dt2 = 0; static bool tfirst = true; if(tfirst) { tfirst = false; dt1 = dt2 = TimeCurrent(); return; } dt2 = TimeCurrent(); for(datetime TimeTesterCurrent = dt1+1; TimeTesterCurrent <= dt2; TimeTesterCurrent++) { TimeToStruct(TimeTesterCurrent, TimeCurrStruct); OnTimer(); } dt1 = dt2; } } void OnTimer() { if(!IsRunOnTester() && TimeCurrent() >= D'2014.10.19 00:00') // для тестировщиков, ограничение работы по времени return; OnTimerCounter++; if(!IsRunOnTester()) TimeToStruct(TimeCurrent(), TimeCurrStruct); for(int n = 0; n < ArraySize(SmartDspArr); n++) // перебор всех экземпляров класса стратегии CSmartDSP, каждый экземпляр торгует на своем инструменте SmartDspArr[n].ReceiveTick(TimeCurrStruct); //TrailingStop.DoTrailing(); if(FlashCounter++ >= FlashPeriod) // флешим лог-файлы { FlashAllFiles(); FlashCounter = 0; } if(EnableScreenShot && SSCounter++ >= SSPeriod) // делаю скриншоты, потом прикольно посмотреть торговлю за день на видео в ускоренном режиме { string fname = SShotFileName + "ss_" + TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS); WindowScreenShot(fname, 1280, 720); SSCounter = 0; } }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет!
Читаю документацию по MQL4 и не могу найти функций, которые бы позволили получить свежие данные по валютным парам.
Пока вижу единственный способ использовать свежие данные такой:
Подскажите, пожалуйста, насколько я прав? Может есть более простой путь?