2016年7月9日土曜日

23:55の怪

AMSERに週末持越し禁止オプションを付けました。

「機能していないとご指摘が・・・」

ソースを何回見直しても理由がわかりません。

そこで検証します。

一年間に金曜日の23:55分は50回前後あります。

23:55に小幅のS/L T/Pで発注し発注回数を数えます。

datetime T;int CheckCount,d;bool Flag;
void OnTick(){if(Time[0]!=T){T=Time[0];if(DayOfWeek()==5&&Hour()==23&&Minute()==55&&Flag){
d=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,Ask-0.01,Ask+0.01,NULL,1,0,clrNONE);Flag=False;}else{Flag=True;}}}

DayOfWeekは0:日曜 1:月曜 … 5:金曜です



結果はなんと一回です。一年間に23:55は一回しかないのでしょうか???

他の時間を確認してみます。

datetime T;int CheckCount,d;bool Flag;
void OnTick(){if(Time[0]!=T){T=Time[0];if(DayOfWeek()==5&&Hour()==5&&Minute()==55&&Flag){
d=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,Ask-0.01,Ask+0.01,NULL,1,0,clrNONE);Flag=False;}else{Flag=True;}}}

23時を5時に変更しました。


ちゃんと51回あります。

ヒストリーデーターを見てみましょう
FXDDのデーターを使っています。



な、ない・・・・・

じゃあ昨夜はどうでしょう
VPSから拾ってみます。



こちらの23:55は存在しています。



昨夜をバックテストしてみます
OANDAのフレッシュデーターです。


取引できていますね。

混乱してきました。
金曜日の23:55にポジションをクローズする
こんな簡単なことができないのでしょうか・・・・・

まとめてみると
①昨夜持越しがあった
②FXDDのデーターは金曜の23:55に欠けがある
③昨夜の生データーには23:55は存在する

①と③から導き出されるのは23:55足が変わった時に一回だけクローズするのでは失敗の可能性があるという事ですね。今回の場合クローズの失敗ではなく時間を拾い損ねている可能性もあります。

対応策は
23:55だけでなく23:50~23:55までティック単位でクローズし続ける。

そもそもが金曜日NYクローズ二時間前の発注禁止時間を安全策としていたのですが、
持越しが多かったので、7時間前まで延長すればいいのかもしれません。

2010.1.1~2016.7.8のデーターでは7時間前まで延長すれば持越しは無い結果が出ました!!

これでいきましょう!!!










4 件のコメント:

  1. ちなみに、クローズ時にスプレッドフィルタはいってたりしないですよね??
    金曜日の夜はOANDAともいえども、スプレッドが大きく開く時間帯で、月曜日の朝もスプが落ち着くまで保持していたので・・。




    返信削除
    返信
    1. だいすけさん
      いつもありがとうございます
      今朝はスプレッドなかなか落ち着きませんでしたね。

      クローズ時にスプレッドフィルタはいってたりします!!
      スプレッド上昇時は活性が高いのでエントリー時のT/Pに到達しやすい事から
      そうしているのですが
      23:55はまずかったですね・・・
      心臓に突き刺さる一言です。

      削除
    2. クローズ時にもスプレットフィルタ入れると落ち着いたタイミングでとれますものね。
      急に動いたときに落ち着くまでT/Pしないというのは確かにありな処理な気がします。

      さすがです。

      23:55の怪も解決しましたね^^

      削除
    3. またもやだいすけさんのおかげで解決しました。
      設計に比べ改良は難しいものですね
      ありがとうございます

      削除