マジックナンバー別の口座履歴を出力するスクリプトの作り方



今回は、マジックナンバー別の口座履歴をcsvファイルに出力させるスクリプトの作り方を説明します。

 

スクリプトのテンプレートの作り方

「新規作成」を押します。

 

「スクリプト」を選択して「次へ」ボタンを押します。

 

「Scripts¥」は最初から入力されていてフォルダ名で、作成したスクリプトはここのフォルダに入ります。「AccountHistory」がスクリプト名になります。

パラメータを1つ付けて、マジックナンバー別の口座履歴と全ての口座履歴を設定できるようにするので、「追加」ボタンを押してパラメーターを、名前=MagicNumber タイプ= bool 初期値=trueに設定して「完了」ボタンを押します。

 

ウィザードでパラメーターを設定すると赤枠の部分が追加されます。

ウィザードで追加しなくても直接これを書けば、後からでもパラメーターを追加することが出来ます。

 


口座履歴を出力するスクリプトの作り方

サンプルコードはコピーして貼り付けてコンパイルすれば実際に稼働させることが出来ます。

 

今回説明するスクリプトの仕様

パラメーターのMagicNumberをtrueに設定すると口座履歴がマジックナンバー毎のcsvファイルで出力されます。(複数のファイル)

MagicNumberをfalseに設定すると全ての口座履歴がcsvファイルで出力されます。(1つのファイル)

データのみの出力で、項目名や損益計などは出力されません。

項目は、ターミナルの口座履歴と同じ順番で並んでいて最後にコメントとマジックナンバーを追加しています。

※同じファイル名がある場合は、口座履歴のデータは追加になります。例えば、2回スクリプトを実行した場合、最初に作られたファイルにデータが追加されるので2重にデータが入ってしまいます。スクリプトを実行する前にファイルを削除または移動させてから実行する必要があります。

 

ファイルの出力場所

MT4のメニューの「ファイル」から「データファルダを開く」でフォルダを開いて「MQL4」→「Files」の中に出力されます。

 


サンプルコード

サンプルコードの説明

18行目~20行目までは変数の宣言です。

21行目 OrdersHistoryTotal()は口座履歴のオーダーの総数を返す関数です。この関数は現在のターミナルの口座履歴に設定されている期間の総数を返します。
for文で、オーダー数分ループさせています。

23行目 「OrderSelect(iSELECT_BY_POSMODE_HISTORY)」はオーダーの選択する関数です。ここでオーダーを選択することで、選択したオーダーの情報の取得や処理などが出来るようになります。2つ目の引数は、オーダーの選択方法でインデックス番号かチケット番号を選ぶことが出来ます。「SELECT_BY_POS」はインデックス番号での選択になります。1つ目の引数「i」はループ内の変数で、インデックス番号を設定しています。3つ目の引数「MODE_HISTORY」は、過去のオーダー(決済された注文または取り消された待機注文)になります。この3つ目の引数は省略可能で、省略した場合は、現在のオーダー(保有しているポジションまたは待機注文)になります。

OrderSelectには戻り値があって、オーダーの選択に成功するとtrueで、失敗するとfalseが返ってきます。ここではif文を使って成功した物だけをファイルに出力するようにしています。

25行目~48行目までは、OrderType()に対応する文字列を取得するための処理です。

OrderType()は注文の種別を取得する関数で、戻り値は数値が返ってきます。OP_BUYは定数で中は0で、OP_SELLは1です。例えば、OrderType()を直接ファイルに出力すると買いポジション=0、売りポジション=1の数値になるので、switch文を使って数値を「buy」や「sell」などの文字列に変換しています。

49行目~56行目までは、出力するファイル名を作って、19行目で宣言した変数「sFileName」に代入する処理です。

追加したパラメータのMagicNumberをif文で比較して、trueの時はマジックナンバーの入ったファイル名にします。例えば、マジックナンバーが12345だとすると、ファイル名は「口座履歴12345.csv」になります。これによりマジックナンバー別にファイルを分けることが出来るようになっています。

57行目 FileOpen(sFileName, FILE_CSV|FILE_READ|FILE_WRITE, ‘,’)はファイルを開くための関数です。1つ目の引数はファイル名です。2つ目の引数はファイルを開くモードを指定します。3つ目の引数は区切文字の指定で、ここではカンマを指定しています。

FileOpenは成功するとファイルハンドルが返ってきて失敗すると-1が返ってきます。18行目で宣言した変数「iHandle」に戻り値を代入しています。

58行目 if文でFileOpenが成功した時にファイルの処理をするようにしています。

60行目 FileSeek(iHandle, 0, SEEK_END)はファイルポインタの位置を指定します。1つ目の引数はファイルハンドルを指定します。2つ目の引数は位置の移動でバイト単位で指定します。3つ目の引数は初期位置で「SEEK_END」はファイルの終わりになります。

61行目~63行目まではファイルの書き込みの処理です。ここは3行になっていますが1つの文です。長いので改行して3行になっています。

1つ目の引数はファイルハンドルを指定します。残りの引数は、出力するファイル内の項目です。4つ目の引数は25行目~48行目で文字列を取得した変数で、それ以外はオーダーの情報を取得する関数です。オーダー情報を関数で取得してそのままファイルに書き込んでいます。

ファイル内の項目は、ターミナルの口座履歴タブの項目の順番なっていて、最後にコメントとマジックナンバーを追加しています。

OrderTicket()=注文番号 OrderOpenTime()=時間(オープン) sOrderTypeName=取引種別 OrderLots()=数量 OrderSymbol()=通貨ペア OrderOpenPrice()=価格(オープン) OrderStopLoss()=決済逆指値(S/L) OrderTakeProfit()=決済指値(T/P) OrderCloseTime()=時間(クローズ) OrderClosePrice()=価格(クローズ) OrderSwap()=スワップ OrderProfit()=損益 OrderComment()=コメント OrderMagicNumber()=マジックナンバー

64行目 FileClose(iHandle)は、ファイルを閉じる関数です。引数はファイルハンドルを指定します。

68行目 これは無くても良いのですが、処理が終わったことをメッセージボックスを表示して知らせるようにしています。

当サイトに掲載している情報やサンプルコードを利用した結果によって生じるいかなる損害、損失について当サイトは一切の責任を負いません。サンプルコードにはバグなどがある可能性もあります。当サイトの情報やサンプルコードの利用は、自己責任でお願いします。


おすすめ記事

リアル口座のトレード収支結果です。   EA名:KonohaUSDJPY 通貨ペア:USDJPY 使用FX業者:OANDA JAPAN(東京サーバー) バージョン:1.00 パラメーター:すべて初期値 約定日時…

EAの長期間のバックテストをするにはMT4にヒストリカルデータを入れる必要があります。 今回は、一番簡単にできるMetaQuotes社のヒストリカルデータの入れ方と、FXDDのヒストリカルデータをダウンロードしてインポー…

関連記事

今回は、EAにボタン、テキストボックス、ラベルの配置方法と使い方を説明します。   目次 ボタンの配置方法テキストボックスの配置方法ラベルの配置方法オブジェクトの削除ボタン、テキストボックス、ラベルの使い方全コ…

MT4の標準機能では、複数のボジションを一度に全部決済することが出来ないようです。ないものは作れば良いというのがMT4の最大の特徴ではないでしょうか? 今回は、チャート上にボタンを配置して、そのボタンを押すと保有している…

MT4にはデバッグ機能が備わっています。前は無かったのですがBuild 600から実装されました。   目次 デバッグ時の通貨ペアと時間足の変更ブレークポイント変数の確認デバッグの注意点コンパイル時のエラーの探…

今回も前回の続きです。 前回の「全決済ボタンのEAに売りボタンと買いボタンを追加する」で説明したEAはコンパイルすると警告メッセージが5つ出ています。この警告メッセージをなくすのと、簡単なエラー処理を追加してみます。 &…

前回の「全決済ボタンのEAに通貨ペアとマジックナンバーの処理を追加する」で説明した全決済ボタンのEAに、売りボタンと買いボタンをつけてみます。 売り注文や買い注文は、MT4の標準機能で出来るので、ボタンを作る意味はあまり…