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

 
RaptorUK:

ファイルが添付されていないのですが ... ...

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


RaptorUKさんへ。

はい、DATファイルはMQL4/filesというフォルダーにあることが確認できました。実は、fileopenが成功するかどうかの条件をつけたところ、ほとんど(90%)成功し、10%は開かず5004のエラーコードを発生させるということをお知らせしました。

fileopenに失敗するとfilewriting()関数が 呼ばれる。そして、funcition filewritingは、ファイルを作成しようとし(書き込み用にオープン)、関数の最後に、filecloseを実行することになります。

MQL4logsフォルダのPrint()ステートメントからファイルを添付しました。Choose File」ボタンをクリックすると、ファイル名が表示されるのが確認できました。

よろしくお願いします。

レイジングファイア

ファイル:
 
raisingfire:


RaptorUKさんへ。

はい、DATファイルはMQL4/filesというフォルダにあることが確認できました。実は、fileopenが成功するかどうかの条件をつけたところ、ほとんど(90%)成功し、10%失敗して5004のエラーコードを発生させるとの情報があります。

fileopenに失敗するとfilewriting()関数が呼ばれる。そして、funcition filewritingは、ファイルを作成しようとし(書き込み用にオープン)、関数の最後に、filecloseを実行することになります。

MQL4logsフォルダのPrint()ステートメントからファイルを添付しました。Choose File」ボタンをクリックすると、ファイル名が表示されるのが確認できました。

よろしくお願いします。

レイジングファイア

これらのファイルはどこから来たのか、何が書いているのか?
 
RaptorUK:
これらのファイルはどこから来たのか、何がそれを書いているのか?

RaptorUK様。

DATファイルはすべて、ポジションを開くたびに特定の指標の初期値を保持するための一時的なファイルであることを意味しています。私たちはそれらを作成し、私たちのプログラムで使用しています。

私たちは、書き込みのためにファイルを開くために標準的な関数を使用しています。

fhandle=FileOpen(mf,FILE_BIN|FILE_WRITE);

一時ファイル(DAT)への標準的な配列書き込み :

FileWriteArray(fhandle, mpara, 0, maxori); // mparaは配列,Maxoriは配列の最大サイズ.

標準的なファイルクローズ関数です。

FileClose(fhandle)です。

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


Regards,

ライジングファイア

 
raisingfire:

RaptorUKさんへ。

DATファイルは全て、ポジションを開くたびに特定の指標の初期値を保持するための一時的なファイルということです。私たちは、それらを作成し、私たちのプログラムで使用しています。

書き込みのためにファイルを開くには、標準の関数を使用しています。

fhandle=FileOpen(mf, FILE_BIN|FILE_WRITE);

一時ファイル(DAT)への標準的な配列書き込み :

FileWriteArray(fhandle, mpara, 0, maxori); // mparaは配列,Maxoriは配列の最大サイズ.

標準的なファイルクローズ関数です。

FileClose(fhandle)です。


しかし、あなたは私の質問に実際に答えていません ... ... それらは、それらを読もうとしている同じEAによって書かれていますか? それとも、別のEA、スクリプトまたはインジケーターですか?
 
RaptorUK:

しかし、あなたは私の質問に実際に答えていません ... ... それらは、それらを読もうとしている同じEAによって書かれていますか? それとも、別のEA、スクリプトまたはインジケーターですか?


ファイル書き込み機能は、すべて同じEAの中にあります。FILEOPEN "を発行するたびに、その後に必ず "FILECLOSE "を発行しています。ですから、ロックされたファイルを開こうとすることに問題があるとは思えません。

昔、ロックされたファイルを読み込もうとしたときに、そのような問題が発生したことがあります。そして、MT4は自動的にログファイルにそれを報告しました。そのため、1~2日経つと、Logsやhistoryのフォルダが数百Mbyteの巨大なサイズになり、その報告で一杯になってしまいます。そこで、FILEOPENをするたびにFILECLOSEを発行。問題は解決し、ログと履歴のフォルダーが巨大化することはなくなりました。今では、ログと履歴フォルダを合わせても100Kバイト以下しかありません(エラーコード5004が出続けているにもかかわらず)。


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

Raisingfire

 
raisingfire:

Filewriting機能は、すべて同じEAにあります。FILEOPEN "を発行するたびに、それを使ってあるタスクを実行した後、必ず "FILECLOSE "でフォローするようにしています。ですから、オープンしようとするロックされたファイルに問題があるとは思えません。

昔、ロックされたファイルを読み込もうとすると、そのような問題が発生したことがあります。そして、MT4は自動的にそれをログファイルに報告しました。そのため、1~2日後にはLogsやhistoryフォルダが数百Mbyteの巨大なサイズになり、その報告でいっぱいになってしまいました。そこで、FILEOPENをするたびにFILECLOSEを発行。問題は解決し、ログと履歴のフォルダーが巨大化することはなくなりました。今では、ログと履歴のフォルダを合わせても100Kバイト以下しかありません(エラーコード5004が出続けているにもかかわらず)。

OK 情報をありがとうございます。 私が今提案できるのは、問題を再現するテストEAを作成してここに投稿し、サービスデスクのチケットの 一部としてMetaQuotesに送り、調査するよう依頼することのみです。
 
RaptorUK:
情報ありがとうございます。 今できることは、問題を再現するテストEAを作成して、ここに投稿し、サービスデスクのチケットの一部としてMetaQuotesに送り、調査を依頼することです。


RaptorUKさんへ。


とにかくすべてのあなたの助けと情報に感謝します。 教えていただいたことをやってみようと思います。

もう一度、ありがとうございました。


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

 
//+------------------------------------------------------------------+
//| expert count strategy open position function  (closedPos)          |
//+------------------------------------------------------------------+
void closedPos() {  

   int file=FileOpen("hist0935.csv",FILE_WRITE|FILE_CSV);
   
  
      
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {

int file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);

ResetLastError();
file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);


      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); 

  if (file != INVALID_HANDLE){    

   PrintFormat("%s file is available for writing",file);
  
  
     
      FileWrite(file,OrderTicket(),OrderClosePrice(),OrderCloseTime());
      
      //--- close the file
     Print("error="+GetLastError());
      FileClose(file);
      PrintFormat("%s file is closed",file);
       
  }else{
      Alert("hist0935 Events File Error.",GetLastError());
   }
  
   }        
 // return();
}
 
raisingfire:

RaptorUKさんへ。


とにかくたくさんのヘルプと情報をありがとうございました。教えていただいたことをやってみます。

もう一度、ありがとうございました。


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



samoye:

5004エラーの解決策はありますか?ファイルに書き込もうとすると、同じエラーメッセージが表示されます。

//+------------------------------------------------------------------+
//| expert count strategy open position function  (openPos)          |
//+------------------------------------------------------------------+
void closedPos() {  

   int file=FileOpen("hist0935.csv",FILE_WRITE|FILE_CSV);
   
  
      
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {

int file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);

ResetLastError();
file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);


      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); 
//Print("OrderClosePrice()= " +OrderClosePrice()+"OrderCloseTime()= " + OrderCloseTime()+"OrderComment()= " + OrderComment()+ "OrderCommission()= " +OrderCommission()+ "OrderExpiration()= " +OrderExpiration()+ "OrderLots()= " +OrderLots()+ "OrderMagicNumber()= " +OrderMagicNumber()+ "OrderOpenPrice()= " +OrderOpenPrice()+ "OrderOpenTime()= " +OrderOpenTime()+ "OrderProfit()= " +OrderProfit()+ "OrderStopLoss()= " +OrderStopLoss()+ "OrderSwap()= " +OrderSwap()+ "OrderSymbol()= " +OrderSymbol()+ "OrderTakeProfit()= " +OrderTakeProfit()+ "OrderTicket()= " +OrderTicket()+ "OrderType()= " +OrderType() ); 
 

  if (file != INVALID_HANDLE){    

   PrintFormat("%s file is available for writing",file);
  
   
      //FileWrite(file,OrderClosePrice(),OrderCloseTime(), OrderComment(),OrderCommission(),OrderExpiration(),OrderLots(),OrderMagicNumber(),OrderOpenPrice(),OrderOpenTime(),OrderProfit(),OrderStopLoss(),OrderSwap(),OrderSymbol(),OrderTakeProfit(),OrderTicket(),OrderType());
     
      FileWrite(file,OrderTicket(),OrderClosePrice(),OrderCloseTime());
      
      //--- close the file
     Print("error="+GetLastError());
      FileClose(file);
      PrintFormat("%s file is closed",file);
       
  }else{
      Alert("hist0935 Events File Error.",GetLastError());
   }
  
   }        
 // return();
}

私はビルド765を使用しています。

あなたの助けは非常にありがたいです。

 
   int file=FileOpen("hist0935.csv",FILE_WRITE|FILE_CSV);  
      
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {

int file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);
                                                                
ResetLastError();                                               
file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);    

  1. 書き込みのためにファイルを開くと、長さが0になる。
  2. ループ開始
  3. 読み書きのためにファイルを開く。このとき、ファイルは2回開か れ、元のハンドルは失われています。
  4. ResetLastErrorは不要で、問題が発生したときだけGetLastErrorを見ます。
  5. ファイルを3回オープンし、2つのハンドルを失いました。
  6. 次のループでは、さらにファイルを開く。