CSVデータをグラフ化するインジケーター「320_Csv2Graph」


MT4の「Files」フォルダに保存したCSVファイルを読み込んでチャートのサブウィンドウに折れ線グラフを表示するインジケーターです。
関連ソフト「MT4テスト結果CSVファイル変換ツール」と連携するとストラテジーテスターの結果タブに表示されている損益をグラフ化できるので、グラフタブに表示されているグラフ(既存の損益グラフ)とは異なった視点からEAを検証できます。

あと、「再読込」ラベルをクリックするとCSVファイルを再読み込みします。
MT4テスト結果CSVファイル変換ツールを使用して何度もCSVファイルを作り直した時に便利です。

画面イメージ(赤色枠線部分)
CSVファイルから折れ線グラフを表示するインジケーターの画面イメージ
上記画面イメージで使用したCSVファイル
---ここから---
2017.04.03 11:00,380.00
2017.04.04 11:00,1532.00
2017.04.05 11:00,-1300.00
2017.04.06 11:00,-352.00
2017.04.07 11:00,-960.00
2017.04.10 11:00,1000.00
2017.04.11 11:00,-470.00
2017.04.12 11:00,1520.00
2017.04.13 11:00,510.00
2017.04.14 11:00,-960.00
2017.04.17 11:00,500.00
2017.04.20 11:00,1220.00
2017.04.21 11:00,310.00
---ここまで---
※上記画面はパラメータ「データの値をすべて合算する」を「true」にした場合の例です。
 また、見やすくするため日時や価格を切りがいい値で表示するインジケーター「320_KiriGaII」を使用しています。


パラメータ「データの値をすべて合算する」が「false」の場合の表示例

CSVの値を合算しない場合の表示例です。CSVデータは上記と同じです。
詳細は後述の「データの合算仕様」を参照してください。
合算しない場合の表示例


導入方法(インストール)

ダウンロードしたZIPファイルを適当なフォルダに展開(解凍)後、通常のインジケーターと同様にMT4に導入してください。

  1. MT4のメニュー「ファイル」から「データフォルダを開く」をクリックする。
  2. エクスプローラーが表示されたら「MQL4」フォルダ内にある「Indicators」フォルダに当インジケーター「320_Csv2Graph.mq4」をコピーする。
  3. MT4のナビゲーターウィンドウで右クリックして「更新」をクリックする。またはMT4を再起動する。
  4. ナビゲーターウィンドウに当インジケーターが表示されたらチャートに挿入する。
  5. 必要に応じてパラメーターを変更する。

補足:ZIPファイルはMT4用のトップページからダウンロードできます。


削除方法(アンインストール)

通常のインジケーターと同様にMT4から削除してください。

  1. チャートから当インジケーターを削除する。
  2. MT4のメニュー「ファイル」から「データフォルダを開く」をクリックする。
  3. エクスプローラーが表示されたら「MQL4」フォルダ→「Indicators」フォルダ内の「320_Csv2Graph.ex4」や「320_Csv2Graph.mq4」を削除する。
  4. MT4のナビゲーターウィンドウで右クリックして「更新」をクリックする。またはMT4を再起動する。

パラメーターの説明

Custom Indicatorの「パラメーターの入力」の画面イメージ
パラメーターの入力画面

CSVのファイル名

MT4の「Files」フォルダに保存したCSVのファイル名を指定します。

補足:日本語のファイル名の使用したり、「.csv」以外の拡張子にしたり、「Files」フォルダに新しくフォルダを作成してそこにファイルを保存したりしましたが特に問題はないようです。
ただし、厳密なエラー処理を施していないので後述の「CSVファイル仕様」に反するファイルは使用しないでください。

補足:「Files」フォルダはMT4のメニュー「ファイル」から「データフォルダを開く」をクリックし、表示されたエクスプローラーの「MQL4」フォルダ内にあります。
ただし、ストラテジーテスターでテストして「チャートを開く」で開いたチャートに当インジケーターを挿入した場合は、「MQL4」ではなく「tester」フォルダ内の「Files」フォルダに保存したCSVファイルを参照する場合があります。どのような条件で「tester」フォルダ配下になるかは不明ですので、ご使用時の状況に応じて適宜保存先を変更してください。

データの値をすべて合算する
CSVファイルから読み込んだ値をすべて合算するかを指定します。
詳細は後述の「データの合算仕様」を参照してください。

CSVファイル仕様

基本的に一般的なCSVファイルになると思いますが、注意点もありますので細かく記載したいと思います。

改行コードは「CRLF」または「LF」であること
改行コード「CR」は正常に読み込めません。
文字コードは「Unicode」または「Shift-JIS」であること
他の文字コードも読み込めるかもしれませんが確認が取れていません。
文字はすべて半角文字を使用すること
データは日時と値のみなので、半角文字の数字「0~9」、ピリオド「.」、スラッシュ「/」、コロン「:」、カンマ「,」、空白(スペース)、ハイフン「-」以外は使用することはないと思います。
ヘッダ行など、データ行以外は作成しないこと
一般的なCSVファイルにはヘッダ行も含まれるかもしれませんが、当インジケーターでは対応していません。また、データのない行(改行のみの空行)も作成しないでください。
データ行は1列目に日時、2列目に値のみを記述し、半角カンマ「,」で区切ること
一般的なCSVファイルではダブルクォーテーション「"」で括る場合がありますが、当インジケーターでは対応していませんので括らないでください。
ただし、データ行の前後や半角カンマの前後に半角空白があってもエラーにはならないようですので、見やすくするために空白で整えるのは問題ないです。
1列目の日時は「yyyy.mm.dd hh:mm」または「yyyy/mm/dd hh:mm」形式で記述すること
秒を含む「yyyy.mm.dd hh:mm:ss」形式や時刻無しの「yyyy.mm.dd」形式でもエラーにはならないようですが、その場合はそのデータを使って「データの合算仕様」に従った処理が行われます。
2列目の値はdouble型で扱える範囲の数値で記述すること
値はdouble型で扱える範囲であれば、プラス値、マイナス値、小数点ありを問わず使用できると思いますが、あまりにも大きい(または小さい)値だと合算している途中で桁あふれ(オーバーフロー)のエラーが発生したり、折れ線グラフの表示がおかしくなるかもしれません。その場合はMT4の仕様ということで諦めて問題ない範囲の値を使用してください。
あと、値にカンマは含めないでください。(例:12,000円は「12,000」ではなく「12000」と記述する)
データは日時の昇順でソートされていること
当インジケーターは処理を軽くするため日時の昇順でソートされていることを前提に作られています。

データの合算仕様

CSVファイルから読み込んだ値は、チャートの足の時間帯(例えば1時間足なら10時00分から10時59分まで等)ごとに合算され、その足の値として扱われます。
具体的な例は表「CSVデータはチャートの足の時間帯ごとに合算される」を参照してください。

次の足の時間帯(上記の続きなら11時00分から11時59分まで)も同様に合算されますが、その際、次の足の値に1つ前の足の値も合算するかを指定できます。
具体的な例は表「パラメータの指定に従い、1つ前の足の値を合算するか決める」を参照してください。

CSVデータはチャートの足の時間帯ごとに合算される
CSVデータ 15分足の場合、15分単位で合算 1時間足の場合、1時間単位で合算
2017.04.03 10:00, 1300
2017.04.03 10:11,-2000
2017.04.03 10:14, -500
---
2017.04.03 10:15, 1000
2017.04.03 10:15, 500
---
2017.04.03 10:46,-1000
2017.04.03 10:59, 2800
---
2017.04.03 11:00, 3200
2017.04.03 11:04, 1000
---
2017.04.03 11:25,-2300
---
2017.04.03 11:30, -200
---
2017.04.03 11:49, 1000
---
※「---」は見やすくするために付与したもので実際のCSVデータには含まれません。
10時00分の15分足には10:00から10:14までのデータが合算される。
1300 - 2000 - 500 = -1200
10時の1時間足には10:00から10:59までのデータが合算される。
1300 - 2000 - 500 + 1000 + 500 - 1000 + 2800 = 2100
10時15分の15分足には10:15から10:29までのデータが合算される。
1000 + 500 = 1500
10時30分の15分足には10:30から10:44までのデータが合算される。
今回のケースではデータが無いので「0」になる。
10時45分の15分足には10:45から10:59までのデータが合算される。
-1000 + 2800 = 1800
11時00分の15分足には11:00から11:14までのデータが合算される。
3200 + 1000 = 4200
11時の1時間足には11:00から11:59までのデータが合算される。
3200 + 1000 - 2300 - 200 + 1000 = 2700
11時15分の15分足には11:15から11:29までのデータが合算される。
-2300 = -2300
11時30分の15分足には11:30から11:44までのデータが合算される。
-200 = -200
11時45分の15分足には11:45から11:59までのデータが合算される。
1000 = 1000

パラメータの指定に従い、1つ前の足の値を合算するか決める
「データの値をすべて合算する」が「true」 「データの値をすべて合算する」が「false」
15分足の場合 1時間足の場合 15分足の場合 1時間足の場合
10時00分の15分足には時間帯ごとに合算された「-1200」に折れ線グラフの線が引かれる。 10時の1時間足には時間帯ごとに合算された「2100」に折れ線グラフの線が引かれる。 10時00分の15分足には時間帯ごとに合算された「-1200」に折れ線グラフの線が引かれる。 10時の1時間足には時間帯ごとに合算された「2100」に折れ線グラフの線が引かれる。
10時15分の15分足には時間帯ごとに合算された「1500」に1つ前の15分足の「-1200」が合算された「300」に折れ線グラフの線が引かれる。 10時15分の15分足には時間帯ごとに合算された「1500」に折れ線グラフの線が引かれる。
10時30分の15分足には時間帯ごとに合算された「0」に1つ前の15分足の「300」が合算された「300」に折れ線グラフの線が引かれる。 10時30分の15分足には時間帯ごとに合算された「0」に折れ線グラフの線が引かれる。
10時45分の15分足には時間帯ごとに合算された「1800」に1つ前の15分足の「300」が合算された「2100」に折れ線グラフの線が引かれる。 10時45分の15分足には時間帯ごとに合算された「1800」に折れ線グラフの線が引かれる。
11時00分の15分足には時間帯ごとに合算された「4200」に1つ前の15分足の「2100」が合算された「6300」に折れ線グラフの線が引かれる。 11時の1時間足には時間帯ごとに合算された「2700」に1つ前の1時間足の「2100」が合算された「4800」に折れ線グラフの線が引かれる。 11時00分の15分足には時間帯ごとに合算された「4200」に折れ線グラフの線が引かれる。 11時の1時間足には時間帯ごとに合算された「2700」に折れ線グラフの線が引かれる。
11時15分の15分足には時間帯ごとに合算された「-2300」に1つ前の15分足の「6300」が合算された「4000」に折れ線グラフの線が引かれる。 11時15分の15分足には時間帯ごとに合算された「-2300」に折れ線グラフの線が引かれる。
11時30分の15分足には時間帯ごとに合算された「-200」に1つ前の15分足の「4000」が合算された「3800」に折れ線グラフの線が引かれる。 11時30分の15分足には時間帯ごとに合算された「-200」に折れ線グラフの線が引かれる。
11時15分の15分足には時間帯ごとに合算された「1000」に1つ前の15分足の「3800」が合算された「4800」に折れ線グラフの線が引かれる。 11時15分の15分足には時間帯ごとに合算された「1000」に折れ線グラフの線が引かれる。

15分足を例にした折れ線グラフの違い
「データの値をすべて合算する」が「true」の場合は各足の値が右に行くごとに合算(累積)されるが、
「false」の場合は各足ごとの値に従って折れ線グラフが表示される。
折れ線グラフの画面イメージ


更新履歴

日付 バージョン 内容
2017/05/25 1.00 初リリース
2018/04/19 2.00 1.全体的に処理を見直し、リファクタリングを行いました。
2.ファイルの再読み込み機能を追加しました。
2018/04/24 2.10 1.ファイル再読み込みラベルの表示位置と文字を変更しました。
2.CSVファイル保存先フォルダ「Files」について補足を追記しました。