MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 - ページ 21

 

テスターでは、指値注文は設定/変更ティックでの受入チェックが行われません。

このため、現在値で 指値注文を出すと約定せず、市場ルールにそぐわなくなる。


このような場合、テスターに何か変更はあるのでしょうか?

 

テスターは、12ストリームで27時間稼働しています。これは奇妙な思い出の写真です。ここで、アプリケーションがあまりメモリを食っていないことがわかると思います。


特に、エージェントのステータスは無料以上です。



また、1スレッドで既に動作が終了しているインスタンスが1つあります。スワップメモリが確保される。


実行中のインスタンスを終了させました。

すぐに26GBが解放されました。スレッドがメモリを確保した状態で保持しているのでは?プロセスエクスプローラーはまさにそれを示している。各インスタンスは4GBを保持しています(1つを除く)。とはいえ、1人は脱落している(12人のはず)。


問題は、プライベートメモリを使っていないにもかかわらず、スワップファイルが一杯になると、同じChromeでもメモリ不足の悪態をつき始めることです。同時に、RAMが半分空いている...。


2つ目の質問は、これです。遺伝的最適化中に、スレッドがアイドル状態で、あるスレッドが終了するのを待つのはなぜですか?予測で計算し、予想されるスレッドの終了を待つのと異なる結果を検出することで殺すことに意味があるのでしょうか?それとも、もう一度パラメーターを「振って」、他の解決策を探してみる?

PS.エージェントを無効にしてから再び起動させると、メモリを食わなくなりました。しかし、ディスクキャッシュも起動時に再作成されるような気がするのですが?
 

資金不足イベント時の未決済注文のキャンセル時間の不具合。

キャンセル時間ではなく、ゼロ時間(スクリーンショットでハイライトされている)があります。

そして、ステータスがキャンセルではなく、配置された。

 

次に、ハイライトされた塊の状況を分析します。


カーソルを移動し、ポップアップした日付を記憶し、ランチャートを開き、取引履歴の必要な場所に移動し、テーブルの該当する行をダブルクリックする必要があります。


これはすべて、上のチャートの場所をダブルクリックすることで置き換えられるのでしょうか?

 
fxsaber:

これはすべて、上のグラフのスポットをダブルクリックすることで置き換えることができるのでしょうか?

素晴らしいことだと思いますし、必要とされている「機能」だと思います。

 

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

MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案

fxsaber, 2019.10.14 23:32

MT5では、ポジションを決済して 損切り(決済前の残高が決済後の残高を下回ること)することができます。しかし、同時にMT5テスター(ターミナル未確認)は、この取引を利益と見なします。

遊ぶためのExpert Advisorを描きました。

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrderSelect(0, SELECT_BY_POS))
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  else if ((OrderProfit() > -OrderCommission()) &&
           (OrderProfit() < -OrderCommission() * 2) &&
           OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ExpertRemove();
}


手数料が発生する取引サーバーからStrategy Testerで実行します(私はこのサーバーで実行しました:ForexTimeFXTM-Demo01)。

結果は写真で。


スクリーンショットでは、1つの買いポジションがあり、それが全損で決済されたことがわかります - 最初の残高は減少しています。


そしてこれが左の欄で強調されていることです。エキスパートアドバイザーが損失を被ったのです。

そして、今度は2列目にハイライトされているものを見てみましょう。数学的な期待値が高く、100%利益を出せる取引で、すべてが素晴らしいです。


つまり、Expert Advisorは負けているのに、インジケータは儲かっているように見えることが判明したわけです。そのため、PFの計算が偏ってしまうのです。


ZZYは1分で例を書きました。MQL5やSBで書くとどれくらい時間がかかるのか、恐怖を感じながら考えていました。怠けていない人、試してみてください。

 

テスターでは、「概要」タブに、これまでのアクションのリストとインタラクティブなフィルターがあり、非常に便利です。

このリストでは、EA の名前がパスなしで表示されます。このため、同じ名前で異なるフォルダにある2つのEAがある場合、リストにはどのEAがどのエントリに対応するのか表示されません(フィルタリングもできません)。


この過去のアクションのリストに、ExpertsというフォルダからEA名とそのパスを出力することは可能でしょうか?

私はインジケータを使っていませんが、おそらくインジケータも同じようにするのが合理的でしょう。

 
テスターでは、CloseBy取引の両建てを考慮して取引回数を計算しています。そのため、取引回数や数学的な期待値などが間違っている。
 
電子ブック
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

int OnInit()
{
  return(OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 
2, Bid, 0, 0, 0)));
}


は、ゼロしか呼び出さない。取引中であったが。


なぜ=1なのかも不明です。ソースコードには存在しない。

 
fxsaber:
電子ブック


は、ゼロしか呼び出さない。取引中であったが。


なぜOnTester==1なのかも不明です。ソースコードには存在しない。

本当にOnInitで取引されているのでしょうか?そして、あなたのコードでGetLastErrorをどのように使うつもりなのでしょうか?そしてもう一つの質問。関数の引数の 計算順序は間違いないですか?