mql5言語の特徴、微妙なニュアンスとテクニック - ページ 71

 

fxsaber

記事「MetaTrader 5におけるトレード戦略の最適化の可視化」についての考察

fxsaber さん 2018.02.22 08:39

フレームモードでは、OnInit、OnDeinit、OnTick、OnTrade、OnTradeTransaction、OnTimerは無視されます。OnChartEventのみ動作します。

もちろん、OnChartEventのため、フレームモードフラグの必須チェックを必要とします。

どこからそんな暗黙の了解が生まれたのでしょうか。:-)

 
デニス・キリチェンコ

なぜ、そう言い切れるのですか?:-)

もちろん、練習からです。

 

それでは質問です。フレームモードは、一般的にテスティングを指すモードなのか、そうでないのか。

 
デニス・キリチェンコ

それでは質問です。Frameモードは、一般的にTestingに適用されるモードなのか、そうでないのか。

間接的にはそうです。このモードでは、Expert AdvisorはTesterによってのみターミナルで起動することができるというだけです。

 

OKです。また、Expert Advisor に OnTick() ハンドラがある場合、フレームモードでは動作しないのでしょうか?

フレームハンドラは Terminal 自身が実行し、テスト用の通常機能 (OnTick(), OnTrade() など) はすべてテストエージェントに渡されることをここで明確にすべきです。) がテストエージェントに 渡されます。したがって、フレームモードは特殊な複合テストモードであり、AgentはTerminalと相互作用する。

つまり、こうだ...。


トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber さん 2018.02.22 09:22

間接的に、適用される。ただ、このモードでは、テスター自身がターミナルでEAを実行することしかできないのです。


そして、なぜ間接的になのか?例えば、通常の最適化はTesterだけで実行することも可能です。

 
デニス・キリチェンコ

OKです。また、Expert Advisor に OnTick() ハンドラがある場合、フレームモードでは動作しないのでしょうか?

フレームハンドラは Terminal 自身が実行し、テスト用の通常機能 (OnTick(), OnTrade() など) はすべてテストエージェントに渡されることをここで明確にすべきです。) がテストエージェントに 渡される。したがって、フレームモードは特殊な複合テストモードであり、AgentはTerminalと相互作用します。

こんな感じです。



そして、なぜ間接的になのか?例えば、通常の最適化はTesterでしか実行できない。

フレームモードでもコンバットエキスパートアドバイザーだから。そのため、OnChartEventでフレームフラグをチェックしないと、このようなトラブルが発生します。

sinput uint Range = 100;

#define  SETRANGE(A, START, STEP, END) ParameterSetRange(#A, true, A, START, STEP, END)

void OnTesterInit() { SETRANGE(Range, 0, 1, Range); }

void OnTesterDeinit() {}

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
  static const bool IsFrame = MQLInfoInteger(MQL_FRAME_MODE);
  
//  if (!IsFrame) // без этой проверки Терминал (не только Агент) начнет выставлять ордера на реальном счете во время запуска Оптимизации
    OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);
}


このような声は、今回が初めてのようです。つまり、Market Productsは厄介な脆弱性を作り出してしまうのです...。そして、この脆弱性を回避するのはとても難しいのです。しかも、それを検知するのは非常に難しい。

 
fxsaber:

フレームモードでも戦闘EAだから。OnChartEventでフレームフラグをチェックしないと、このようなトラブルが発生するためです。

このような声は、今回が初めてのようです。つまり、Market Productsは厄介な脆弱性を作り出してしまうのです...。そして、この脆弱性を回避することは非常に困難です。検出も同様に難しい。

しかし!もし本当なら、テスト モードでのEAの動作がおかしいのでは...とイミフです。

よくぞ気づいてくれました。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2018.02.27 08:01

OBJ_CHART上のEAに関する結論

  • OnInit, OnDeinit, グローバルコンストラクタ/デストラクタ, OnChartEventが動作します。
  • OnTimer、OnTick、OnBookEventが動作しない。
  • CHARTEVENT_CHART_CHANGEとカスタムイベントのみ捕捉されます。
  • OnChartEvent+EventChartCustom EAを通じて、OnTimerとOnTickの「イベント」を作成 することは可能ですが、OnBookEventはできません。

したがって、適切なインジケータ(例)を組み込むことで、あらゆるタイプのチャート上でOnTimer + OnTickを動作させるなど、Expert Advisorを本格的なものにすることができます。

Lf OBJ_CHART が CHART_IS_OBJECT で定義されている場合。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

"管理された最適化:アニーリング法 "についてのディスカッション

fxsaber さん 2018.02.28 08:45

tester_file はコンパイル時に存在する場合のみ読み込まれます(内容は関係ありません)。

対応するファイルがないときにmq5をコンパイルすると、EX5ではその先の存在すら認識できない。

従って、OnTesterInit で tester_file のファイルを生成する場合は、少なくとも空のパスされたファイルで Expert Advisor をコンパイルするようにしてください。

tester_file ディレクティブが存在する場合、オプティマイザーのキャッシュは機能しません。

 
また、Files_Commonフォルダのファイルをtester_fileでインクルードすることはできません...。
理由: