MQL4MQL5 スクリプト ファイル・データ保存
CSV ファイルを読み込みたい
結論:FileOpen() に FILE_READ | FILE_CSV を付けて開き、FileReadString() で1項目ずつ読み、FileIsLineEnding() で行の終わりを判定します。
考え方
CSV ファイルから設定やデータを読み込む例です。CSV モードで開くと、FileReadString() が区切り文字までの1項目を返します。行の最後の項目を読んだかは FileIsLineEnding()、ファイルの終わりは FileIsEnding() で分かります。ここでは「通貨ペア,ロット」の形の CSV を読み込んで表示するスクリプトを例にしています。
- 読み込む CSV を Files フォルダに置く(例:settings.csv に「USDJPY,0.1」のような行を書く)
- FileOpen(ファイル名, FILE_READ | FILE_CSV | FILE_ANSI, ',') で開く
- FileIsEnding() になるまで、1行ずつ項目を読む
そのまま使えるコード
MetaEditor の「新規作成」で「スクリプト」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Scripts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
#property script_show_inputs
// 「通貨ペア,ロット」の行が並んだ CSV を読み込むスクリプト
input string InpFile = "settings.csv"; // Files フォルダの中のファイル名
void OnStart()
{
if(!FileIsExist(InpFile))
{
Print(InpFile, " が Files フォルダにありません");
return;
}
int h = FileOpen(InpFile, FILE_READ | FILE_CSV | FILE_ANSI, ',');
if(h == INVALID_HANDLE)
{
Print("ファイルを開けません error=", GetLastError());
return;
}
int line = 0;
while(!FileIsEnding(h))
{
string sym = FileReadString(h);
double lots = FileReadNumber(h);
while(!FileIsLineEnding(h) && !FileIsEnding(h)) // 3列目以降があれば読み飛ばす
FileReadString(h);
line++;
if(sym == "") continue;
Print(line, "行目:", sym, " ロット=", DoubleToString(lots, 2));
}
FileClose(h);
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 1行目が見出しの CSV は、ループの前に1行分(列の数だけ FileReadString)読み飛ばします。
注意点
- Excel で保存した CSV は Shift_JIS(ANSI)のことが多いので FILE_ANSI を付けています。UTF-8 の CSV なら FILE_ANSI を外します。












