Отслеживание появления новых тиков на нескольких парах одновременно

 
Пишу кластерный индикатор для n валютных пар, ищущий дивергенции кросса и набора из n-1 валютных пар, составляющих этот кросс. Проблема в том, что если его ставить, например, на GBPJPY, то при появлении нового тика на EURUSD он пересчитываться не будет. А хотелось бы.. Как такое реализовать?
 
Fduch писал(а) >>
Пишу кластерный индикатор для n валютных пар, ищущий дивергенции кросса и набора из n-1 валютных пар, составляющих этот кросс. Проблема в том, что если его ставить, например, на GBPJPY, то при появлении нового тика на EURUSD он пересчитываться не будет. А хотелось бы.. Как такое реализовать?

Зациклить ?

 
Figar0 писал(а) >>

Зациклить ?

Думал так сделать, но как-то некрасиво.. Будет нагружать комп.. хотя если сделать if(нет_новых_тиков) return(0); тогда не будет.. наверное так и сделаю, спасибо

 
Fduch писал(а) >>

Думал так сделать, но как-то некрасиво.. Будет нагружать комп.. хотя если сделать if(нет_новых_тиков) return(0); тогда не будет.. наверное так и сделаю, спасибо

Что бы не шибко грузил, минимальная задержка (допустим 1 секунда) и проверка на новые тики if(нет_новых_тиков) continue;

Я других способов не знаю, может и есть конечно, но вряд ли они будут краше)

 

Ставите на пары, тики которых хотите использовать, советник с такой конструкцией

PostMessageA(BasicHandle, RegisterWindowMessageA("MetaTrader4_Internal_Message"), 2, 1);

На всех парах, где будут запущены такие советники по приходу нового тика будет выполняться ваш основной советник, который будет прикреплен к графику с хэндлом BasicHandle.

BasicHandle можно узнать предварительно запустив такой скрипт на графике, где будет запущен основной советник

BasicHandle = WindowHandle(Symbol(), 0);
 
посмотрите как это сделано вот тут 'Сборщик тиков (TickSave)'
 
mql4com писал(а) >>

Ставите на пары, тики которых хотите использовать, советник с такой конструкцией

На всех парах, где будут запущены такие советники по приходу нового тика будет выполняться ваш основной советник, который будет прикреплен к графику с хэндлом BasicHandle.

BasicHandle можно узнать предварительно запустив такой скрипт на графике, где будет запущен основной советник

В продолжении мысли. Скрипт записывает хэндл окна в глобальные переменные, а советники оттуда его считывают. Что бы ручками его не вводить (если много инструментов, то довольно муторно будет).

 
mql4com писал(а) >>

Ставите на пары, тики которых хотите использовать, советник с такой конструкцией..

Написал нечто подобное

//+------------------------------------------------------------------+
//|                                                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. Может есть по нему какая-нибудь документация?

 
Fduch >>:

Проблема с 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); // Эмулируем тики для эксперта.