Processing math: 100%

2012/09/08

ヒストリカルデータからエクスポートしたCSVファイルのカスタマイズ

今回は、MT4からヒストリカルデータをエクスポートしたCSVファイルをExcelで加工しやすいようにするVBスクリプトを作ってみました。

【問題点】

MT4からエクスポートしたCSVファイルは、日付のフォーマットがExcelに対応していないため、日付が文字列として認識されます。その為、Excelのありがたい関数郡(例:月別計算or曜日計算or時間の抽出)がそのまま使えません。
histmae

【対応】
そこで、MT4の時間フォーマットをExcelで認識できるフォーマットに変更するスクリプトを作りました。
MT4の時間フォーマット【年.月.日,時間】をExcelフォーマット【年/月/日 時間】に変更します。
スクリプトのDLは、こちら【Time_format_conversion.vbs
  1. Option Explicit  
  2. Dim datename,ob,reader,writer,text  
  3. Dim re,maches,name,ctext  
  4. 'ファイル名を取得  
  5. If WScript.Arguments.Count = 0 Then  
  6.     WScript.Echo "ファイルをドラッグ&ドロップしてください。"  
  7.     WScript.Quit  
  8. Else  
  9.  datename = WScript.Arguments(0)  
  10. End If  
  11.   
  12. 'オブジェクトの設定  
  13. Set ob = CreateObject("Scripting.FileSystemObject")  
  14. Set re = New RegExp  
  15.   
  16. 'ファイルの読み込み  
  17. Set reader = ob.OpenTextFile(datename,1,false)  
  18.   
  19. '新しいファイル名の作成  
  20. re.Pattern = "\.csv"  
  21. name = re.Replace(datename, "c.csv")  
  22.   
  23. '書き込み用のファイル作成  
  24. Set writer = ob.OpenTextFile(name,2,true)  
  25.   
  26. '正規表現のパターン設定  
  27. re.Pattern = "(\d{4})\.(\d{2})\.(\d{2})\,"  
  28.   
  29. '書き換え  
  30. Do Until reader.AtEndOfStream  
  31.     text = reader.ReadLine  
  32.     ctext = re.Replace(text,"1/2/$3 ")  
  33.     writer.WriteLine ctext  
  34. Loop  
  35. 'ファイルを閉じる  
  36. reader.Close()  
  37. writer.Close()  
  38.   
  39. '完了メッセージ  
  40. WScript.Echo name &"を出力しました。"  

【使い方】
スクリプトをDL後、ヒストリカルデータからエクスポートしたCSVファイルをスクリプトファイルの上にドラッグ&ドロップしてください。エクスポートしたCSVファイルのあるフォルダにCSVファイル名c.csvというファイルが作成されます。作成されたファイルを開くと以下の様に表示され、Execlで日付が認識されるようになります。
histato
さて、ここまで来たら完成ですが少し遊んでみます。例えば、月別に見た時間別のボラリティの計算をしてみます。
各列にラベルを付けて、月関数【MONTH(シリアル数値)】、時間関数【HOUR(シリアル値)】を追加し、高値と安値の差をHi-Lw(pips)に入れたものです。
hiskakou

これをピボットテーブルで表すと以下の様になり月間別に見た時間ボラリティの平均が出来ます。
pibo
※横軸:月 縦軸:時間です。
グラフ化すると以下の様になります。
burafu
サマータイムの影響が出ているかな(・・?

【まとめ】
VBスクリプトの勉強もかねて作成してみました。



それと。。。今年もATC2012に出場できそうです^^;