MQL4MQL5 EA(エキスパートアドバイザー) ファイル・データ保存
エントリーしたときのチャートを画像で残したい
結論:ChartScreenShot(0, ファイル名, 幅, 高さ) で、チャートの画像を Files フォルダに保存します。
考え方
エントリーや決済のときのチャートを画像で残しておくと、あとで振り返るときに便利です。ChartScreenShot() は、チャートの画面を png・gif・bmp で Files フォルダに保存します。ここでは、ポジション数が増えたとき(エントリーしたとき)に画像を保存する EA を例にしています。
- エントリーを検出する(ここではポジション数の増加)
- 日時を含むファイル名を作る(同じ名前だと上書きされる)
- ChartScreenShot() で保存する
そのまま使えるコード
MetaEditor の「新規作成」で「エキスパートアドバイザ(テンプレート)」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Experts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4(MT4)
#property strict
// エントリーしたらチャートの画像を保存する EA(MT4)
int lastCount = 0;
int Positions()
{
int n = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == _Symbol && OrderType() <= OP_SELL)
n++;
return n;
}
void SaveShot()
{
string t = TimeToString(TimeCurrent(), TIME_DATE | TIME_SECONDS);
StringReplace(t, ".", "");
StringReplace(t, ":", "");
StringReplace(t, " ", "_");
string file = "shots\\" + _Symbol + "_" + t + ".png";
if(ChartScreenShot(0, file, 1280, 720))
Print("保存しました:Files\\", file);
}
int OnInit()
{
lastCount = Positions();
return INIT_SUCCEEDED;
}
void OnTick()
{
int now = Positions();
if(now > lastCount) SaveShot(); // ポジションが増えた=エントリー
lastCount = now;
}MQL5(MT5)
// エントリーしたらチャートの画像を保存する EA(MT5)
int lastCount = 0;
int Positions()
{
int n = 0;
for(int i = PositionsTotal() - 1; i >= 0; i--)
if(PositionGetTicket(i) > 0 && PositionGetString(POSITION_SYMBOL) == _Symbol)
n++;
return n;
}
void SaveShot()
{
string t = TimeToString(TimeCurrent(), TIME_DATE | TIME_SECONDS);
StringReplace(t, ".", "");
StringReplace(t, ":", "");
StringReplace(t, " ", "_");
string file = "shots\\" + _Symbol + "_" + t + ".png";
if(ChartScreenShot(0, file, 1280, 720))
Print("保存しました:Files\\", file);
}
int OnInit()
{
lastCount = Positions();
return INIT_SUCCEEDED;
}
void OnTick()
{
int now = Positions();
if(now > lastCount) SaveShot(); // ポジションが増えた=エントリー
lastCount = now;
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- ファイル名の前に "shots\\" を付けて、Files フォルダの中の shots フォルダにまとめています。
注意点
- 同じファイル名で保存すると上書きされます。ファイル名に日時を入れています。
このコードで使っている関数
あわせて読みたいレシピ
「ファイル・データ保存」のレシピ一覧
- ローソク足のデータを CSV に書き出したい
- CSV ファイルを読み込みたい
- ターミナルを再起動しても値を残したい
- エントリーしたときのチャートを画像で残したい












