エラーコード5004 - ページ 2

 
mfilename = StringSubstr(OrderTicket(),StringLen(OrderTicket())-7,7) + ".DAT";

fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);

if(fhandle<=0)

{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());

filewriting(mfilename); }

        if(fhandle>0)

FileClose(fhandle);
 
raisingfire:

これは、ファイルを開いたり閉じたりするセクションです。

DLL呼び出しではなく、MQL4標準のファイル関数を使用しています。

以下を追加して、出力がどうなったか報告してもらえますか?

mfilename = StringSubstr(OrderTicket(),StringLen(OrderTicket())-7,7) + ".DAT";

Print("Filename:  ", mfilename);    // <--- add this line

fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);

if(fhandle<=0)

{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());

filewriting(mfilename); }

        if(fhandle>0)

FileClose(fhandle);


ファイルが正しい ディレクトリに存在することを確認しましたか? それはもはやexpertsfilesに あるべきではありません。MT4でFile > Open data Folderを クリックすると、正しいMQL4 フォルダを見つけることができます。

 
  1. mfilename = StringSubstr(OrderTicket(),StringLen(OrderTicket())-7,7) + ".DAT";

    Orderticketは int型,StringLenは 文字列を想定しています。

    オーダーチケット
    文字列Len 文字列サブストリング
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) は無効です。

    ということは、桁数<7(テスターのように)の場合、呼び出しに失敗する。 > 7の先頭桁は削除される?

    TryIntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. MetaTrader 4 Build 600以降ではexpertes femmeの データ構造が存在しない - MQL4 Articles
 
RaptorUK:

あなたは以下を追加し、出力が何であるかを報告することができますお願いします... ...


ファイルが正しい ディレクトリに存在することを確認しましたか? それはもはやexpertsfilesに あるべきではありません。MT4でFile > Open data Folderを クリックすると、正しいMQL4 フォルダを見つけることができます。


RaptorUK です。

あなたは以下を追加し、出力が喜ばれるかを報告することができます... ...


ファイルが正しい ディレクトリに存在することを確認しましたか? it no longer should be inexperts ✎files.MT4からFile > Open data Folderを クリックすると、正しいMQL4 フォルダが見つかります。

RaptorUKさんへ。

プリントステートメントに続くログのファイルを添付します。

ビルド610でフォルダ構成が変更されたことは承知しています。しかし、それなら、私はデフォルトのフォルダを使用しているので、ターミナルクライアントプログラムが自動的に調整するはずです。

ご協力ありがとうございました。

 
WHRoeder:
  1. Orderticketは int型,StringLenは 文字列を想定しています。

    オーダーチケット
    文字列Len 文字列サブストリング
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    1234566("123456", -1, 7) は無効です。

    ということは、桁数<7(テスターのように)の場合、呼び出しに失敗する。 > 7の先頭桁は削除される?

    TryIntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. MetaTrader 4 Build 600 and Higherではexpertasfiles データ構造がありません - MQL4 Articles


WHRoderさんへ。

あなたの提案を試しましたが、まだ同じエラーコードが表示されます。5004.あなたは、orderticketがintを返すという良い情報を指摘しました。しかし、古いクライアントターミナルプログラム(ビルド580何か)は、コンパイルエラーやランタイムエラーを返しませんでした。 このエラーコード5004は、前にも述べたように、私のEAの性能には全く影響を与えないようです。私のEAは依然として正しい条件でポジションを開いたり閉じたりできます。

私はデフォルトのディレクトリを使用しており、特定のディレクトリは指定していません。ファイルがあることは確認できましたが、ファイルオープンに失敗しています。さらに混乱させることに、それは常に失敗するわけではありません。ほとんどの場合、それはファイルオープンに成功します。私はそれがfileopenに成功したかどうかをテストするために別の条件を追加しました。成功率は10:1の割合で、1がファイルオープンに失敗した場合です。

とにかく、ありがとうございました。

 

お使いのバージョン

UACの問題かもしれません。

 
//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);

WHRoeder が言ったように、もしあなたがテスターを使用していて、少なくとも7桁の数字を含むチケット番号を使用していないなら、6マイナス7(ticketString-7)か-1の位置で始まる部分文字列を探すように頼んでいることになり、それで落ちることになります。また、「default」フォルダについても言及されています。

default'フォルダは以前とは変わっています。default」というのは、Mql4/filesにある新しい「default」フォルダのことで、以前のexperts/filesのことではないと、私は推測しなければなりません。

上の提案に従って、ファイル>データフォルダを開くで、あなたのプラットフォームが使用している実際の場所を確認してください。UACを使用している場合、users/appdataにある可能性があります。

もし適切に取引されているのであれば、この部分は記録とログの ためだけのもので、ストラテジーの不可欠な部分ではないようです。これらの提案のいくつかが、エラーなしで動作させるのに役立つことを願っています...フォーラムへようこそ

PipPip...Jimdandyさん

 
qjol:

お使いのバージョン

UACの問題かもしれません。


現在使用しているクライアント端末は、ビルド610です。
 
Jimdandy:

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文を使っています)。

ありがとうございました。

 
raisingfire:

RaptorUKさんへ。

ここに、Print文に続くログのファイルを添付します。

ビルド610でフォルダ構成が変更されたことは承知しています。しかし、それならば、私はデフォルトのフォルダを使用しているので、ターミナルクライアントプログラムが自動的に調整するはずです。

ご教授ありがとうございました。

添付ファイルがなかったのですが.

読み込もうとしているファイルが実際に存在するか確認しましたか? 正しいフォルダを見て確認してください. もう一つ,なぜファイルから読み込む ためにfilewriting() という関数が あるのですか?