//you are looking for a word in a number.... twice... It's like asking how many ounces are in a foot. Wrong datatype.//Change your ticket number to a string.string ticketString=IntegerToString(OrderTicket());
//now your ticket number is a string.
mfilename = StringSubstr(ticketString,StringLen(ticketString)-7,7) + ".DAT";
//now you are asking for the substring and length of a string instead of an integer.
fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);
if(fhandle == -1)
//if you are getting an INVALID HANDLE that is -1 you could also just say <0 instead of <=0 this may be why it only fails some times.
{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());
filewriting(mfilename); }
if(fhandle>0)
FileClose(fhandle);
これは、ファイルを開いたり閉じたりするセクションです。
DLL呼び出しではなく、MQL4標準のファイル関数を使用しています。
以下を追加して、出力がどうなったか報告してもらえますか?
ファイルが正しい ディレクトリに存在することを確認しましたか? それはもはやexpertsfilesに あるべきではありません。MT4でFile > Open data Folderを クリックすると、正しいMQL4 フォルダを見つけることができます。
Orderticketは int型,StringLenは 文字列を想定しています。
ということは、桁数<7(テスターのように)の場合、呼び出しに失敗する。 > 7の先頭桁は削除される?
TryIntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT
あなたは以下を追加し、出力が何であるかを報告することができますお願いします... ...
ファイルが正しい ディレクトリに存在することを確認しましたか? それはもはやexpertsfilesに あるべきではありません。MT4でFile > Open data Folderを クリックすると、正しいMQL4 フォルダを見つけることができます。
あなたは以下を追加し、出力が喜ばれるかを報告することができます... ...
ファイルが正しい ディレクトリに存在することを確認しましたか? it no longer should be inexperts ✎files.MT4からFile > Open data Folderを クリックすると、正しいMQL4 フォルダが見つかります。
RaptorUKさんへ。
プリントステートメントに続くログのファイルを添付します。
ビルド610でフォルダ構成が変更されたことは承知しています。しかし、それなら、私はデフォルトのフォルダを使用しているので、ターミナルクライアントプログラムが自動的に調整するはずです。
ご協力ありがとうございました。
Orderticketは int型,StringLenは 文字列を想定しています。
ということは、桁数<7(テスターのように)の場合、呼び出しに失敗する。 > 7の先頭桁は削除される?
TryIntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT
WHRoderさんへ。
あなたの提案を試しましたが、まだ同じエラーコードが表示されます。5004.あなたは、orderticketがintを返すという良い情報を指摘しました。しかし、古いクライアントターミナルプログラム(ビルド580何か)は、コンパイルエラーやランタイムエラーを返しませんでした。 このエラーコード5004は、前にも述べたように、私のEAの性能には全く影響を与えないようです。私のEAは依然として正しい条件でポジションを開いたり閉じたりできます。
私はデフォルトのディレクトリを使用しており、特定のディレクトリは指定していません。ファイルがあることは確認できましたが、ファイルオープンに失敗しています。さらに混乱させることに、それは常に失敗するわけではありません。ほとんどの場合、それはファイルオープンに成功します。私はそれがfileopenに成功したかどうかをテストするために別の条件を追加しました。成功率は10:1の割合で、1がファイルオープンに失敗した場合です。
とにかく、ありがとうございました。
お使いのバージョン
UACの問題かもしれません。
WHRoeder が言ったように、もしあなたがテスターを使用していて、少なくとも7桁の数字を含むチケット番号を使用していないなら、6マイナス7(ticketString-7)か-1の位置で始まる部分文字列を探すように頼んでいることになり、それで落ちることになります。また、「default」フォルダについても言及されています。
default'フォルダは以前とは変わっています。default」というのは、Mql4/filesにある新しい「default」フォルダのことで、以前のexperts/filesのことではないと、私は推測しなければなりません。
上の提案に従って、ファイル>データフォルダを開くで、あなたのプラットフォームが使用している実際の場所を確認してください。UACを使用している場合、users/appdataにある可能性があります。
もし適切に取引されているのであれば、この部分は記録とログの ためだけのもので、ストラテジーの不可欠な部分ではないようです。これらの提案のいくつかが、エラーなしで動作させるのに役立つことを願っています...フォーラムへようこそ
PipPip...Jimdandyさん
お使いのバージョン
UACの問題かもしれません。
現在使用しているクライアント端末は、ビルド610です。
WHRoeder が言ったように、もしあなたがテスターを使用していて、少なくとも7桁の数字を含むチケット番号を使用していないなら、6マイナス7(ticketString-7)か-1の位置で始まる部分文字列を探すように頼んでいることになり、それは落ちることになります。また、「default」フォルダについても言及されています。
default'フォルダは以前とは変わっています。default」というのは、Mql4/filesにある新しい「default」フォルダのことで、以前のexperts/filesのことではないと、私は推測しなければなりません。
上の提案に従って、ファイル>データフォルダを開くで、あなたのプラットフォームが使用している実際の場所を確認してください。UACを使用している場合、users/appdataにある可能性があります。
もし適切に取引されているのであれば、この部分は記録とログのためだけのもので、ストラテジーの不可欠な部分ではないようです。これらの提案のいくつかが、エラーなしで動作させるのに役立つことを願っています...フォーラムへようこそ
PipPip...Jimdandyさん
WHRoederに返信したように、彼の提案に従いましたが、まだ同じエラーコード 5004が表示されます。
デフォルトフォルダについては、ビルド610でフォルダ構造が変更されたことは承知しています。自分のEAを再コンパイルしましたが、自分のフォルダを指定したことはありません。そのため、EAがクライアント端末のデフォルトフォルダにDATファイルを作成し、探してくれるものと思っていました。そして、ほとんどの場合、FILEOPENが成功することが確認されました。同じ文でも失敗するのは10%だけです。(成功するかどうかをテストするために簡単なif文を使っています)。
ありがとうございました。
RaptorUKさんへ。
ここに、Print文に続くログのファイルを添付します。
ビルド610でフォルダ構成が変更されたことは承知しています。しかし、それならば、私はデフォルトのフォルダを使用しているので、ターミナルクライアントプログラムが自動的に調整するはずです。
ご教授ありがとうございました。
添付ファイルがなかったのですが.
読み込もうとしているファイルが実際に存在するか確認しましたか? 正しいフォルダを見て確認してください. もう一つ,なぜファイルから読み込む ためにfilewriting() という関数が あるのですか?