【MT4】ヒストリカルデータの歯抜けを検出するスクリプト

前回は価格(縦軸)の異常を検出するスクリプトを書きましたが、今度は1分足の歯抜け(横軸)を検出するスクリプトを書いてみます。
 
その前に、1分足の歯抜けについて補足します。
MT4の仕様としてバーの期間中に価格が1度も変わらなかった場合は、バーが作成されません。薄商いの時などは1分足の歯抜けは頻繁に発生することになります。
また当たり前の話かもしれませんが、土日は市場がお休みのためバーは作成されません。ブローカーのメンテナンス中もバーは作成されません。
 
ここで知りたいのは異常な歯抜けがあるかどうかですが、通常の歯抜けと異常な歯抜けを見分けるのは結構難しいです。
そのためスクリプトでは仮に60バー(60分)以上歯抜けを起こしていれば異常と判定してみました。
週末についても細かな判定は諦めて56時間の無配信を許容することとし、クリスマス休暇と年始の無配信もざっくりですが許容するようにしています。
 
1分足の歯抜けを検出.mq4
#property copyright "Copyright 2015, nekonote"
#property link      "http://nya0nekonote.blog.fc2.com/"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input uint InpMaxInterval=60;       // 無配信の許容Bar数
input uint InpWeekendInterval=54;   // 週末の無配信許容時間(h)
input bool InpSkipNewYears=true;    // 元日の無配信を許容する
input bool InpSkipXmas=true;        // クリスマスの無配信を許容する
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int i,object_cnt=0,object_color=clrOrangeRed;
   uint open_diff;
   datetime fx_day_off;
   string object_name,object_name_prefix="detect_missing_#";
   string result_time_list="";
   
   // Arrow削除
   //ObjectsDeleteAll(0,OBJ_ARROW);                     // Build830まで
   ObjectsDeleteAll(ChartID(),object_name_prefix);    // Build840以降で使用可能
   
   // 検査
   for(i=1;i<Bars;i++)
   {
      // 当Barと次Barの時間が許容Bar数以上離れていたら無配信と判定
      open_diff=(uint)(Time[i-1]-Time[i])/PeriodSeconds()-1;
      if(open_diff>InpMaxInterval)
      {
         // 土日を挟んでいる場合は指定時間の無配信を許容する
         if(TimeDayOfWeek(Time[i])>=5 && TimeDayOfWeek(Time[i-1])<=1 && (uint)(Time[i-1]-Time[i])<InpWeekendInterval*3600)
            continue;
         else
         {
            // 1/1(元日)の無配信は許容する
            if(InpSkipNewYears && TimeMonth(Time[i-1])==1 && TimeDay(Time[i-1])<=4)
            {
               fx_day_off=StringToTime(StringFormat("%d.01.01 12:00",TimeYear(Time[i-1])));
               if(Time[i]<fx_day_off && Time[i-1]>fx_day_off)
                  continue;
            }
            // 12/25(クリスマス)の無配信は許容する
            else if(InpSkipXmas && TimeMonth(Time[i-1])==12 && TimeDay(Time[i-1])>=25 && TimeDay(Time[i-1])<=28)
            {
               fx_day_off=StringToTime(StringFormat("%d.12.25 12:00",TimeYear(Time[i-1])));
               if(Time[i]<fx_day_off && Time[i-1]>fx_day_off)
                  continue;
            }
         }
         
         // 結果リストに追加
         result_time_list=StringConcatenate(result_time_list,"\n",TimeToString(Time[i],TIME_DATE|TIME_MINUTES));
         
         // Arrowを表示
         object_cnt++;
         object_name=StringConcatenate(object_name_prefix,IntegerToString(object_cnt,5,'0'));
         if(ObjectCreate(ChartID(),object_name,OBJ_ARROW_STOP,0,Time[i],High[i]*1.001))
         {
            ObjectSetInteger(ChartID(),object_name,OBJPROP_COLOR,object_color);
            ObjectSetInteger(ChartID(),object_name,OBJPROP_WIDTH,5);
            ObjectSetString(ChartID(),object_name,OBJPROP_TEXT,StringConcatenate("[missing]",TimeToString(Time[i],TIME_DATE|TIME_MINUTES)));
         }
      }
   }
   
   // 結果を表示
   if(result_time_list=="")
      Comment("問題は見つかりませんでした。");
   else
      Comment("1分足の歯抜けを検出しました。該当の日時は以下のとおりです。",result_time_list);
  }
//+------------------------------------------------------------------+

 
FXDDのUSDJPY1分足ヒストリカルデータで試してみると
FXDD_historical_missing_chart.png
1つだけポツンと。何だろう?
FXDD_historical_missing_data.png
 
FXCMのヒストリカルは、直近では歯抜けがありません。過去に遡るほど歯抜け検出が増えますが、価格は飛んでおらずチャートの形は自然体でした。
FXCM_historical_missing_chart.png
ただ、個人的には2005年以前のデータはあまり信用していません。
 
Dukascopyのヒストリカルも歯抜けは少ないものの、所々チャートの形に現れる歯抜けがありました。2004年1月1日の検出箇所は、市場が休場にも関わらず機械的にデータを作成したようなチャートの形をしていました。
Dukascopy_historical_missing_data.png
一応、Dukascopyティックデータのダウンロードに一部失敗している可能性も残っていますが未検証です。(Tickstory Liteのダウンロードエラーを確認していなかった為)
 
Forexiteのヒストリカルは歯抜けがほとんど無いようです。
Forexite_historical_missing_data.png
ただしForexiteのデータを流用して無料配布しているForex Testerからダウンロードしたヒストリカルデータでは、1日分歯抜けているのではないかと思われる箇所が幾つか見つかりました。Forex Testerのダウンロードデータは通貨ペア毎に分かれていて便利なのですが、無料提供ということで検証されてないのかもしれません。
 
MetaQuotesのヒストリカル…コメントする価値がありません。
MetaQuotes_historical_missing_data.png
少し補足しますと、以前にバックテストを試した感触では、15分足以上の上位足であれば影響は限られるようです。異常な箇所は一部だけですので全く使えない訳ではありませんが、このデータでの最適化は避けるべきでしょう。
 

テーマ : FX(外国為替証拠金取引)
ジャンル : 株式・投資・マネー

コメント

Secret

プロフィール

nekonote

Author:nekonote

EAを作るのが趣味になってしまったらしい。

あとマニアックな運用とかetc...その時の気分で書き殴る(?)
そんなブログ

※当ブログ記事へのリンクはご自由にどうぞ

 
運用は…fx-onのみんなのMT4に公開しているかも?
fx-on 通常会員ページ
fx-on 出品者ページ

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
ブログランキング
にほんブログ村 為替ブログ システムトレード 自作EA派へ





QRコード
QR
RSSリンクの表示
リンク
FX情報サイト
 優秀トレーダーの投資法をゲット!
FX投資情報コミュニティfx-on.com


国内MT4取扱会社
外為ファイネスト カコテン iOsMA (type DI) EURAUD タイアップキャンペーン

アヴァトレード・ジャパン株式会社 カコテン iOsMA (type DI) EURAUD タイアップキャンペーン

FOREX.com×タイアップキャンペーン☆Beatrice-07 FXTF×ForexSolidタイアップキャンペーン



自作EA紹介


EAフォワード集計結果
海外MT4業者
海外業者を選ぶ際は、まず金融庁の「注意喚起」を熟読して下さい。無登録業者で事故っても自己責任ですよ!
自分はゲムトレード&GEMFOREXに突撃してみましたw




自分もカコテンシリーズを幾つか出品しています。 運用結果でネタが集まれば時々記事にします。

ゲムトレードはEAの将来価値をリスクヘッジするには良い仕組みを提供していると思います。ただし本当に実力のあるEAはfx-on等から買った方が良いでしょう。
取引明細には現れませんがIBのような仕組みでゲムトレードへ報酬が渡っていますので、単一EAの長期運用ではデメリットが成績に現れると思われます。

※繰り返しますが海外業者でトラブっても自己責任です。お忘れなく!
FX専用VPS
レンタルサーバーなら使えるねっと



みんなのMT4
紫色:リアル口座
水色:デモ口座
ねこぱんち | fx-on.com
ねこぱんちMAXでも | fx-on.com
ねこのまえあし | fx-on.com
€$ XM demo | fx-on.com
£$ FxPro demo | fx-on.com
€¥ IFC Markets demo 2nd! | fx-on.com
£¥ IC Markets demo  | fx-on.com
$¥ MGK Global demo | fx-on.com
BigBoss demo AUDJPY | fx-on.com
€x LandFX demo | fx-on.com
KAKO10 iIchimoku リアル OANDA | fx-on.com
KAKO10 iIchimoku デモ FXTF | fx-on.com
KAKO10_iMA(H27.5~) | fx-on.com
KAKO10 iMA デモ Axiory(運用終了) | fx-on.com
KAKO10 iMA デモ Axiory新鯖 | fx-on.com
Ava demo iOsMA方向性スイング(運用終了) | fx-on.com
カコテン iOsMA (type DI) デモ Centrade | fx-on.com
カコテン iMomentum (type DI) デモ Arena | fx-on.com
瞬殺!!! NCSEC demo ※運用終了 | fx-on.com
GEMFOREX demo 新サーバーお試し ※破綻 | fx-on.com
 | fx-on.com
 | fx-on.com
 | fx-on.com
 | fx-on.com