mt4から価格データを取得してExcelファイルに落とす方法

今までずっと分析用のデータをyfinanceから取っていたのですがこれだけ便利ならmt4から取った方がいいかもしれません。誰かの役に立てばと思い、また自分の備忘録としても書いておきます。

以下のようなスクリプトをMetaEditorで作成し、表示させたい銘柄と時間足上で実行してください。

#property strict

static string RelativeFileAddress   = "";                // 相対ファイルアドレス
const  string WriteFolderName = "FileWriteTest";         // フォルダ名
const  string WriteFileName   = "WriteTestData.csv";     // ファイル名

void OnStart()
  {
//---
   printf("start");
   printf("ローカルディレクトリ:",TerminalInfoString(TERMINAL_DATA_PATH));
   printf("共通ディレクトリ:",TerminalInfoString(TERMINAL_COMMONDATA_PATH ));  //ディレクトリの表示
   
   RelativeFileAddress = StringFormat(
                   "%s\\%s" ,
                   WriteFolderName , 
                   WriteFileName
               );
   
   int handle = FileOpen(RelativeFileAddress, FILE_CSV | FILE_WRITE, ",");  //ファイルハンドラを開く(無ければ作成される)
   if (handle != INVALID_HANDLE) {
    FileWrite(handle, "DATE", "OPEN", "CLOSE", "HIGH", "LOW");

    // 時間足ごとに年月日と価格を出力
    for (int i=Bars-1; i>=0; i--) {
        FileWrite(handle, TimeYear(Time[i]) + "/" +
                  TimeMonth(Time[i]) + "/" + TimeDay(Time[i]) + " " + TimeHour(Time[i]) + ":" + TimeMinute(Time[i]),
                  Open[i], Close[i], High[i], Low[i]);
    } 
    }else{
      printf("Error!");
      }
    // ファイルを閉じる
    printf("end");
    FileClose(handle);
  }

これを実行することで下のようなファイルが作成されます。(写真は2022年1月31日23時時点での日経平均の5分足)通常は"C:\Users\User\AppData\Roaming\MetaQuotes\Terminal"のなかにディレクトリが作成されるはずだがこれは実行環境に依存するため一概には言えない。うまく行けばこのようなファイルが出来上がるはずである。
f:id:UTS1:20220131234851p:plain

yfinanceでは例えば5分足については過去2か月しか取れなかったのに対し、mt4では過去一年近く遡ってデータをダウンロードすることが出来るので、使いこなせさえすればとても便利だと気が付いた。またこの方法を使わずとも、価格のcsvデータを直接ダウンロードすることもできるので、mt4は操作こそ慣れづらいところがあるもののマスターできるととても強いのではないか?と思っている