오류 코드 5004 - 페이지 3

 
RaptorUK :

첨부된 파일이 없습니다. . .

읽으려는 파일이 실제로 존재하는지 확인하셨습니까? 올바른 폴더를 찾아 확인하십시오. . . 한 가지 더, 파일에서 읽기 위해 filewriting() 이라는 함수가 있는 이유는 무엇입니까?


친애하는 RaptorUK,

예, DAT 파일이 MQL4/files 폴더에 있음을 확인할 수 있습니다. 사실, 나는 fileopen이 성공하고 대부분의 시간(90%)이 성공하고 10%가 열리지 않고 5004 오류 코드를 생성하는지 여부를 조건으로 알려 주었습니다.

filewriting() 함수 는 fileopen이 실패할 때 호출됩니다. 그런 다음, 파일 쓰기 기능은 파일을 생성하려고 시도하고(쓰기를 위해 열기) 함수의 끝에서 파일 닫기를 수행합니다.

MQL4\logs 폴더에서 Print() 문의 파일을 첨부했습니다. "파일 선택" 버튼을 클릭했는데 파일 이름이 표시되는 것을 볼 수 있었습니다.

따뜻한 안부,

모닥불

파일:
 
raisingfire :


친애하는 RaptorUK,

예, DAT 파일이 MQL4/files 폴더에 있음을 확인할 수 있습니다. 사실, 나는 fileopen이 성공하고 대부분의 시간(90%)이 성공하고 10%가 열리지 않고 5004 오류 코드를 생성하는지 여부를 조건으로 알려 주었습니다.

filewriting() 함수는 fileopen이 실패할 때 호출됩니다. 그런 다음, 파일 쓰기 기능은 파일을 생성하려고 시도하고(쓰기를 위해 열기) 함수의 끝에서 파일 닫기를 수행합니다.

MQL4\logs 폴더에서 Print() 문의 파일을 첨부했습니다. "파일 선택" 버튼을 클릭했는데 파일 이름이 표시되는 것을 볼 수 있었습니다.

따뜻한 안부,

모닥불

이 파일의 출처는 어디입니까? 무엇을 씁니다?
 
RaptorUK :
이 파일의 출처는 어디입니까? 무엇을 씁니다?

친애하는 RaptorUK,

모든 DAT 파일은 포지션을 열 때마다 특정 지표의 초기 값을 유지하기 위한 임시 파일입니다. 우리는 그것들을 우리 프로그램에서 만들고 사용했습니다.

표준 함수를 사용하여 쓰기 위해 파일을 엽니다.

fhandle=파일열기(mf, FILE_BIN|FILE_WRITE );

임시 파일(DAT)에 쓰는 표준 어레이:

FileWriteArray(핸들, mpara, 0, maxori); // 여기서 mpara는 배열이고 Maxori는 배열의 최대 크기입니다.

표준 파일 닫기 기능:

파일 닫기(핸들);

도와주셔서 감사합니다.


문안 인사,

모닥불

 
raisingfire :

친애하는 RaptorUK,

모든 DAT 파일은 포지션을 열 때마다 특정 지표의 초기 값을 유지하기 위한 임시 파일입니다. 우리는 그것들을 우리 프로그램에서 만들고 사용했습니다.

우리는 표준 함수를 사용하여 쓰기 위해 파일을 엽니다.

fhandle=파일열기(mf, FILE_BIN|FILE_WRITE);

임시 파일(DAT)에 쓰는 표준 어레이:

FileWriteArray(핸들, mpara, 0, maxori); // 여기서 mpara는 배열이고 Maxori는 배열의 최대 크기입니다.

표준 파일 닫기 기능:

파일 닫기(핸들);


좋아, 하지만 당신은 실제로 내 질문에 대답하지 않았습니다. . . 그것들을 읽으려고 하는 동일한 EA에 의해 작성되었습니까? 또는 다른 EA, 스크립트 또는 지표?
 
RaptorUK :

좋아, 하지만 당신은 실제로 내 질문에 대답하지 않았습니다. . . 그것들을 읽으려고 하는 동일한 EA에 의해 작성되었습니까? 또는 다른 EA, 스크립트 또는 지표?


파일 쓰기 기능 은 모두 동일한 EA에 있습니다. 매번 "FILEOPEN"을 발행하고 특정 작업을 수행한 후에는 항상 "FILECLOSE"를 따릅니다. 따라서 열려고 하는 잠긴 파일에 문제가 있다고 생각하지 않습니다.

오래 전에 잠긴 파일을 읽으려고 하는 그런 종류의 문제가 있었습니다. 그리고 MT4는 자동으로 로그 파일에 보고했습니다. 따라서 1~2일 후에는 로그 및 기록 폴더의 크기(수백 MB)가 보고서로 가득 차게 되었습니다. 그런 다음 FILEOPEN을 수행할 때마다 FILECLOSE를 발행합니다. 문제가 해결되었고 로그 및 기록 폴더가 더 이상 커지지 않았습니다. 이제 결합된 로그 및 기록 폴더에는 100KB 미만만 포함됩니다(계속 팝업되는 오류 코드 5004에도 불구하고).


감사해요,

모닥불

 
raisingfire :

파일 쓰기 기능은 모두 동일한 EA에 있습니다. 매번 "FILEOPEN"을 발행하고 특정 작업을 수행한 후에는 항상 "FILECLOSE"를 따릅니다. 따라서 열려고 하는 잠긴 파일에 문제가 있다고 생각하지 않습니다.

오래 전에 잠긴 파일을 읽으려고 하는 그런 종류의 문제가 있었습니다. 그리고 MT4는 자동으로 로그 파일에 보고했습니다. 따라서 1~2일 후에는 로그 및 기록 폴더의 크기(수백 MB)가 보고서로 가득 차게 되었습니다. 그런 다음 FILEOPEN을 수행할 때마다 FILECLOSE를 발행합니다. 문제가 해결되었고 로그 및 기록 폴더가 더 이상 커지지 않았습니다. 이제 결합된 로그 및 기록 폴더에는 100KB 미만만 포함됩니다(계속 팝업되는 오류 코드 5004에도 불구하고).

알겠습니다. 정보 감사합니다. 아이디어가 부족합니다. . . 내가 지금 제안할 수 있는 것은 여기에 게시할 수 있는 문제를 재현하는 테스트 EA를 만들고 Service Desk 티켓 의 일부로 MetaQuotes에 보내고 조사를 요청하는 것입니다.
 
RaptorUK :
알겠습니다. 정보 감사합니다. 아이디어가 부족합니다. . . 내가 지금 제안할 수 있는 것은 여기에 게시할 수 있는 문제를 재현하는 테스트 EA를 만들고 Service Desk 티켓의 일부로 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,


어쨌든 도움과 정보를 주셔서 감사합니다. 말씀해 주신 대로 노력하겠습니다.

다시 한 번, 감사합니다.


문안 인사,



사모예 :

오류 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. 읽고 쓰기 위해 파일을 엽니다. 이제 파일 이 두 번 열렸고 원래 핸들이 손실되었습니다.
  4. ResetLastError 불필요, 문제가 있을 때 GetLastError만 확인
  5. 파일을 세 번 열었고 두 개의 핸들을 잃어버렸습니다.
  6. 다음 루프에서는 파일을 더 많이 엽니다.