【MQL4】FileOpenでファイルが読み込めない問題。FileOpenの罠

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環境によって変わるかもしれませんが、

「テスター検証時はフォルダーの場所が違う」
と覚えておくとハマらないと思います。

ファイル入出力を行う場合は、気をつけましょう。

タイトルとURLをコピーしました