MT4 /MT5 ローソク足(バー)データの欠損/抜けの補完
作成しているMTF対応ジグザグについて、MT4/MT5ローソク足データに抜け・欠損データがあると、MTF表示時にジグザグの位置がズレてしまうことがありました。ズレるのは、MTF表示中において、欠損した1分足の本数分だけなので、大きくはありません。これは、作成しているジグザグのロジックが宜しくないということなのでしょう、対応を検討しています。大きなズレではないものの、ちょっとだけズレてしまうのが気になるというか・・・あとは、データ欠損について全然気にしたことがなかったので、欠損データの対応について紹介します。
MT4のヒストリカルデータは編集可能|MT5のヒストリカルデータは追加したり削除したり編集不可能!
ここでいうデータ抜け/欠損は、ヒストリカルデータの再ダウンロードで解決するようなデータの欠損ではなく、そもそもサーバーにすらデータが存在しないというものを、欠損と言っています。早朝時間など、売買の無い時間帯に特に発生します、これは、まあ仕方ないんです。
MT4のヒストリカルデータは編集自由です。リアルタイムで動いているチャートに対しても、編集可能でした。しかし、MT5はリアルタイムチャートのヒストリカルデータには、一切編集ができません!MT5はバックテスト用のヒストリカルデータであれば、自由に編集ができます。
MT5では、hccファイルというファイルにヒストリカルデータが保持されているようです。無理やり中身を見てみても、サッパリ分からない状態です。これを編集できないものかと調べました。
MT4の1分足欠損/抜けデータの補完
MT4欠損データの補完方法です。簡単なので、MT5でも同様にできると思ったのが甘かったです。
①MT4 ヒストリーセンターでデータをM1データをエクスポート
②csvをエクセルで開いて、下記VBAを実行
下記マクロを実行してください。データ量が多い場合は、補完する前後のデータだけにしておく方が良いです。M1以外の場合は、時間差のところを変更してください。欠損したデータは前回値と同値として、それだけ元のシートに抜き出されます。
Sub MT4_1minfilldata()
Application.ScreenUpdating = False
bws_name = ActiveSheet.Name
Set bws = ThisWorkbook.Worksheets(bws_name)
ActiveSheet.Copy After:=ActiveSheet
tws_name = ActiveSheet.Name
Set tws = ThisWorkbook.Worksheets(tws_name)
bws.Cells.Clear
lastRow = tws.Cells(tws.Rows.Count, "A").End(xlUp).Row
wrow = 1
For i = 1 To lastRow
diff = DateDiff("n", tws.Cells(i, 2).Value, tws.Cells(i + 1, 2).Value)
time_cnt = 1
' 現在のセルと次のセルの時間差を計算
If diff > 1 Then
For k = diff - 1 To 1 Step -1
' 時間差が1分以上なら欠損している
bws.Cells(wrow, 1).Value = tws.Cells(i, 1).Value
bws.Cells(wrow, 2).Value = Format((tws.Cells(i, 2).Value + TimeValue("00:01:00") * time_cnt), "hh:mm:ss")
For j = 3 To 7
bws.Cells(wrow, j).Value = tws.Cells(i, j).Value
Next j
time_cnt = time_cnt + 1
wrow = wrow + 1
Next k
End If
Next i
Application.ScreenUpdating = True
End Sub
③MT4 ヒストリーセンターでインポートして終了
先ほどのマクロで出来たcsvをヒストリーセンターでインポートして終了です。とても簡単にできますね!
MT5の欠損/抜けデータの補完|hcc file
MT5でも同様に何とかできないものかと、調べると出てきます、無理っぽいです。hccファイルのリバースエンジニアリングを試みている方々もいらっしゃったようで・・・しかし、今のMT5バージョンであればバックテスト用のヒストリカルデータであれば自由に編集ができますので、誰も問題視していないのでしょうか。データ欠損が影響するようなインジケータを作るのが良くないのでしょう、うーん。MT5は厳密過ぎるというか、MT4の方が色々楽ちんですなあ。