MQL4で、ファイル入出力が上手くいかないなら、この記事が役に立つかもしれません。
ファイルが読み込めない
EA(MQL4)のファイル入出力で、ハマったポイントがあるので書いておきます。
なぜか、ファイルを読み込めない。書き込めない。
ソースコードは合ってると思うんだけど、どこが間違ってるんだろう?
例えば、CSVファイルを読み込む場合は、こんな感じです。
int fileHandle = FileOpen(fileName, FILE_READ | FILE_CSV);
if(fileHandle != INVALID_HANDLE){
// ファイル最終行まで読み込み
while(FileIsEnding(fileHandle) == false){
// 1行読み込み
string sRow = FileReadString(fileHandle);
}
}
FileClose(fileHandle);
ファイルを読み込めない場合、ソースコードの間違い探しに時間がかかります。

どこが間違ってるんだろう?
合ってると思うんだけど・・・
これソースコードとは、全く違うところが原因だったりします。
フォルダーの場所が原因?
EAを検証する場合、まずテスター検証で動作確認を行います。
実は、EAのテスター検証時と、本番稼働時で、ファイル入出力に使うフォルダーの場所が違います。知ってしまえば簡単なことなんですが、心理的な思い込みもあって、気づくのに時間がかかります。
ソースコードの検証段階で上手く動かない場合、コードが間違ってると思ってしまいがちです。

「テスター検証では違うフォルダーが使われる」
という仕様に気づけないんです。
正しいフォルダーの場所は?
では、フォルダーの場所が、どう違うのか? 正しい場所はどこなのか?
まず、MT4のデータフォルダを開きます。

注目するのは「MQL4」「tester」フォルダーです。
- 実際の稼働時には「MQL4」。
- テスター検証時には「tester」が使用されます。

ファイル入出力に使われるフォルダーは、それぞれの「files」フォルダーになります。
本番稼働時のフォルダー [ (データフォルダ)\MQL4\Files ]

テスター検証時のフォルダー [ (データフォルダ)\tester\files ]

今回ご紹介したのは、僕のPC環境でのフォルダー構成になります。
フォルダーの場所は、MT4バージョンやPC環境によって変わるかもしれませんが、

「テスター検証時はフォルダーの場所が違う」
と覚えておくとハマらないと思います。
ファイル入出力を行う場合は、気をつけましょう。