1

取引の開始日と終了日を指定する機能を EA に追加したばかりですが、奇妙な動作を発見しました!

EA の取引開始日と終了日を指定した場合は からですが、日付を指定した場合は からに取引されます
2016.05.01 00:00:00

2016.05.10 00:00:00
2015.05.02 00:002016.05.12 14:02

2016.06.01 00:00:002016.06.10 00:00:00

2016.06.01 00:002016.06.10 14:53

これが私のコードです:

   extern datetime StartDate = __DATETIME__;
   extern datetime EndDate   = __DATETIME__;

   int isTrading = 0;

   if (  StartDate < EndDate ) {
         if (  TimeCurrent() > StartDate
            && TimeCurrent() < EndDate
               ) isTrading = 1;
   } else {
         if (  TimeCurrent() > StartDate
            || TimeCurrent() < EndDate
               ) isTrading = 1;
   }

ここで何が問題なのかわかりません。どんな助けでも大歓迎です。

前もって感謝します。

4

1 に答える 1

0

最も単純な部分:

を考えるとStartDate == 2016.05.01 00:00、実際に市場は閉じられています (関数の呼び出しは、4 月の最後の週の最後のティックからTimeCurrent()古い値を返します)。datetime

市場がまだ閉じられているため、(月曜日) が開始され、最初の「新しい」メッセージがサーバー側から実際に到着するまで、OnTick()トリガー イベント (メッセージ) は到着しません (取引が発生する可能性は低くなります) 。いくつかの詳細。2016.05.02QUOTE

ドキュメンテーションは次のように警告しています:

datetime TimeCurrent();
「気配値表示」ウィンドウで選択されたシンボルの 1 つについて 、最後の既知のサーバー時間、最後の見積もり受信の時間を返します。ハンドラーではOnTick()、この関数は、受信した処理されたティックの時間を返します。それ以外の場合 (たとえば、 handlers OnInit()、など)OnDeinit()では、OnTimer()これは「気配値表示」ウィンドウで利用可能なシンボルの最後のクオート受信の時間であり、このウィンドウのタイトルに表示される時間です。時間値は取引サーバー上で形成され、コンピュータの時間設定には依存しません。


いくつかの難しい点:

  • ブローカー サーバー側セットアップの GMT オフセット (このサーバー側/サーバー側のdatetime観点では問題ではありません。それ以外の場合は問題ありません)

  • FX-instrument ( _Symbol) の取引条件 (貴金属と指数は、通常、追加のタイム オフセットで開始され、メジャーの 24*5 の市場取引時間には従わない )。

  • 事前に発表されたブローカー固有の取引時間/停止の変更。

  • MetaTrader ターミナル 4 [ストラテジー テスター] は、不完全なデータ (ヒストリー センターのギャップ) に対して驚くべき動作をする可能性があり、ドキュメントではこれについて「間接的に」警告しています。

    ストラテジー テスターでのテスト中に、TimeCurrent()履歴データに従ってシミュレートされます。

于 2016-12-18T21:10:24.150 に答える