Ошибки, баги, вопросы - страница 3133

 
Yury Lemeshev #:

Если делать так, а в коде 7 таких строк для семи пар, то в обзоре рынка будут котировки только по одной валюте.


попробуйте вызвать Bars в OnTick

https://www.mql5.com/ru/docs/series/bars

из статьи:

   int bars=Bars(_Symbol,_Period);
   if(bars>0)
     {
      Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
     }
   else  //нет доступных баров
     {
      //--- видимо, данные по символу не синхронизированы с данными на сервере
      bool synchronized=false;
      //--- счетчик цикла
      int attempts=0;
      // сделаем 5 попыток дождаться синхронизации
      while(attempts<5)
        {
         if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
           {
            //--- есть синхронизация, выходим
            synchronized=true;
            break;
           }
         //--- увеличим счетчик
         attempts++;
         //--- подождем 10 миллисекунд до следующей итерации
         Sleep(10);
        }
      //--- вышли из цикла по факту синхронизации
      if(synchronized)
        {
         Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
         Print("Самая первая в истории терминала дата по символу-периоду на данный момент = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));
         Print("Самая первая дата в истории по символу на сервере = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
        }
      //--- синхронизация данных так и не была достигнута
      else
        {
         Print("Не удалось получить количество баров на ",_Symbol);
        }
     }
также, обращение к ценам в OnTick должно быть (чтобы сторонние символы погрузились).
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

попробуйте вызвать Bars в OnTick

https://www.mql5.com/ru/docs/series/bars

из статьи:

также, обращение к ценам в OnTick должно быть (чтобы сторонние символы погрузились).

Это не решает проблемы изначальной

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) при правильном использовании всегда заполняется значением. По каким то причинам правильное значение по нужному символу не приходит. И заполнение происходит видимо по предыдущему полученому значению, а это значение одной из других семи валют.

Если нет какого то решения, а это решение я ищу уже не первый месяц, то я чувствую что юто просто баг тестера. Разработчики уделите пожалуйста этому внимание. Если это баг исправте
 
Vitaly Muzichenko #:

Нужно сделать в ОнИнит() 

точно не помню. но когда я тестирую один из своих мультисимвольных индикаторов, то в OnInit подгружается список символов из строки в input параметрах. а обращение к их ценам идёт в OnCalculate. при чем, когда я устанавливаю в настройках загрузку символов из Market Watch, то в тестере появляется только один основной символ. не знаю как в роботах, но думаю там всё аналогично.

 
Mihail Matkovskij #:

точно не помню. но когда я тестирую один из своих мультисимвольных индикаторов, то в OnInit подгружает список символов из строки в input параметрах. а обращение к их ценам идёт в OnCalculate. при чем, когда я устанавливаю в настройках загрузку символов из Market Watch, то в тестере появляется только один основной символ. не знаю как в роботах, но думаю там всё аналогично.

У меня все символы появляются и котировки идут. Моментная проблема, когда 

в SymbolInfoDouble("EURUSD",SYMBOL_BID,dataEURUSD) попадают данные соседнего SymbolInfoDouble("EURGBP",SYMBOL_BID,dataEURGBP)

 
Yury Lemeshev #:

Это не решает проблемы изначальной

SeriesInfoInteger(symbol,timeframe,SERIES_SYNCHRONIZED)

пробовали?

или, например, CopyTime или CopyClose пробовали вызывать в OnTick?

 
Yury Lemeshev #:

У меня все символы появляются и котировки идут. Моментная проблема, когда 

в SymbolInfoDouble("EURUSD",SYMBOL_BID,dataEURUSD) попадают данные соседнего SymbolInfoDouble("EURGBP",SYMBOL_BID,dataEURGBP)

как вы это определили?

 
Mihail Matkovskij #:

как вы это определили?

2021.12.31 22:14:19.912 2019.01.24 18:50:10   -2117- EURGBP 0.86994
2021.12.31 22:14:19.912 2019.01.24 18:50:10   -2117- EURGBP 1.5969
 
Yury Lemeshev #:
2021.12.31 22:14:19.912 2019.01.24 18:50:10   -2117- EURGBP 0.86994
2021.12.31 22:14:19.912 2019.01.24 18:50:10   -2117- EURGBP 1.5969

то есть, вы хотите сказать, что обращаетесь 2 раза к одному и тому же символу за 1 тик и получаете разные данные? а 2117, это номер строки на сколько я понял?

 
Mihail Matkovskij #:

то есть, вы хотите сказать, что обращаетесь 2 раза к одному и тому же символу за 1 тик и получаете разные данные? а 2117, это номер строки на сколько я понял?

2117 это номер строки. Каждая строчка это отдельный тик. В каждом тике запрос бида по символу EURGBP. Но так же в каждом цикле я запрашиваю еще цены по другим 6 валютам. И вот в какой то момент цена не приходит от нужного символа, и всето того чтобы выдать 0 или -1, или еще чтото, заполняется котировкой от соседнего запроса по другому символу.

 
если советник не мульти валютный такой проблемы и не будет