Мультиавалютный реалтайм

 

Написание мультивалютного советника, имеет несколько подводных камней.

Первая проблемма с которой я столкнулся - ошибка 4066. Борьба с 4066 привела мну к такому коду.

Чесно говря, я его еще не тестировал особо. Но очень надеюсь....

Хотелось бы решить все проблеммы прям в этой ветке. :) Или хотя бы обозначить их.

пока что выкладываю скрипт, демонстрирующий первую версию моего решения.

Файлы:
update_01.mq4  4 kb
 
Честно говоря не совсем понял проблему. При написании мультивалютника не сталкивался с такими проблемами, видимо, не использовал то, что вам нужно. Может, стоит поискать иные варианты решений на MT4 для мультивалютника?
 
https://www.mql4.com/ru/search/4066        4066 и если там поменять чего надо найти то инфы будет как остальные баги пофиксить
 
mql4com писал(а) >>
Честно говоря не совсем понял проблему. При написании мультивалютника не сталкивался с такими проблемами, видимо, не использовал то, что вам нужно. Может, стоит поискать иные варианты решений на MT4 для мультивалютника?

Да я сам 3 года торговал мультивалютником без этой фигни.

вот здесь коротенько описано в чем дело 'Проблема 4066'

 
BabyBear >>:

Да я сам 3 года торговал мультивалютником без этой фигни.

вот здесь коротенько описано в чем дело 'Проблема 4066'

Прочел ветку. Клоню к тому, чтобы не пытаться найти решение проблем, а просто не создавать их: не использовать i-функции.

 

Еще символ должен быть в списке MarketWatch. проверить это можно так

if( MarketInfo( UpdateSymbols[s], MODE_TICKVALUE) == 0) ...

вот еще нашел, https://www.mql5.com/ru/forum/105566

попробую воспроизвести :)

 
MODE_BID и MODE_ASK работает для всех символов из MarketWatch. Остальное - функционал терминала, который можно самому, как хочется, воспроизвести.
 

Особо выпендриваться не буду. Добавлю просто функцию

void UpdateTestMarketWatch()
{
   if( IsTesting()) return;
   
   double tv;   
   for( int s=0; s<UPDATE_SYMBOLS_SIZE; s++)
   {
      tv = MarketInfo( UpdateSymbols[s], MODE_TICKVALUE);
      Print( " symbol= ", UpdateSymbols[s], "; TICKVALUE=", tv);
      if( (tv < 0.5) || (tv>2.0))
         Alert( " UpdateTestMarketWatch(): Error ", UpdateSymbols[s], "; TICKVALUE=", tv);
   }
}

Чтобы понять зачем она, удалите USDCHF из окошка MArketWatch и запустите скрипт

Получим в логе

2009.04.07 23:47:20 Update_01 EURUSD,H1: Alert: UpdateTestMarketWatch(): Error NZDCHF; TICKVALUE=1.#INF

и пи-пи алерта

Файлы:
 
mql4com писал(а) >>
MODE_BID и MODE_ASK работает для всех символов из MarketWatch. Остальное - функционал терминала, который можно самому, как хочется, воспроизвести.

Не все ж такие умные. Да и у умных времени не всегда достаточно. :)

Причина обращения: