エラー、バグ、質問 - ページ 3133

 
Yury Lemeshev #:

一貫性を持つこと。を確認すると

SymbolIsSynchronized(euSY01)==true

を確認し

(euSY01b>0)==true

:)

 
Yury Lemeshev #:

このように、7つのペアのコードにこのような行が7つある場合、マーケットオーバービューには1つの通貨の相場しか表示されないことになります。


高価な関数なので、私なら前の値と等価にしてバイパスします。
 
JRandomTrader #:

一貫性を持つこと。を確認すると

を確認し

:)

(euSY01b>0)==true

よりも優れています。

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


同期を確認すると、1つの通貨にしか対応していない。一度に7通貨の分析が必要なのですが。

 
Yury Lemeshev #:
同期を確認すると、1つの通貨にしか対応していない。でも、7通貨については、ちょっと分析する必要がありますね。

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 false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURUSD true
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD true


同期を確認すると、1つの通貨にしか対応していない。そして、すぐに7通貨を分析する必要があります。

そのため、ペアを最後に同期させた時刻を覚えておいて、それを参考にすることもできます。

また、SymbolInfoTick()でアスクとビッドの

 

true == true, result: true. and false == true, result: false :) のような感じです。

の場合、まさにこのような結果になります。

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

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

または

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

if (-1) {
  ...
}

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

このようにすると、コード内に7つのペアのためのそのような行がある場合、市場の概要には1つの通貨の相場しか表示されません。


OnTickでBarsを呼び出してみる

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 #:

OnTickでBarsを呼び出してみる

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

記事より

また、OnTickに価格への参照があるはずです(サードパーティのキャラクターが読み込まれるように)。

の問題を解決するものではありません。

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) は、正しく使用すると常に値が満たされるようになりました。なぜか、必要な記号の正しい値が来ない。そしてそれは、他の7つの通貨のうちの1つである前回受け取った値によって、明らかに埋められるのです。

解決策がなく、1ヶ月以上探しているこの解決策では、ただのバグテスタになってしまう気がします。開発者の皆さんは、この点に注意してください。バグであれば修正する
 
Vitaly Muzichenko #:

OnInit()の中で行う必要があります。

しかし、私のマルチシンボル・インジケータの1つをテストすると、入力パラメータの文字列からシンボルのリストがOnInitでロードされ、それらの価格がOnCalculateでアクセスされます。 さらに、Market Watchからシンボルをロードするように設定すると、テスターには1つの基本シンボルだけが表示されます。