MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 - ページ 46

 
traveller00:
Bild 2280ですが、これは以前のバージョンでも同様でした。デバッグ用のスクリプトやEAを実行すると、マーケット概要から最初のシンボルの新しいウィンドウがタイムフレーム1Hで開かれます。最初のシンボルではなく、別のタイムフレームでデバッグする必要がある場合はどうすればよいですか?正しいものが最初に来るように、すべてのシンボルを削除せずに行う方法はありますか?
端末の設定 に移動します。そこで、デバッグするシンボルを選択することができます。
 
Artyom Trishkin:
端末の設定 に移動します。そこにはデバッグのためのシンボル選択があります。

アルチョム、君は間違っている。これはMEの設定であり、端末の設定ではない。


もっと働けよ)))

 
Artyom Trishkin:
端末の設定 に移動します。そこで、デバッグ用のシンボルを選択することができます。

了解です、ありがとうございました。MT5は初めてで、まだ全てを知っているわけではありません。

 
Alexey Viktorov:

アルチョム、君は間違っている。これはMEの設定であり、端末の設定ではない


もっと働けよ)))

ええ、私のミスです...。携帯電話から書いていると、時々、見ることができない...。
 

ビルド2280。コンピューターには4つのプロセッサーが搭載されています。MT5が2台稼働しています。最初の1つは長いスクリプトを実行しており、terminal64.exeは1CPUを100%消費し、結果として総負荷は25%になりました。2台目のMT5では遺伝子最適化が実行されています。プロセッサーの数で4つのエージェントが標準装備されています。第一弾は全127件に残りのタスクは2つのエージェントが受信して実行し、残りの2つは受信すらせずに終了した状態でぶら下がっています。強制的にdisable-enableにすると、ジョブに参加します。最適化が再び始まるまで。最初のMT5を殺すと、状況は変わらない。その後、2台目のMT5を再起動すれば問題ありません。これはロードバランサーが厄介なのか、どこかのバグなのか?前者であれば、75%(最初のMT5+2エージェント)でロードが終わってしまい、やはりむしろ風の優先順位で処理すべきなので、あまり良いとは言えません。

追伸:必ずしもCPU負荷とは関係ないようです。ただ、再起動後に遺伝が始まり、他のものは全く動いていません。また、2つのエージェントがオフ/オンを切り替えるまで怠けていました。3つのエージェントだけをアクティブにして、1つをまったく無効にすると、2つはまだラグがあり、1つだけが動作しています。

P.P.S. プロセッサーが6台なら、3台です。
 

ビルド2280。インジケーターのデバッグを、デバッガーでステップバイステップで実行しました。ライン上

StartTime = iTime(Symbols[0], _Period, Pos + PosAddon);

デバッグがクラッシュしました。クリティカルエラーで デバッグが止まっているようなもの。ログには次のように書かれています。

           crash -->  000000 B7250C38B1 038424 B8000000    add        eax, [rsp+0xb8]
                      000000 B7250C38B8 89442460          mov        [rsp+0x60], eax
                      000000 B7250C38BC 448 B4C2460        mov        r9d, [rsp+0x60]
                      000000 B7250C38C1 49 B8010000000000  mov        r8, 0x1
                                       0000
                      000000 B7250C38CB 488 B542468        mov        rdx, [rsp+0x68]
                      000000 B7250C38D0 48 B9E8DD4220B700  mov        rcx, 0xb72042dde8
                                       0000
                      000000 B7250C38DA 49 FF96580F0000    call       qword near [r14+0xf58]  ; #11037 (terminal64.exe)
        
        00: 0x000000B7250C38B1

また、めったにないことですが、起こります。知らぬ間に、デバッグの間に何も大きく変わっていないのです。

 

ビルド2280。取引所、先物市場履歴はすべて読み込まれますが、テストはオフラインで行われます。iBarShiftは インジケータで奇妙に動作します。また、同じコードがスクリプトで問題なく動作します。バグなのか、それとも私が見逃しているのか?

#property indicator_separate_window

void OnInit()
{
  datetime Time[];
  ArraySetAsSeries(Time, true);
  CopyTime(_Symbol,_Period,0,1,Time);

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  Print("Symbol="+_Symbol+", Shift="+(string)Shift);

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    Print("Symbol="+SymbName+", Shift="+(string)Shift);
  }
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  return 0;
}

そんなコードもあるんですね。基本的には、マーケットレビューからすべてのシンボルを実行し、iBarShiftを ヤンクします。同じコードがスクリプトで正常に動作します。このインジケータは、現在のシンボル(実行中のチャート上)を除くすべてのシンボルに対して、履歴がないというエラーとともに-1を出力します。2回目の実行で同時に、どうやら履歴を読み込んで、すでに正常に表示されているようです。

 
traveller00:

を実行すると、同じコードがスクリプトで正常に動作します。バグなのか、それとも私が見逃しているのか?

スクリプトとは異なり、インジケータは非同期で動作します。つまり、ストーリーの準備が整うのを待つことはありません。

 
fxsaber:

スクリプトとは異なり、インジケータは非同期で動作します - 履歴が準備されるのを待つことはありません。

まあ、歴史は全部あるんですけどね。先ほど申し上げたように、オフラインで動作し、すべての履歴はすでにサーバーからダウンロードされています。それとも、何か別のものが必要なのでしょうか?

 
traveller00:

まあ、歴史は全部あるんですけどね。さっきも言ったように、オフラインで作業しているので、すべての履歴はすでにサーバーからダウンロードされているんです。それとも、何か別のものが必要なのでしょうか?

もちろん理論上は、コールドスタートからすべてを立ち上げる必要があります。しかし、実際には、私はインジケーターにはまっていないので、なんとも言えません。