【MT4】取引履歴をマジックナンバー別に自動でCSV書き出しするスクリプトを公開|初心者OK

スーツ姿のデグーマウスがMT4 EAのコードを指しながら解説しているイラスト。ぷろぐらむFXのデフォルトアイキャッチ。
EAサンプル・ノウハウ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

「どのEAが実際に利益を出しているのか分からない…」
「MT4の口座履歴はマジックナンバーでソートできず、分析が面倒…」

そんな悩みを解決するために、この記事ではMT4の取引履歴をマジックナンバー単位でCSVに書き出すスクリプトを無料公開します。

スクリプトを実行するだけで、EAごとの成績・勝率を一瞬で可視化できるため、複数EA運用の管理やバックテストの分析を圧倒的に効率化できます。

初心者でも迷わず使えるよう、セットアップ方法・使い方・活用例まで丁寧に解説しました。まずは概要から見ていきましょう。

📌 このスクリプトでできること(概要)

  • MT4の取引履歴を マジックナンバー単位で CSV 書き出し
  • 複数マジックナンバー(最大4つ)に対応
  • 指定日付以降の履歴だけ抽出できる
  • Excelで成績分析・フィルタが簡単に
MT4の口座履歴をマジックナンバー単位でCSVに書き出した例
▲ スクリプトで書き出されたCSV例(EAごとの成績が一目で分かる)

機能紹介

ここからは、スクリプトが実際にどんな処理を行うのか詳しく見ていきます。

冒頭でも触れたとおり、口座履歴の中から指定したマジックナンバーの注文履歴だけを抽出し、CSVとして保存します。

MT4スクリプトを実行する画面の例

今回はEAではなくスクリプト形式で作成しています。スクリプトは「必要なときだけ実行し、1回で処理が完結する」ため、履歴を書き出す用途に最適です。

使い方:スクリプトの基本動作

このスクリプトは、MT4上でダブルクリックするだけで一度きりの処理を実行します。複数EAを運用している場合でも、瞬時に「EAごとの成績」を取り出せるのが最大のメリットです。

MT4スクリプトのパラメータ設定画面

スクリプトをダブルクリックすると、このようにパラメータ入力画面が開きます。ここで、書き出したいマジックナンバー抽出したい日付を指定するだけで準備完了です。

パラメータ設定(3項目)

今回設定できる内容は以下の3つです。

  • セーブファイル名:CSVのファイル名(任意)
  • MagicNo:抽出したいマジックナンバー(最大4つ)
  • dateT:この日付以降の履歴のみを書き出す

それぞれの詳細を順番に見ていきます。

MT4マジックナンバー入力画面

① セーブファイル名

書き出されるCSVの名前です。未入力でも問題ありませんが、EA名や分析日を含めると管理がしやすくなります。

② MagicNo(複数指定OK)

未入力の場合:口座内のすべての注文履歴を書き出します。

特定EAだけを抽出したい場合は、そのEAのマジックナンバーを入力してください。

  • 1つだけ → 12345
  • 2つ → 55,66
  • 最大4つ → 55,66,77,88

設定した数字に一致する注文履歴だけが抽出され、ファイル名も

12345_Kekka.csv のように自動生成されます。

③ dateT(抽出開始日)

この日付より古い注文は書き出し対象外になります。

「今月だけ」「2024年以降だけ」など、抽出範囲を柔軟に調整できます。


何が便利になるのか?(活用例)

このスクリプトを使えば、MT4の「見づらい履歴」を一気に分析可能データへ変換できます。

  • EAごとの 利益・損失をExcelで集計できる
  • 手数料・スプレッド・勝率の比較が簡単
  • ドローダウン発生ポイントを視覚化できる
  • 複数EA・複数口座の成績管理が 圧倒的に効率化

「MT4の履歴だけでは限界…」という悩みが、CSV化するだけで一気に解決します。

CSV書き出し後のExcel表示例
▲ CSV化すれば、並び替え・集計・可視化が自由自在に

スクリプトの設置方法(ダウンロード or 自分でコンパイル)

ここからは、スクリプトの設置場所書き出されたファイルの保存先について解説します。MT4の操作に慣れていない方でも迷わないよう、画像つきで手順を紹介します。

ダウンロードして使う場合

ダウンロードした .mq4 または .ex4 ファイルは、以下の場所にコピーします。

MQL4 → Scripts フォルダ

MT4のMQL4フォルダ内のScriptsフォルダ配置例

コピーすると、MT4の「ナビゲーター」→「スクリプト」に表示され、すぐ使える状態になります。

自分でソースコードをコンパイルする場合

ソースコードを貼り付けて使う場合は、MT4のエディタを開き、「新規作成 → スクリプト」を選んでください。

MT4でスクリプトを新規作成してコンパイルする画面

コンパイル後の .ex4 ファイルは、自動で MQL4 → Scripts に作成されます。


CSVファイルの保存場所

スクリプトを実行すると、書き出されたCSVはMT4のデータフォルダ内の「MQL4 → Files」フォルダに保存されます。

まずは MT4 メニューの

「ファイル → データフォルダを開く」

をクリックします。

MT4のデータフォルダを開く操作画面

次に、以下の順番でフォルダを開きます。

  • MQL4
  • Files(書き出し先)
MT4のFilesフォルダに書き出されたCSVファイルの例

このように、指定したファイル名でCSVが保存されます。
マジックナンバーを指定した場合は、

12345_Kekka.csv

のように、自動で識別しやすい形にリネームされます。


書き出し後の確認:Excelで開いて分析

CSVファイルは Excel や Googleスプレッドシートで簡単に開けます。
初期状態では取引の古い順に並んでいますが、フィルタを使えば分析が非常に楽になります。

CSV書き出し後にExcelで並び替え・フィルタ分析している画面

並び替え例:

  • 損益の大きい順・小さい順
  • 注文種別(BUY/SELL)でフィルタ
  • EAごとの成績比較
  • ドローダウンの発生ポイント確認

Excelによる分析は、MT4履歴だけでは絶対にできないレベルの可視化が可能になります。

スポンサーリンク

ダウンロード

以下から、今回紹介した MT4 取引履歴CSV書き出しスクリプト をダウンロードできます。

📥 操作履歴書き出しスクリプトをDL

スクリプトを MT4 の MQL4 → Scripts に入れればすぐに使えます。

\ 国内最大級のEAプラットフォーム /
GogoJungle(ゴゴジャン)でEAの評価・レビューをチェック!

▶ GogoJungleでEAを探す 【MT4】取引履歴をマジックナンバー別に自動でCSV書き出しするスクリプトを公開|初心者OK

ソースコード(コピペOK)

以下はそのままコンパイルできる完全版です。自分で改造したい方、学習したい方はそのままエディタに貼り付けてください。

//+------------------------------------------------------------------+
//|                                              トレード履歴書き出し.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, mef Software."
#property link      "https://fx-prog.com/"
#property version   "1.00"

#property strict
#property show_inputs

input string FileNm="Kekka.csv"; //セーブファイル名
input string MagicNo = "";
input datetime dateT = 1970/01/01;

string dataBuff[3];

int File;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
//---
   int cnt =0,writeCnt = 0,WriteMagic = 0;
   string FileName = "";
   
   
   int spc = StringSplit(MagicNo, ',', dataBuff);
   
   //マジックナンバーが空白の時
   if(spc==0){
      FileName = "ALL_" + FileNm;
   }else if(spc==1){
      FileName = dataBuff[0]  + "_" + FileNm;
   }else if(spc==2){
      FileName = dataBuff[0]  + "_" + dataBuff[1]  + "_" + FileNm;
   }else if(spc==3){
      FileName = dataBuff[0]  + "_" + dataBuff[1]  + "_" + dataBuff[2]  + "_" + FileNm;
   }else if(spc==4){
      FileName = dataBuff[0]  + "_" + dataBuff[1]  + "_" + dataBuff[2]  + "_" + dataBuff[3]  + "_" +  FileNm;
   }


   //ファイルオープン
   File = FileOpen(FileName,FILE_CSV|FILE_WRITE,',');
   if(File==INVALID_HANDLE){
       //ファイルのオープンに失敗した時
       Print(FileName+"[書き出し失敗] Open error(",GetLastError(),")");
       return;
   }

   
   //ファイル出力(見出し)
   FileWrite(File,"マジックナンバー","注文時間","取引種別","数量","通貨ペア","価格","決済時間","決済価格","TP","SL","スワップ","損益","コメント");
 
   for(cnt = OrdersHistoryTotal(); cnt > 0; cnt--){
   
      bool writeFlg =false;
      
      if(OrderSelect(cnt-1,SELECT_BY_POS,MODE_HISTORY) == true){
      
         if(spc == 0 ){
            WriteMagic = OrderMagicNumber();
            writeFlg = true;
         }else if(spc == 1 ){
            if(OrderMagicNumber() == StringToInteger(dataBuff[0])){
               WriteMagic = (int)(StringToInteger(dataBuff[0]));            
               writeFlg = true;
            }
         }else if(spc == 2 ){
            if(OrderMagicNumber() == StringToInteger(dataBuff[0])){
               WriteMagic = (int)(StringToInteger(dataBuff[0]));  
               writeFlg = true;
            }else if(OrderMagicNumber() == StringToInteger(dataBuff[1])){
               WriteMagic = (int)(StringToInteger(dataBuff[1]));              
               writeFlg = true;
            }            
         }else if(spc == 3 ){
            if(OrderMagicNumber() == StringToInteger(dataBuff[0])){
               WriteMagic = (int)(StringToInteger(dataBuff[0]));  
               writeFlg = true;
            }else if(OrderMagicNumber() == StringToInteger(dataBuff[1])){
               WriteMagic = (int)(StringToInteger(dataBuff[1]));              
               writeFlg = true;
            }else if(OrderMagicNumber() == StringToInteger(dataBuff[2])){
               WriteMagic = (int)(StringToInteger(dataBuff[2]));              
               writeFlg = true;
            }              
         }else if(spc == 4 ){
            if(OrderMagicNumber() == StringToInteger(dataBuff[0])){
               WriteMagic = (int)(StringToInteger(dataBuff[0]));  
               writeFlg = true;
            }else if(OrderMagicNumber() == StringToInteger(dataBuff[1])){
               WriteMagic = (int)(StringToInteger(dataBuff[1]));              
               writeFlg = true;
            }else if(OrderMagicNumber() == StringToInteger(dataBuff[2])){
               WriteMagic = (int)(StringToInteger(dataBuff[2]));              
               writeFlg = true;
            }else if(OrderMagicNumber() == StringToInteger(dataBuff[3])){
               WriteMagic = (int)(StringToInteger(dataBuff[3]));              
               writeFlg = true;
            }
                      
         }
         

         //日付が古い場合は書き込まない         
         if(dateT > OrderOpenTime()){
            writeFlg = false;
         }         
      
         if(writeFlg == true){
            string type="";
                  
            if(OrderType()==OP_BUY){
               type="buy";
            }else{
               type="sell";
            }
                  
            FileWrite(File,WriteMagic,OrderOpenTime(),type,OrderLots(),OrderSymbol(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice(),OrderTakeProfit(),OrderStopLoss(),OrderSwap(),OrderProfit(),OrderComment());
            writeCnt++;
         }
      }
   }
      
      
         
   //完了通知
   if(GetLastError()==0){
      Print(FileName +":" + IntegerToString(writeCnt) + "件 [書き出し成功]");
   }else{
      Print(FileName+"[書き出し失敗]errNo:",GetLastError());
   }
   
   FileClose(File);

}
//+------------------------------------------------------------------+

注意点・実装時のポイント

CSV書き出しはとても便利ですが、安全に運用するために以下の点も押さえておきましょう。

  • MT4の履歴はFX業者によって数カ月で消える場合がある
    定期的にCSV化して保管する習慣をつけるのがおすすめです。
  • マジックナンバー未入力の場合は全履歴が書き出される
    分析用にEA単位で出したい場合は必ず MagicNo を設定してください。
  • 複数マジックナンバーに対応しているが、最大4つまで
    多くのEAを動かしている場合は分割して書き出しましょう。
  • 大きい口座履歴を一度に書き出すと処理が重くなることがある
    dateT を活用し、期間を区切って出力すると安定します。

さいごに:EA運用の“見える化”は最強の武器

以上、MT4の取引履歴をマジックナンバー単位でCSV書き出しするスクリプトを紹介しました。

MT4の履歴画面だけでは、複数EAの成績を比較したり、ドローダウンを分析したりするのは非常に難しいですが、CSVに変換するだけで:

  • 勝率・PF・損益を一瞬で確認
  • EAごとの成績比較
  • DDポイントの特定
  • 手数料・スワップの影響チェック

など、運用の改善につながる“気づき”が一気に増えます。

EA運用の効率を最大化したい方は、ぜひこのスクリプトを活用してみてください。

👉 EA を体系的に学びたい方は FX自動売買(EA)の始め方ガイド もおすすめです。

👉 他の便利スクリプトや関数は MQL4 関数一覧ページ から探せます。

👉 ロジックや実践Tipsを探すなら EAプログラミング小ネタ集 もどうぞ。



✅ 今回のロジックをベースにしたEAサンプルも多数公開中

今回紹介したようなEAの売買ロジック・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。

ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。


📊 【2025年最新】FX自動売買EAランキングも公開中!

当サイトの「どのEA(インジ)が実際に勝っているのか?」を知りたい方はこちら👇
PF(プロフィットファクター)や勝率で徹底比較した最新ランキングから、あなたに最適なEA(インジ)を見つけましょう。


EA開発初心者向けに、今後も実践的なMQL4関数を紹介していきます。
気になる機能やロジックがあれば、ぜひ他の記事もあわせてご覧ください!

コメント

タイトルとURLをコピーしました