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

 
fxsaber:

テスターを自動化するための完全な自由が手に入った。

実際の応用例の一つです(すべて自動的に行われます)。

  1. すべてのシンボルを取得し、各シンボルに対して以下のステップを実行します。
  2. 最適化を開始する
  3. ベストパスの最後にデータが取得され、そこから最適化のためのいくつかのタスクが形成されます(入力パラメータの設定範囲)。
  4. 項目3からのすべての最適化が実行される。
  5. 項目4からのすべての最適化からベストパスが取り出され、ポートフォリオ取引用のセットとして保存される。


これは、非常に強力なマーケット・スキャナーであり、TSアジャスターであることが判明した。このような操作にTCソースは必要ない。

 
// テスターにセットファイルをロードする例。
#property script_show_inputs

#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/ja/code/26132

input string inFileName = "SetFile.set"; // セットファイル

string FileToString( const string FileName )
{
  ushort Buffer[];
  
  return(FileLoad(FileName, Buffer) ? ShortArrayToString(Buffer) : NULL);
}

void OnStart()
{  
  MTTESTER::SetSettings("[TesterInputs]\n" + FileToString(inFileName));
}
テスターのiniファイルも同様です。
 
ありがとう
 
MT5 build2209+用にライブラリが更新されました。
 
fxsaber:

非常に強力なマーケット・スキャナーであり、TSアジャスターであることが判明した。

#property script_show_inputs

#include <fxsaber\MultiTester\MultiTester.mqh> //https://www.mql5.com/ja/code/26132
#include <fxsaber\MultiTester\Task.mqh>

input bool OnlyCustomSymbols = true; // カスタム文字のみ
input bool AllSymbols = false;       // すべての文字または現在の文字

void Add( const string SymbName )
{
  TesterSettings.Add(NULL, SymbName, 0, 0, 0, TASK::InitBase, TASK::DeinitBase);

  for (int i = 0; i < ::inAmount; i++)
    TesterSettings.Add(NULL, NULL, 0, 0, 0, TASK::InitSub, TASK::DeinitSub);
}

// この関数はタスクリストを生成する。
void SetTesterSettings()
{
  if (AllSymbols)
    // マーケット・ウォッチから全シンボルを検索する。
    for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
    {
      const string Name = SymbolName(i, true);

      if (!OnlyCustomSymbols || SymbolInfoInteger(Name, SYMBOL_CUSTOM))
        Add(Name);
    }
  else if (!OnlyCustomSymbols || SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM))
    Add(_Symbol);
}


エキスパート・アドバイザーは

sinput int inMinTrades = 500; // 最低取引数(ポジション)。
sinput int inMaxTrades = 90000; // 最大取引(ポジション)数。

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}
 
いくつかの落とし穴を回避更新
 

以前のバージョンについては知らない。しかし最新バージョンでは、同じ測定器のテストを何度も実行することができます。

Doneがログに表示され、その後空になり(Startが表示されない)、端末が同時に新しいパスを開始しました。どうやら、else if (IsRun = (Init = TesterSettings.Init(Pos))&& TesterSettings.Run(Pos))がfalseを返したからです。そして、次のタイマーパスでは、if (MTTESTER::IsReady()) がfalseを返すので、待ちのループになります。TesterSettings.Run(Pos))自体がfalseを返すのは、タイムアウトのため、つまり、ただ待たずに終了するため、些細なことのようです。

 

traveller00:

TesterSettings.Run(Pos))がfalseを返すのは、タイムアウトによる些細なことのようです。

もしそうなら、この数値を増やしてみてください。

  static bool ClickStart( const bool Check = true, const int Attempts = 5 )

Startボタンが押されてから長い間Stopボタンに変わらなかったというケースは初めてです。


Example3を100文字実行しましたが、すべてうまくいきました。

 
そう、僕自身は50に増やしたんだ。でも、他の誰かが同じような問題を抱えていたり、一般的なバージョンで微調整したい場合に備えてね。
 
traveller00:
そう、僕自身は50に増やしたんだ。しかし、他の誰かが同じような問題を抱えていたり、一般的なバージョンでそれを微調整したい場合に備えて、次のようにしました。

ボタンのステータスを変更するのにかかった試行回数のロギングを置く。興味深い結果だ。


ZY おそらくこのバグは まだ影響しているのでしょう。