Erreurs, bugs, questions - page 3133

 
Yury Lemeshev #:

Si vous faites cela, et qu'il y a sept lignes de ce type dans le code pour sept paires, alors la vue d'ensemble du marché n'aura que des cotations pour une seule devise.


Fonction coûteuse, je la contournerais par une égalité avec la valeur précédente.
 
JRandomTrader #:

Soyez cohérent. Si vous vérifiez

puis vérifier et

:)

(euSY01b>0)==true

C'est mieux que juste

euSY01b>0
 
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURJPY faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURUSD vrai
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURJPY faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD vrai


Si vous vérifiez la synchronisation, elle ne fonctionne que pour une seule devise. J'ai besoin d'analyser 7 devises à la fois.

 
Yury Lemeshev #:
Si vous vérifiez la synchronisation, elle ne fonctionne que pour une seule devise. Mais j'ai besoin d'analyser 7 devises à la fois.

J'ai besoin de le faire dans OnInit()

// Потрогаем символ, иначе в тестере не грузит историю
 for(int i=0;i<CountSymbol;i++) {
   iClose(SymbTrade[i],PERIOD_CURRENT,1);
 }
 
Yury Lemeshev #:
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURJPY faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURUSD vrai
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURJPY faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD faux
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD vrai


Si vous vérifiez la synchronisation, elle ne fonctionne que pour une seule devise. Et je dois analyser 7 devises dans un instant.

En guise de béquille, vous pouvez essayer de vous rappeler l'heure de la dernière synchronisation de la paire et l'utiliser comme référence.

Vous pouvez également utiliser SymbolInfoTick() pour le ask et le bid.

 

c'est comme si vrai == vrai, résultat : vrai. et faux == vrai, résultat : faux :)

c'est exactement le résultat que vous obtenez si

if (true) { // управление передается коду в скобках
  ...
}

if (false) { // управление не передаётся коду в скобках
  ...
}

ou

// в if не 0 - true
if (1) {
  ...
}

if (-1) {
  ...
}

// в if 0 - false
if (0) {
  ...
}
 
Yury Lemeshev #:

Si vous faites cela, et qu'il y a 7 lignes de ce type dans le code pour 7 paires, alors la vue d'ensemble du marché ne montrera que les cotations d'une seule devise.


essayez d'appeler Bars dans OnTick

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

de l'article :

   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);
        }
     }
également, la référence aux prix dans OnTick devrait être (pour que les caractères tiers soient chargés).
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

essayez d'appeler Bars dans OnTick

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

de l'article :

De plus, il devrait y avoir une référence aux prix dans OnTick (afin que les caractères tiers soient chargés).

Cela ne résout pas le problème de l'original

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) est toujours rempli de valeur lorsqu'il est utilisé correctement. Pour une raison quelconque, la valeur correcte du symbole requis n'apparaît pas. Et il semble être rempli en utilisant la valeur reçue précédemment, qui est la valeur de l'une des sept autres monnaies.

S'il n'y a pas de solution, et que cette solution, je la cherche depuis plus d'un mois, j'ai l'impression que c'est juste un testeur de bogues. Les développeurs sont priés d'y prêter attention. Si c'est un bogue, réparez-le
 
Vitaly Muzichenko #:

Je dois faire dans OnInit()

Mais lorsque je teste un de mes indicateurs multi-symboles, la liste des symboles de la chaîne de paramètres d'entrée est chargée dans OnInit. Et leurs prix sont accessibles dans OnCalculate. De plus, lorsque je configure le chargement des symboles depuis Market Watch, seul un symbole de base apparaît dans le testeur.

 
Mihail Matkovskij #:

Mais lorsque je teste un de mes indicateurs multi-symboles, il charge la liste des symboles à partir de la chaîne dans les paramètres d'entrée dans OnInit. et leurs prix sont accessibles dans OnCalculate. De plus, lorsque je configure le chargement des symboles à partir de Market Watch, seul un symbole de base apparaît dans le testeur.

Tous les symboles apparaissent et les guillemets disparaissent. Le problème momentané est quand

SymbolInfoDouble("EURUSD",SYMBOL_BID,dataEURUSD) reçoit les données du SymbolInfoDouble("EURGBP",SYMBOL_BID,dataEURGBP) adjacent.