Services , новый функциона в архитеркуте MT5, похороны MT4 не за горой. - страница 5

 
Petros Shatakhtsyan:


Интересно, что вчера я хотел пользоваться  возможностями  MarketBookAdd и OnBookEvent, чтобы сделать мультивалютного советника.

Но почему-то MarketBookAdd  на тестере не работает. Выдает ошибку 4901-Стакан цен не может быть добавлен.

Дак он только реалтайм работает...
 
Alexey Kozitsyn:
Дак он только реалтайм работает...


А мне нужно получить не стакан цен, а иметь такие простые возможности:

1. Очистить содержание Market Watch.

2. Добавить туда нужные символы (это есть)

3. С помощью функции или события получить все тики которые показываются в Market Watch от каждого символа, или совместно OnТick сделать и еще функцию Мульти-тик.

 
Petros Shatakhtsyan:


А мне нужно получить не стакан цен, а иметь такие простые возможности:

1. Очистить содержание Market Watch.

2. Добавить туда нужные символы (это есть)

3. С помощью функции или события получить все тики которые показываются в Market Watch от каждого символа, или совместно OnТick сделать и еще функцию Мульти-тик.

Не совсем понятно, зачем Вы решили идти через стакан цен, если хотите работать с обзором рынка и тиками?
 
Alexey Kozitsyn:
Не совсем понятно, зачем Вы решили идти через стакан цен, если хотите работать с обзором рынка и тиками?

А где вы собираетесь получить данные от всех котировок, которые видны или добавлены в обзор рынка.
 
Petros Shatakhtsyan:

А где вы собираетесь получить данные от всех котировок, которые видны или добавлены в обзор рынка.
Эм... OnTimer(), OnTick(), OnCalculate()...
 
Petros Shatakhtsyan:

А где вы собираетесь получить данные от всех котировок, которые видны или добавлены в обзор рынка.

MqlTick tickEUR;
MqlTick tickGBP;
MqlTick tickEURGBP;

GetSymbolByName(string symbol)   {    string symbol_name="";   // Имя символа на сервере //--- Если передали пустую строку, вернем пустую строку    if(symbol=="")       return(""); //--- Пройтись по списку всех символов на сервере    for(int s=0; s<SymbolsTotal(false); s++)      {       //--- Получим имя символа       symbol_name=SymbolName(s,false);       //--- Если искомый символ есть на сервере       if(symbol==symbol_name)         {          //--- Выберем его в окне "Обзор рынка"          SymbolSelect(symbol,true);          //--- Вернем имя символа          return(symbol);         }      } //--- Если искомого символа нет, вернем пустую строку    Print("Символ "+symbol+" не найден на сервере!");    return("");   } int OnInit()   { //---    GetSymbolByName("EURUSD"+SymbolSuffix);    GetSymbolByName("GBPUSD"+SymbolSuffix);    GetSymbolByName("EURGBP"+SymbolSuffix); }

void OnTimer() // или OnTick   {       if(!SymbolInfoTick("EURUSD"+SymbolSuffix,tickEUR)) {Print("EURUSD price has not been received"); return;}    if(!SymbolInfoTick("GBPUSD"+SymbolSuffix,tickGBP)) {Print("GBPUSD price has not been received"); return;}    if(!SymbolInfoTick("EURGBP"+SymbolSuffix,tickEURGBP)) {Print("EURGBP price has not been received"); return;} if(tickEUR.ask!=0 && tickEUR.bid!=0) {} // ну и все в этом духе }

 
Maxim Dmitrievsky:

КАКИЕ????? как можно на протяжении нескольких сообщений так безбожно тупить?
Людей, предлагающих что-то полезное , можно узнать по стрелам торчащим у них из спины. Любое новое всегда принимается в штыки. Особенно теми, кто зарабатывает на продаже арбитражных советников, скопированных у hrenfx, поскольку прямое использование их на рынке не возможно из-за противодействия этому ДЦ.
 
Maxim Dmitrievsky:


Это будет работать неэффективно если эксперт обрабатывает каждый тик, даже если в таймере использовать миллисекунды.

Нужен более простой способ, чтобы получить все тики прямо из обзора рынка.

A через ОnTick невозможно, поскольку он работает только тогда когда приходит очередной тик там где стоит советник.

 
Petros Shatakhtsyan:

Тут все равно придется делать через таймер. Просто в таймере нужно прописать алгоритм таким образом, чтобы он не делал запрос, если последний тик не отличается от предыдущего тика.

BookEvent тут Вам не поможет.

 
Alexey Kozitsyn:

Тут все равно придется делать через таймер. Просто в таймере нужно прописать алгоритм таким образом, чтобы он не делал запрос, если последний тик не отличается от предыдущего тика.

BookEvent тут Вам не поможет.


Да, но надо еще учитывать что тут только один таймер, не так, так VC++, и если у вас есть много проверок временных участков, то просто можно потерять многие тики, и всё превратится в кашу.