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

 

私は自分自身を見て、確かにいくつかのシンボルのためにティック履歴を持つファイルが表示されませんでした、ログに目を通すと、それがあります:

2020.02.12 16:02:30.144 Core 1  NZDUSD : real ticks begin from 2017.01.02 00:00:00

今私は理解し、残りはシミュレーションでした。


ところで、MultiTesterは最小化されたターミナル上でシンボルを切り替えない。とりあえずfInitにそのような関数を追加した。

bool ActivateTerminalWindow(){
   HANDLE ChartWindow = (HANDLE)ChartGetInteger(0, CHART_WINDOW_HANDLE);
   if(ChartWindow){
      HANDLE TerminalWindow = GetParent(ChartWindow);
      TerminalWindow = GetParent(TerminalWindow);
      TerminalWindow = GetParent(TerminalWindow);
      if(TerminalWindow){
         ShowWindow(TerminalWindow, 3);
         return true;
      }
   }
   return false;
}
 
Evgenii Kuznetsov:

ちなみにMultiTesterは最小化された端末ではシンボルを切り替えないので、新しいパスを開始する前にウィンドウを開く方が良い。

私はそれを確認していない、遭遇していない。

 
fxsaber:

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

取引、自動取引システム、取引戦略のテストに関するフォーラム

エキスパート・アドバイザー:検証

fxsaber, 2020.02.22 10:46 AM

多くの異なるテスタータスクを実行する必要がある場合、私はValidateを使用します。


1.実行したいタスクをテスターで設定する。

2.設定タブでCTRL+Cを押します。すべての設定がクリップボードに表示されます。

3.CTRL+Vを使って、これらの設定をiniファイルにコピーし、タスクのあるフォルダに置きます。

4.こうして必要な数のタスク-ini-ファイルを作成する(画面では4つのタスク)。


5.5.Validateを起動するときに、タスクのあるフォルダ名を指定する。


これで、Validateがあらゆるトリックを駆使してこれらのタスクを実行する。


私がMultiTester-derivativesを使うのは、タスクを実行しながら作成する必要がある特定の場合だけである。

Validateを使用して、既製のタスクをバッチ実行することをお勧めします。

 

GAを正しく行う方法について、あなたの経験を教えてください。GAが必要な局所極値を1つしか見つけられない状況に遭遇しました。

特定のTS/シンボルについて、私はどこを見るべきか理解しているので、異なるレンジでGAを行います。しかし、一般的には、どのように進めばよいのかわかりません。

 
fxsaber:

GAを正しく行う方法について、あなたの経験を教えてください。GAが必要な局所極値を1つしか見つけられない状況に遭遇しました。

特定のTS/シンボルについて、私はどこを見るべきか理解しているので、異なるレンジでGAを行います。しかし、一般的には、どのように進めばよいのかわかりません。

https://www.mql5.com/ru/forum/87536。

または著者(@Andrey Dik)に電話してください。

Чемпионат Алгоритмов Оптимизации.
Чемпионат Алгоритмов Оптимизации.
  • 2016.06.09
  • www.mql5.com
Чемпионат алгоритмов оптимизации задуман как соревнование для людей ищущих, любознательных, для которых стоять на месте означает движение назад...
 
Andrey Khatimlianskii:

https://www.mql5.com/ru/forum/87536

または著者(@Andrey Dik)に電話してください。

私はMT5-Testerを使用する文脈で質問しています。したがって、カスタム最適化アルゴリズムは適していません。

 
fxsaber:

GAを正しく行う方法について、あなたの経験を教えてください。GAが必要な局所極値を1つしか見つけられない状況に遭遇しました。

特定のTS/シンボルについて、私はどこを見るべきか理解しているので、異なるレンジでGAを行います。しかし、一般的には、どのように進めばよいのかわかりません。

ドローダウンが大きい場合は、テストを中止しています。

そしてGAを少し元気づけるために、こうしている:

#define  TESTER_STOP(ret) { EA_STOP = true; TesterStop(); return ret; }
double OnTester()
{
   srand((int)TimeCurrent());
// if(StartHour==20 && CountHours==22) return (-(rand() % 1000));// GAが実行時間によって1つの最大値付近に収束し始めた場合にこれを使う

   if(EA_STOP) return (-(rand() % 1000));                                                               // 大きなドローダウンで中断され、テストは失敗

   int o_count = 0;
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderType() < 2) o_count++;
   }
   if(o_count < 160) return (-(rand() % 1000));                                                         // 半年で160件以上の取引を目指す

   return(AccountInfoDouble(ACCOUNT_BALANCE));
}


void OnTick()
{
   if(IS_OPTIMIZATION)
   {
      double balance = AccountInfoDouble(ACCOUNT_BALANCE);
      MaxBalance = fmax(MaxBalance, balance);
      if(MaxBalance - balance > 200) TESTER_STOP();                                                     // 200ドルのドローダウンでテストを止める
   }


これは先週からテストしている方法で、今はGAにとても満足している。

 

私のオプティマイザーでは、GAを4回繰り返して、最後の結果が改善されなくなるまで繰り返す。十数回繰り返すこともある。通常、私は良い結果を得ることができる。時間はかかるが。

現在の日付で再最適化する 場合、私は新しい改善された局所最大値を得ることができ、そうでない場合は、古いものから始めて、遅い最適化(私は相互依存の変数のグループを選択し、各組み合わせをペアで反復的に最適化する)によって新しい市場のためにそれを洗練させる。

さらに、OnTesterにマイクロペナルティ(追加変異原)を導入しました。この場合、突然変異がより頻繁に起こるため、GAはより多くのパスを実行し、その結果、新しい最大値がより頻繁に発見される。

// 結果が等しい場合に、より小さいパラメータ値を選択するための微小なペナルティ
res -= BP * 0.0001 / 200;       // 最適化範囲(0~200)で割る。
 
Igor Makanu:

もし大きなドローダウンがあるようなら、今テストを中止するつもりだ。

そして、GAを少し元気づけるために、こうしている:

先週からこの方法でテストしていますが、GAにはとても満足しています。

ほぼ同じ方法でやっています。ドローダウンのコントロールはより速く最適化するためで、取引回数の コントロールはGAをよりよく方向づけ、ゴミをフィルタリングするためだ。

でも、これだけでは十分ではありません。


ZY その方が安上がりです。

TesterStatistics(STAT_TRADES)
 
Edgar Akhmadeev:

はOnTesterにマイクロ・ペナルティ(追加変異原)を導入した。この場合、より頻繁な突然変異により、GAはより多くのパスを実行し、その結果、新しい最大値がより頻繁に発見される。

明確にしてください。