ライブラリ: マルチテスター - ページ 35

 
fxsaber #:

テストへのご協力ありがとうございました!MTTester.mqhを更新しました。

ライブラリの提供ありがとうございました。

 
MTTester.mqhを再び更新しました。今回は、その苦労話をしよう。
#include <fxsaber\Benchmark\Benchmark.mqh>  //https://www.mql5.com/ja/code/31279
#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/ja/code/26132

const bool Init = EventSetTimer(3);

void OnTimer()
{
  if (MTTESTER::IsReady()) // スタートボタンが押せる状態になっている場合
    Print(_B(MTTESTER::ClickStart(), 1)); // スタートボタンが押されたかどうかと、それにかかった時間。
}

このExpert Advisorは、Stopでなければ3秒ごとにStartボタンを押す。私はそれを押すことができた - 真、そうでなければ - 偽。



スタートボタンを押すと計算が始まる。

Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 125248 mcs.
true
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 123327 mcs.
true

この操作には約125ミリ秒かかる。


珍しいことではない。

Start を押す - 即座に計算が開始されるか、テスターが計算を実行できないことを報告します(FromDate >= ToDate など)。

Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1001401 mcs.
true
Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1004102 mcs.
true

この操作には約1秒かかります。ライブラリは警告を発しますが、ボタンが押されたことをtrueで返します。



スタートボタンが押されていない。ターミナルを再起動しないと治りません。

この状況のログはありません。このような状況を特定するのに10秒弱かかります。このようなアラートが表示されます。

problem with Start-button!

false を返す - ボタンが押されていない。

 
MTTester.mqhを更新。
 
fxsaber #:


スタートが押されない。ターミナルを再起動しないと治りません。

リモートのWinServerマシンが、失敗することなく何百回もシングルパスし続けていた。


このマシンにログイン(RDP)したとたん、スタートボタンがクリックできなくなった。対処法は、いつものようにターミナルを再起動することです。

この動作は、このマシンへの同様のログインと関係があるようだ。RDPで何十回ログインしても、すべてうまくいく。しかし、あるログインはテスターにとって致命的となる。


Start-bug に遭遇した人は、マシンへのログインと Start ボタンの関係に注意してください。


ZY偶然かどうか、WinServerはこのマシンへのログオン中にアップデートをチェックするよう申し出た。

 


どの*.setファイルにパラメータを設定するか、プログラムで指定できますか?

デフォルトでは同じ設定しか使用されないので、あまり便利ではありません。

 
sergego18 #:

どの*.setファイルにパラメータを設定して渡すかをプログラムで指定することは可能ですか?

 
fxsaber #:

ありがとうございます。
「設定」を1行で渡し、行を「♪」で区切るのが良いのでしょうか?

それとも例のように行の配列で渡すのがよいのでしょうか?

また

MTTester クラスの静的メソッド Run

static bool Run( const string ExpertName = NULL、

const string Symb = NULL、

const ENUM_TIMEFRAMES period = PERIOD_CURRENT、

const datetime iBeginTime = 0、

const datetime iEndTime = 0 )

EA設定を指定するパラメータ文字列(または文字列の配列)を1つ追加しますか?

 
sergego18 #:


「設定」は1行にまとめて、行の区切りは「Ⅾ」の方がいいのでしょうか?

それとも例のように行の配列で渡すのが良いですか?

GetSettingsはTesterではCTRL+Cです。

SetSettingsはTesterではCTRL+Vです。

CTRL+C/Vがどのようなデータで動作するか確認してください。


また

MTTesterクラスのstaticメソッド Run

このメソッドは使いません。履歴として残ります。


この例では、必要なMTTESTERメソッドをすべて示しています。

 
sergego18 #:

どの*.setファイルにパラメータを設定して渡すかをプログラムで指定することは可能ですか?

Validate は、テスターの本格的な ini ファイルと、縮小版のテスター用 set ファイルで動作します。

多くの ini/set ファイルを実行する必要がある場合、Validate はすぐにそれを実行します。ご利用ください。

 
fxsaber #:

Validateは、本格的なTesterのiniファイルと、Testerのためのset-filesという縮小版で動作します。

多くのini/set-filesを実行する必要がある場合、Validateはすぐに実行できます。使用してください。


このコメントから、セットファイルが文字列配列として必要な形式で読み込まれる解決策を見つけました。

https://www.mql5.com/ru/forum/318305/page34#comment_51842356

また、次のように置き換えた。

typedef bool (*INITDEINIT)( void );

各実行の初期化時と非初期化時のコールバック呼び出しのポインタ

をインターフェイスに置き換えた。

インターフェース InitDeInit {

bool RunInit();

bool RunDeInit();

};

これは

構造体 SETTINGS に類似したクラスの継承者に実装されています。

と同様のクラスを継承し、RunInit()メソッドに実装されています。

必要なツールのセットファイルを読み込む。

typedef bool (*INITDEINIT)( void ); - このポインタでは、どのツールが初期化/非初期化されているかを知ることができないため、メソッドへのポインタはまだMQLでサポートされていないインターフェイスへのポインタを使用する方がよいでしょう。

このアプローチでは、MTTester::Runメソッドを修正する必要はありません。



Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
  • 2024.01.21
  • Yuriy Bykov
  • www.mql5.com
You can add this draft function for reading settings from file to string array. автоматическим торговым системам и тестированию торговых стратегий. Validate умеет запускать последовательно много ini-задайний