FXのトレード記録をエクセルに MT4の履歴をcsv出力するスクリプト
2017/05/07
メタトレーダーからトレード履歴をCSVファイルに出力するスクリプトとそれを管理するExcelシートを公開します。コピペするだけなのでプログラミングができない人でも簡単に使うことができるはずです。
これまでいちいちデータを手入力したり項目を一つ一つコピペしていた人にとってはその作業の労力や時間が大幅に短縮できるでしょう。
FXのトレード記録をエクセルで管理する
メタトレーダーでFXのトレードをしている人にとっては、そのトレードを管理するのにエクセルが使えれば非常に便利です。
しかし意外にもMT4にその機能が用意されていないので簡単にはできません。そのためにメタトレーダーを使っている先輩たちはトレード履歴をCSV出力できるスクリプトを開発して対応しています。
これができるようになるといちいちトレード記録を手入力する必要がありません。手間をかけずに正確な情報を手に入れられるので多くの人たちが、Excelを使ってFXのトレードを管理したいと思っていることでしょう。
メタトレーダーからトレード履歴をCSV出力する方法はネット上にいくつも公開されていますが、コンピューターに詳しくない人にとってはハードルが高いものです。
自分もこれについての記事を「MT4でトレード履歴をCSV出力、FXの売買記録をエクセルで理想に近づく」に書きましたが、Excelへの出力ができなかったとコメントがありました。
そこで今使っているスクリプトを公開することにしました。多少の変更はしたもののネット上にあるものをつなぎ合わせたようなものなので、お金をとれるような代物ではありません。
なので何かあっても自己責任かつ、欲しい機能が無くても許してください。
MT4からトレード履歴をCSV出力するスクリプト
それではメタトレーダーでのトレード履歴をCSV出力するスクリプトを掲載します。これまで名無しでしたが、この機会に「fxTradeHistory」と名前を付けました。
ソースをメモ帳などのテキストエディタにコピペして、メタトレーダーのスクリプトが置いてあるフォルダに保存します。エンコードについては、他のソースを見たらまちまちだったので気にしなくても良いようです。
え、スクリプトを保存するフォルダの場所がわからない?
MT4のメニュー[ファイル]-[データフォルダを開く]
エクスプローラーが起動したら、その下にある MQL4\Scripts フォルダーにスクリプトをおきましょう。
またはMetaEditorで作ります。
1.MetaEditorを起動する → [ツール]-[メタエディター]
2.スクリプト作成画面を表示する → [File]-[New]
3.スクリプトを新規作成する → Scriptを選択して[次へ]
4.スクリプト名を入力する → Nameの項目にfxTradeHistoryと入力して[完了]
5.ソースをコピペして保存する
6.コンパイルする → [File]-[Compile]
ちなみに、ソースのコメントにもあるようにベースになったソースはそれぞれの方が作成したものです。
【2015/03/12追記】
通貨ペアを出力するようにしました。
【2015/05/09追記】
通貨ペアの出力方法が間違っていたのを修正しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
void OnStart() { //--- // ほぼコピペさせていただきました // これがなければfxTradeHistoryは誕生していませんでした // // 元ネタ → メタトレーダー4でプログラムを作ってみよう // http://ameblo.jp/meta49/entry-11229390765.html string UserName = "fxTradeHistory"; int handle; string LogFileName; string HistoryData; string BuySellType; LogFileName = UserName + ".csv"; handle = FileOpen(LogFileName, FILE_CSV|FILE_WRITE, ','); FileWrite(handle, "注文番号", "通貨ペア", "取引種別", "数量", "新規時間", "新規価格", "決済時間", "決済価格", "損益", "オーダーコメント" ); for (int i = 0; i < OrdersHistoryTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true) { if (OrderType() == 0) BuySellType = "Buy"; if (OrderType() == 1) BuySellType = "Sell"; if (OrderType() == 2) BuySellType = "BuyLimit"; if (OrderType() == 3) BuySellType = "SellLimit"; if (OrderType() == 4) BuySellType = "BuyStop"; if (OrderType() == 5) BuySellType = "SellStop"; if (OrderType() == 6) BuySellType = "balance"; HistoryData = OrderTicket() +","+ OrderSymbol() +","+ BuySellType +","+ DoubleToStr(OrderLots(),2) +","+ ChgStrDate(TimeToStr(OrderOpenTime(),TIME_DATE)) +" "+ TimeToStr(OrderOpenTime(),TIME_SECONDS) +","+ DoubleToStr(OrderOpenPrice(),5) +","+ ChgStrDate(TimeToStr(OrderCloseTime(),TIME_DATE)) +" "+ TimeToStr(OrderCloseTime(),TIME_SECONDS) +","+ DoubleToStr(OrderClosePrice(),5) +","+ OrderProfit() +","+ OrderComment(); FileWrite(handle, HistoryData); } } FileClose(handle); } //+------------------------------------------------------------------+ // 日時の区切り文字を変更 (YY.mm.dd -> YY/mm/dd) // // 完全コピペですみません // 別ロジックで解決する方法が思いつきませんでした // // 元ネタ → MQLガールの恋するシストレ // http://mqlgirl.blog.fc2.com/blog-entry-3.html string ChgStrDate(string dt) { int start = -1; while(true){ start = StringFind(dt, "."); if(start < 0) break; dt = StringSetChar(dt, start, '/'); } return(dt); } |
MT4でスクリプトを実行する
なおソースを保存しただけでは、たぶんスクリプトは機能しません。ブログラムをコンパイルして実行ファイル(ex4ファイル)にする必要があります。
それにはメタトレーダーを再起動するか、ナビゲーターのウィンドウで右クリックをして更新をすれば実行ファイルが作成されます。もしだめな場合はメタエディターでコンパイルをしましょう。
スクリプトを実行するにはナビゲーターウィンドウを開いてfxTradeHistoryを右クリックしてチャートで実行をクリックします。特に何もメッセージは表示されませんが成功していればデータフォルダ以下の MQL4\Files フォルダーに fxTradeHistory.csv というCSVファイルが出力されているはずです。
# ああ、ex4ファイルで公開すればいいのか?
ということで、ex4ファイルをダウンロードできるようにしました。
# と思ったらうまくできませんでした
ダウンロード ⇒ fxTradeHistory.ex4
ファイルを置く場所はスクリプトと同じ場所です。
MT4のメニュー[ファイル]-[データフォルダを開く]
エクスプローラーが起動したら、その下にある MQL4\Scripts フォルダーにスクリプトをおきましょう。
トレード履歴をExcelシートに張り付ける
できあがったCSVファイルをExcelで開いてみると1行目には項目名があります。それぞれ何のデータなのかは察してください。
このスクリプトで出力した情報は、トレード記録用のexcelシートに貼り付けて損益などの計算をさせて管理しています。
そのexcelシートも公開します。1日のトレードで1つのexcelシートを使用しますが、トレード回数によっては1ヶ月1シートでもよいでしょう。
シートは適時コピーして使ってください。データの入力はCSVファイルの取引種別から決済価格までを一回のトレードとして、excelシートの1行にコピペすれば終了です。
ダウンロード ⇒ fxTradeHistory.xlsx
なお、コメントで「よくわからん」とありましたので張り付ける範囲を画像で示しました。たしかに文字だけではイメージしにくいかもしれませんね。
さて貼り付ける場所は、シート右側にある注文から決済価格までが先ほどCSVファイルから項目に対応しています。
fxTradeHistory.csvの選択された範囲(取引種別、数量、新規時間、新規価格、決済時間、決済価格)をコピー(Ctrl+C)します。
fxTradeHistory.xlsxの選択された範囲(注文、数量、新規時間、新規価格、決済時間、決済価格)に張り付け(Ctrl+V)します。
貼り付けをするとシートの左側に自動でデータが入力されて、日本時間への対応とpipsや損益の計算をしてくれます。
まぁ損益だけであればCSVファイルにも出力されているのでこのExcelシートを使わなくても不都合を感じる事はあまりないかもしれません。
なお出力されたデーターの取引種別にBuy(ロング)とSell(ショート)以外もありますが、対応はしていません。(自分が使っていないから)
さいごに
今回公開するにあたってスクリプトとexcelシートを少し調整をしました。ですが基本的には自分が使っているものそのままです。
こんな、まったく記事を投稿しなくなってしまったブログなのに見ていただいたということで、このスクリプトが誰かの役に立つならやった甲斐があるというものです。
関連記事
-
-
この逆をやればFXは楽勝じゃね!?
FXの全トレードを晒してみようと思う あまりにも天才的な負けトレードなので、シェ …
-
-
マルチタイムフレーム分析の移動平均線設定をエクセルで計算して一覧表示する
マルチマイムフレームで移動平均線を表示するときに、別の時間足の移動平均線を表示さ …
Comment
大変便利なツールで利用させていただいております
ありがとうございます
一点質問です
出力した際に、通貨ペアがxm land両方、私の環境では
なぜかAUDJPYとなってしまいます
どうもチャートで実行時アクティブになっている通貨ペアが出力されるよう?です
私の問題かもしれませんが、修正方法などありましたら
もしお気が向けばお教え下いますと幸いです
ご指摘ありがとうございました!
すみません。スクリプト側のミスです。
修正しましたので試してみてください。
試したところ
私の環境ではばっちり修正されております
どうもありがとうございます
末永く使用させていただきます
こんばんは。
こちらのソースをコピーして、メタエディターで新規作成でスクリプトを選択してペーストし、保存すればよいのでしょうか。
無知過ぎる質問で申し訳ないのですが、是非とも使いたいです。
よろしくお願いします。
コメントありがとうございます。
はい。そのやり方でソースを保存して、コンパイルすれば大丈夫のはずです。
こんにちは。
csvの貼り付け方がわかりません。
csvのどこからどこを、fxTradeHistory.xlsxのどこにコピペするのかがわかりません。
いろいろやってみたのですが、トンチンカンな質問ですみません。
MT4の履歴をうまいことcsvデータに変換できないかと探していたところ、こちらのブログにたどり着きました。
スクリプトとエクセルフォーマットを活用させていただき、ありがとうございます。
毎日コピペしてました。
公開ありがとうございます。
取引の記録を保存解析する手法を探していたところ、本ブログをみつけました。
早速スクリプトを実行すためにMT4を再起動しました。あるいはナイビゲーターウィンドウで右クリックしましたが、いずれの方法でも実行ファイルは作成されませんでした。そこでメタエディターでコンパイルを行いましたら、ターミナルにエラーが4か所あると赤字で表示されコンパイルできませんでした。
小生はメタエディターが全くわかりませんので対処できません。
宜しく解決策をご指導ください。
なお、小生の使用しているMT4のバージョンはV;4.00,Build1090です