MT4-テスター VS MT5-テスター

 
昔からの思いがようやく実現しました

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

"MQL5ウィザードのレディメイドEAがMetaTrader4で動作する "についてのディスカッション

fxsaber さん 2017.03.09 13:02

Tick Data Suiteのトライアル版(対応:MT4ビルド940~1052)で比較されることをお勧めします。

MT5テスターで「by real ticks」モードを選択します。保存して、TDS経由でMT4テスターに供給する。

そうすれば、両テスターの相場は100%一致し、取引だけでなくスピードでも比較できるようになります。

そうすれば、EAの変換・作成を双方向で比較することが可能になります。

MT4ビルド1072、MT5ビルド1596取引サーバーAlpari-MT5。

スクリーンショットのMT4テスターの設定

両テスターとも通貨はUSDです。これにより、EURUSDの同じMT5テスターで、変換記号の別のティックを引き出さないようにすることができます。


次に、両方のテスターで以下のクロスプラットフォームのExpert Advisorを実行します。

// MQL4&5-code

#property strict

class FILE
{
private:
  const int handle;
  
  static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
    return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits));
  }
public:  
  FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI))
  {
  }
  
  ~FILE( void )
  {
    if (this.handle != INVALID_HANDLE)
      ::FileClose(handle);       
  }
  
  bool Write( const MqlTick &Tick ) const
  {
    return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n"));
  }
};

const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt");

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    File.Write(Tick);
}


MT4-testerのログ

2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)


MT5-テスターログ

2017.05.07 23:26:01.016 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).

各テスターから受け取ったファイルが同一であること、つまりテスターの刻みが一致していることを確認しています。


この時点で、新サービスに向けた両テスターの準備は整った。

 

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

// MQL4&5-code

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

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}


結果


MT4レポート

Strategy Tester Report
ラッキー
MetaQuotes-Demo (Build 1072)

シンボルマークEURUSD (ユーロ vs 米ドル)
期間1分(M1) 2017.04.10 00:00 ~ 2017.04.14 20:58 (2017.04.10~2017.04.16まで)
モデルすべてのティック(利用可能な最小のすべての時間枠に基づく最も正確な方法)
パラメータシフト=3、リミット=18、ロット=0.1。
歴史に残るバー7292モデル化されたダニ1865515モデリング品質99.00%
チャートの不一致エラー0
初回入金額100000.00スプレッドバリアブル
当期純利益-10863.90利益合計2528.70全損-13392.60
収益性0.19期待されるペイオフ-0.49
アブソリュートドローダウン10864.70最大ドローダウン10864.70 (10.86%)相対的ドローダウン10.86% (10864.70)
総取引高21954ショートポジション(勝率)12016 (68.60%)ロングポジション(勝率)9938 (67.03%)
利益を得た取引(全体の割合)14904 (67.89%)損失取引(全体に占める割合)7050 (32.11%)
最大儲け話3.00負の取引-4.40
平均値得な話0.17負け組み-1.90
最大数れんしょう155 (46.60)継続的損失(ロス)115 (-210.10)
マックスです。継続勝ち越し46.60 (155)連続損失-210.10 (115)
平均値連勝5継続損失2


MT5レポート

ストラテジーテスターレポート
Alpari-MT5 (Build 1596)
設定
エキスパート・アドバイザーラッキー
シンボルマークEURUSD
期間M1 (2017.04.10 - 2017.04.16)
パラメータShift=3
リミット=18
ロット=0.1
ブローカーアルパリ・インターナショナル・リミテッド
通貨米ドル
初回入金額100 000.00
レバレッジをかける。1:100
バックテスト
ストーリーの質非対称性
バーです。7192ティキ1865415キャラクター1
当期純利益。-10 863.90バランスシート上の絶対的なドローダウン。10 863.90ファンドの絶対的なドローダウン10 864.70
利益合計2 528.70残高の最大ドローダウン10 863.90 (10.86%)資金の最大引き出し額10 864.70 (10.86%)
全損です。-13 392.60バランスシート上の相対的なドローダウン。10.86% (10 863.90)資金に対する相対的なドローダウン。10.86% (10 864.70)
収益性。0.19期待されるペイオフ-0.49マージンレベル。863.58%
リカバリーファクター。-1.00シャープレシオ-0.50Zスコア-52.22 (99.74%)
AHPR1.0000 (-0.00%)LR相関。-1.00OnTesterの結果。0
GHPRです。1.0000 (-0.00%)LR 標準誤差。149.82
総トレード数21954ショートトレード(勝ち組の割合)。12016 (68.60%)ロングトレード(勝率)。9938 (67.03%)
総トレード数43908利益が出ている取引(全取引のうち%)。14904 (67.89%)損失取引(全取引に占める割合)7050 (32.11%)
最大の利益を生む取引3.00最大の負けトレード-4.40
平均的な利益率の高い取引。0.17平均的な負けトレード。-1.90
最大連勝数(利益)。155 (46.60)最大連続損失数(ロス)。115 (-210.10)
最大継続利益(勝利数)。46.60 (155)最大連続損失(損失数)。-210.10 (115)
平均的な連続獲得賞金額。5平均連続損失額。2


結果は勝負あり!


パフォーマンス

MT4-ログ
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)


MT5-ログ

2017.05.08 02:04:53.278 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).


MT4-testerは、MT5-testerの3倍の速度で動作しています。もし、MT5ログの原因がサードパーティ製ライブラリの使用によるものである疑いがある場合、希望者は本Expert AdvisorのシンプルなMT4ロジックをMQL5で独自に書き換え、仮説を確認することができます。


MT5テスターのHZは、すべてのBasesフォルダを手作業でクリーニングするまで、ずっと動作が遅かったです。この点を考慮した上で結果を出しています。

 

Alpari-MT5-Demoサーバーで、新しいビルド(1週間以内にリリース予定)で、取引履歴に 素早くアクセスすることに成功しました。

EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.

MT5では、データやタスク自体を外部のエージェントプロセスに転送するためのシステムオーバーヘッドがあり、小さな(秒単位の)タスクでは、比較にならないほど大きな誤差が発生します。

そして、MT5のテスターの複雑さと品質は、ミリ秒精度で多くの機器の同期モデリング、世界の変化のスクロール中のリアルスリップ/ディレイ、さらに多くの細かい機能など、はるかに高いものです。forループがあるわけでもない。


桁違いに遅い - 初期化・同期と全データのアップロードで混乱しないか?全ては過去ログに書かれている。ディスク上のファイルには、いかなる場合も手を触れてはならない。

Userdata%MetaQuotesディレクトリ(C:³³など)をアンチウィルスパスに入れておくことをお勧めします。ここにデータがあるわけですが、パスにアンチウィルスを加えることで、端末やテスターのデータへのアクセス速度が劇的に改善されます。

そうでなくても、metatester[64].exeが動いて、ネットワークポートを開き、ターミナルとテスターによって書かれた大きなデータファイルがたくさんあるのを見ると、彼らはとても興奮するのです。一部のトレーダーのテスターは、アンチウイルスが数秒でもmetatester[64].exeファイルをチェックする時間がなく、ターミナルにアクセスできないため、落ちることさえある。

 
Renat Fatkhullin:

MT5のテスターの複雑さと質は桁違いです。ミリ秒単位の精度で複数の計器を同期モデリングし、世界の変化をスクロールしながら素直にスリップ/ディレイ し、細かい機能がたくさんあります。

MT4+TDSバンドルにはそれもあります。さらにMT5にはない機能も...。しかし、当然ながら多通貨はない。

桁違いの遅さ。

最初はTDSが意図的にMT5を遅くしているのかと思い、メモリーをクリーンアップしました。また、Bases-foldersを掃除しました(ディスク容量が足りなくなったので)。その後、MT5は1回の実行で2桁速くなりました(以前は再起動してもダメでした)。TDSブロックに関する仮説は確認できませんでしたが、試してみました。アンチウィルスを入れたことはない。

Alpari-MT5サーバーは実在する。


ZZYはMT4-optimizerをフル稼働させ、14分。MT5(残り1エージェント)・・・何時間もかかるようです。午前・午後に集計を掲載する予定です。

 

スリップはどこから来たのか?

まったく違うことを考えてるんですね。MT5テスターのDelayフィールドを弄ると、全く別物であることが分かります。MQL5のコードで通常のSleep(2500)でも、テスターで実行すると、全世界がシミュレーションし続けた時に、コードに遅延が発生します。実行遅延の欄は、サーバーへのpingを 100msに設定した場合に、トレードがどのように実行されるかを効果的に示しています。

桁違いのラグがあるわけがない。また、MT5単体で問題なく動作するのに、なぜアドオンが必要なのでしょうか。

オーバーシュートについて - 設定も制限もありません。
 

アンチウイルスがないことについて - 長い間、7以降のすべてのバージョンには、すべてのファイルをうまくスキャンしてくれる、目立たないWindows Defenderが内蔵されています。

SSDディスクでもファイル操作に顕著な遅延が発生することがあります。

 

オーバーキル(開始時10万ドル)


MT4でのスリップ(ティック履歴のミリ秒がそのまま機能する)、その他の良さ


 
Renat Fatkhullin:

アンチウイルスがないことについて - 長い間、7からのすべてのバージョンには、すべてのファイルをスキャンするWindows Defenderが 内蔵され、目立たないようになっています。

無効化される。すでに、最適化でMT5の強い減速を見るためのすべてのデータを持っています。MT5が完成したら、比較最適化の 結果を掲載する予定です。
 
重複の考え方が理解できない

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

バグ、バグ、質問

fxsaber さん 2017.05.07 21:55

Alpari-MT5トレーディングサーバー

FOREXのティック履歴に重複したティック(bidとaskが等しい)があるのはなぜですか?

テスターは重複しているEAをレースしているので、半分くらいはあります。適正な性能を得るためには、半減させる必要があるのでしょうか?

 

まだ俺の言ってるスリップを理解してないのかよ。MT4では原理的に動作しません。

刻みではなく、mcl5プログラムの過程で、止まっているのに刻みが続いていて、世界が回っているような状態です。Sleep(3000) と書くと、プログラムは3秒間待機し、この間ティックが刻々と動き、市場がシミュレートされることになります。

テスターでExecution Delayフィールドを200msに設定すると、取引実行時に200のネットレイテンシーがシミュレートされ、マーケットスリッページまたはリクオートが 発生します。

これは、市場プロセスのモデリングとしては全く別の強力なレベルであり、多通貨システム内でも同様です。ましてや、遠隔地の疎外されたプロセスで。例えば、1万kmのエージェントがあるタスクを実行する際に、突然コードから欠落したシンボルへのアクセス要求を動的に受け取り、マスターからこのデータを要求し、市場の世界に埋め込み、それを回し続けることができるのである。

 
Renat Fatkhullin:

まだ俺の言ってるスリップを理解してないのかよ。MT4では原理的に動作しません。

刻みではなく、mcl5のプログラムの過程で、止まっているのに刻みが続いていて、世界が回っているような状態です。Sleep(3000) と書くと、プログラムは3秒間待機し、その間にティックが刻々と動き、市場がシミュレートされることになります。

MT4では現在動作しません。

テスターでExecution Delayフィールドを200msに設定すると、取引実行時に200のネット遅延をシミュレートし、マーケットスリッページまたはリクオートを発生させることになります。

MT4で動作するようになりました。

これは、市場プロセスのモデリングとしてはまったく別の強力なレベルであり、多通貨システムの中で行われます。ましてや、遠隔地の疎外されたプロセスで。例えば、1万kmのエージェントがあるタスクを実行する際に、突然コードから欠落したシンボルへのアクセス要求を動的に受け取り、マスターからこのデータを要求し、市場の世界に埋め込み、それを回し続けることができるのである。

MT5を否定する意図はありません。あくまでも再現性のある比較をしているのです。もちろん、MT5のテスターはパラメータによっては届かないこともありますが、MT4のテスターは、MT5にはない、でも本当に求められているものを出すことができるようになったのです。MT4の実際のカスタムティックでの正確なテストは100%正しいことが確認されています。まあ、それとテスターの各種設定(手数料、インデント、保留注文の有効化ルールなど)の規制はある。一般的に、MT5にはまだ実装されていないものがあります。
理由: