エキスパートアドバイザー
// 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レポート
シンボルマーク | 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.50 | Zスコア | -52.22 (99.74%) | |||||||
AHPR | 1.0000 (-0.00%) | LR相関。 | -1.00 | OnTesterの結果。 | 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 |
結果は勝負あり!
パフォーマンス
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ファイルをチェックする時間がなく、ターミナルにアクセスできないため、落ちることさえある。
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ディスクでもファイル操作に顕著な遅延が発生することがあります。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
fxsaber さん 2017.05.07 21:55
Alpari-MT5トレーディングサーバー
FOREXのティック履歴に重複したティック(bidとaskが等しい)があるのはなぜですか?
テスターは重複しているEAをレースしているので、半分くらいはあります。適正な性能を得るためには、半減させる必要があるのでしょうか?
まだ俺の言ってるスリップを理解してないのかよ。MT4では原理的に動作しません。
刻みではなく、mcl5プログラムの過程で、止まっているのに刻みが続いていて、世界が回っているような状態です。Sleep(3000) と書くと、プログラムは3秒間待機し、この間ティックが刻々と動き、市場がシミュレートされることになります。
テスターでExecution Delayフィールドを200msに設定すると、取引実行時に200のネットレイテンシーがシミュレートされ、マーケットスリッページまたはリクオートが 発生します。
これは、市場プロセスのモデリングとしては全く別の強力なレベルであり、多通貨システム内でも同様です。ましてや、遠隔地の疎外されたプロセスで。例えば、1万kmのエージェントがあるタスクを実行する際に、突然コードから欠落したシンボルへのアクセス要求を動的に受け取り、マスターからこのデータを要求し、市場の世界に埋め込み、それを回し続けることができるのである。
まだ俺の言ってるスリップを理解してないのかよ。MT4では原理的に動作しません。
刻みではなく、mcl5のプログラムの過程で、止まっているのに刻みが続いていて、世界が回っているような状態です。Sleep(3000) と書くと、プログラムは3秒間待機し、その間にティックが刻々と動き、市場がシミュレートされることになります。
MT4では現在動作しません。
テスターでExecution Delayフィールドを200msに設定すると、取引実行時に200のネット遅延をシミュレートし、マーケットスリッページまたはリクオートを発生させることになります。
MT4で動作するようになりました。
これは、市場プロセスのモデリングとしてはまったく別の強力なレベルであり、多通貨システムの中で行われます。ましてや、遠隔地の疎外されたプロセスで。例えば、1万kmのエージェントがあるタスクを実行する際に、突然コードから欠落したシンボルへのアクセス要求を動的に受け取り、マスターからこのデータを要求し、市場の世界に埋め込み、それを回し続けることができるのである。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
"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を実行します。
MT4-testerのログ
MT5-テスターログ
各テスターから受け取ったファイルが同一であること、つまりテスターの刻みが一致していることを確認しています。
この時点で、新サービスに向けた両テスターの準備は整った。