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

 

ティックの履歴をダウンロードする最も便利な方法(ターミナルで Expert Advisorを実行する)。

#property description "ダウンロードはテスターを通して"

sinput datetime inFromDate = D'2019.01.01'; // どの日付からダニをアップロードするか
sinput bool inAllSymbols = false;           // すべての文字(true)または現在の文字(false)。

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

string PrevTesterSettings = NULL;

string GetMyName( void )
{
  return(StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Experts\\")));
}

bool RunMe( const datetime FromDate, const bool AllSymbols = false )
{
  const string Str = "[Tester]" +
                     "\nExpert=" + GetMyName() +
                     "\nSymbol=" + _Symbol +
                     "\nOptimization=" + (AllSymbols ? "3" : "0") +
                     "\nModel=4" +
                     "\nFromDate=" + TimeToString(FromDate, TIME_DATE) +
                     "\nToDate=" + TimeToString(TimeCurrent(), TIME_DATE) +
                     "\nForwardMode=0" +
                     "\nProfitInPips=1" +
                     "\nOptimizationCriterion=0" +
                     "\nVisual=0";
                     
  return(MTTESTER::SetSettings2(Str) && MTTESTER::ClickStart());
}

int OnInit()
{
  bool Res = !MQLInfoInteger(MQL_TESTER) && EventSetTimer(1);

  if (Res = Res && MTTESTER::GetSettings(PrevTesterSettings))
    if (!(Res = RunMe(inFromDate, inAllSymbols)))
      MTTESTER::SetSettings2(PrevTesterSettings);

  return(Res ? INIT_SUCCEEDED : INIT_FAILED);
}

void OnTimer()
{
  if (MTTESTER::IsReady())
  {
    MTTESTER::SetSettings2(PrevTesterSettings);
    
    if (inAllSymbols)
      MTTESTER::CloseNotChart();

    ExpertRemove();
  }
}


その後、ターミナルでティックで動作するスクリプトを実行することができ、生命の兆候なしに多くの時間を待つことはありません。

 
Stanislav Korotky:

TesterSettings.Add 呼び出しのために独自のMQL5コントローラを書く必要は、テスターパスの設定のテキスト形式(シンボル、タイムフレーム、各行でTesterSettings.Addに 渡すことができる他のもののような)をサポートすることによって取り除くことができます。そして、普遍的なExpert Advisor-コントローラを作成し(ライブラリに追加する)、それを1つのパラメータ(設定を含むファイル)として入力し、それを基にSetTesterSettingsを 実装すれば、ユーザーは何もプログラムする必要はありません。

結局、私はこうした。我々はiniファイルからタスクのバッチを作り、それを実行のために送る。

しかし、しばしば、前のタスクの結果に基づいてタスクを形成する必要があるタスクがあります。 したがって、iniバリアントが常に適しているとは限りません。


ZY 実装はこちら

 
テスターの自動化を実践されている方には、以下の設定をご覧になることをお勧めします。
MQL5\Profiles\Tester\Groups\*.txt
MQL5\Profiles\Tester\Symbols\*.txt
 
fxsaber:

ティック履歴をダウンロードする最も便利な方法(ターミナルで EAを実行)。

その後、ターミナルでティックで動作するスクリプトを実行し、生命の兆候なしに多くの時間を待つことはありません。

これは、実際のシンボルのティック履歴からカスタムシンボルを作成するのに便利です。カスタム・シンボルはオリジナル・シンボルと異なり、ティックとバーが完全に対応している。従って、テスター(例)の結果に誤りは生じない。

 
残念ながら、テスターでティック履歴をダウンロードしても、ターミナルから数年前のティックデータにアクセスすることはできません。まずテスターからティックをファイルにアンロードし、ターミナルからカスタムシンボルにロードする必要があります。以下はエキスパートアドバイザーの例です。まずテスターでリアルティックモードでティックデータを収集し、次にターミナルでカスタムシンボルにロードします。
ファイル:
 
Evgenii Kuznetsov:
残念ながら、テスターでティック履歴をダウンロードしても、ターミナルから数年前のティックデータにアクセスすることはできません。まずテスターからティックをファイルにアンロードし、ターミナルからカスタムシンボルにロードする必要があります。以下はExpert Advisorの例です。このExpert Advisorは まずテスターでリアルティックモードでティックを収集し、次にターミナルでカスタムシンボルにロードする必要があります。

MTTester.mqhが使用されるターミナルでExpert Advisorを実行することで、あなたのスキームを実装することができます。


ティックからカスタム・シンボルを作成する作業に直面するのは何年ぶりだろうか。年間 - ターミナルはダニを取る問題なく、そこにやった。おそらく、あなたは部分的に要求していないと、単に大きな間隔を要求するときにメモリの不足で渋る。

 
メモリ不足の 場合、CopyTicksRangeは-1を与え、それに応じてGetLastError()でエラーを見つけることができるが、私の場合は0を与えただけだった。
 
Evgenii Kuznetsov:
メモリ不足の 場合、CopyTicksRangeは-1を与え、それに応じてGetLastError()でエラーを見つけることができるが、私の場合は0を与えただけだった。

もし再現のためのデータがあれば、開発者はそれを見て修正できるだろう。

 

テスターで2013年以降のExpert Advisorをreal ticksモードで実行するだけです。

その後、ターミナルでスクリプトを実行します:

void OnStart(){
   MqlTick Ticks[];
   Print("!!! ",CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, (ulong)D'2013.01.01' * 1000, (ulong)D'2013.02.01' * 1000));
}
 
Evgenii Kuznetsov:

はい、2013年以降、テスターにあるEAをリアルティクモードで実行するだけです。

その後、ターミナルでスクリプトを実行します:

2020.02.12 16:35:03.435 Test6 (USDSEK,M1)       !!! 2370228