- Советники: ADX & MA
- Учет тиков с нескольких пар в одном советнике
- Индикаторы: Каналы
Пишу кластерный индикатор для n валютных пар, ищущий дивергенции кросса и набора из n-1 валютных пар, составляющих этот кросс. Проблема в том, что если его ставить, например, на GBPJPY, то при появлении нового тика на EURUSD он пересчитываться не будет. А хотелось бы.. Как такое реализовать?
Зациклить ?
Думал так сделать, но как-то некрасиво.. Будет нагружать комп.. хотя если сделать if(нет_новых_тиков) return(0); тогда не будет.. наверное так и сделаю, спасибо
Что бы не шибко грузил, минимальная задержка (допустим 1 секунда) и проверка на новые тики if(нет_новых_тиков) continue;
Я других способов не знаю, может и есть конечно, но вряд ли они будут краше)
Ставите на пары, тики которых хотите использовать, советник с такой конструкцией
PostMessageA(BasicHandle, RegisterWindowMessageA("MetaTrader4_Internal_Message"), 2, 1);
На всех парах, где будут запущены такие советники по приходу нового тика будет выполняться ваш основной советник, который будет прикреплен к графику с хэндлом BasicHandle.
BasicHandle можно узнать предварительно запустив такой скрипт на графике, где будет запущен основной советник
BasicHandle = WindowHandle(Symbol(), 0);
Ставите на пары, тики которых хотите использовать, советник с такой конструкцией
На всех парах, где будут запущены такие советники по приходу нового тика будет выполняться ваш основной советник, который будет прикреплен к графику с хэндлом BasicHandle.
BasicHandle можно узнать предварительно запустив такой скрипт на графике, где будет запущен основной советник
В продолжении мысли. Скрипт записывает хэндл окна в глобальные переменные, а советники оттуда его считывают. Что бы ручками его не вводить (если много инструментов, то довольно муторно будет).
Ставите на пары, тики которых хотите использовать, советник с такой конструкцией..
Написал нечто подобное
//+------------------------------------------------------------------+ //| signal_sender.mq4 | //| Copyright © 2009, Gryb Alexander | //| alexandergrib@rambler.ru ICQ: 478-923-832 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Gryb Alexander" #property link "alexandergrib@rambler.ru ICQ: 478-923-832" #include <WinUser32.mqh> #include <stdlib.mqh> int start() { PostMessageA(GlobalVariableCheck("expert_window_handle"), RegisterWindowMessageA("MetaTrader4_Internal_Message"), 2, 1); }
Проблема с RegisterWindowMessageA. Компилятор пишет, что эта function not found. Может, еще каку-то библиотеку необходимо подключить?
P. S. Впервые столкнулся с WinUser32.mqh. Может есть по нему какая-нибудь документация?
Проблема с RegisterWindowMessageA. Компилятор пишет, что эта function not found. Может, еще каку-то библиотеку необходимо подключить?
P. S. Впервые столкнулся с WinUser32.mqh. Может есть по нему какая-нибудь документация?
В файл WinUser32.mqh вставить строчку
int RegisterWindowMessageA( string lpstring );
Хм.. Все равно не хочет ловить тики.. В окне обзора рынка появляются все новые, советник посылает PostMessageA, но start индикатора на основном графике не выполняется.
Кстати, PostMessageA возвращает "0". Это нормально? Как же все-таки не хватает документации по WinUser32
Надо в индикаторе контроллировать изменение времени этой функцией:
datetime TimeCurrent()
По изменению значения обновлять график этим:
PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0); // Эмулируем тики для индикаторов. PostMessageA (WindowHandle (Symbol(), Period()), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1); // Эмулируем тики для эксперта.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования