오류 코드 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);


파일이 올바른 디렉토리에 있는지 확인했습니까? 더 이상 전문가\파일 에 없어야 합니다. . . . MQL4\Files 에 있어야 합니다. 파일 > 데이터 폴더 열기 를 클릭하여 MT4에서 올바른 MQL4 폴더를 찾을 수 있습니다.

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

    Orderticket 은 int이고 StringLen 은 문자열을 예상합니다.

    오더티켓
    문자열렌 StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    123456 6 ("123456", -1, 7) 잘못된

    따라서 테스터에서와 같이 자릿수 < 7이면 호출이 실패합니다. > 7개의 선행 숫자가 제거됩니까?

    노력하다 IntegerToString ( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. MetaTrader 4 Build 600 이상에는 전문가 \ 파일 데이터 구조가 없습니다. - MQL4 기사
 
RaptorUK :

다음을 추가하고 출력이 무엇인지 다시 보고할 수 있습니까? . .


파일이 올바른 디렉토리에 있는지 확인했습니까? 더 이상 전문가\파일 에 없어야 합니다. . . . MQL4\Files 에 있어야 합니다. 파일 > 데이터 폴더 열기 를 클릭하여 MT4에서 올바른 MQL4 폴더를 찾을 수 있습니다.


랩터영국 :

다음을 추가하고 출력이 무엇인지 다시 보고할 수 있습니까? . .


파일이 올바른 디렉토리에 있는지 확인했습니까? 더 이상 전문가\파일 에 없어야 합니다. . . . MQL4\Files 에 있어야 합니다. 파일 > 데이터 폴더 열기 를 클릭하여 MT4에서 올바른 MQL4 폴더를 찾을 수 있습니다.

친애하는 RaptorUK,

여기에 Print 문 다음의 로그에서 파일을 첨부했습니다.

빌드 610에서 폴더 구조가 변경된 것으로 알고 있습니다. 하지만 기본 폴더를 사용하기 때문에 터미널 클라이언트 프로그램에서 자동으로 구조를 조정해야 합니다.

도와주셔서 감사합니다.

 
WHRoeder :
  1. Orderticket 은 int이고 StringLen 은 문자열을 예상합니다.

    오더티켓
    문자열렌 StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    123456 6 ("123456", -1, 7) 잘못된

    따라서 테스터에서와 같이 자릿수 < 7이면 호출이 실패합니다. > 7개의 선행 숫자가 제거됩니까?

    노력하다 IntegerToString ( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. MetaTrader 4 Build 600 이상에는 전문가 \ 파일 데이터 구조가 없습니다. - MQL4 기사


친애하는 WHRoder,

나는 당신의 제안을 시도했지만 여전히 같은 오류 코드를 제공합니다: 5004. 당신은 orderticket이 int를 반환한다는 좋은 정보를 지적했습니다. 그러나 이전 클라이언트 터미널 프로그램(빌드 580 무언가)은 컴파일 오류나 런타임 오류를 반환하지 않았습니다. 이 오류 코드 5004는 앞서 언급했듯이 내 EA 성능에 전혀 영향을 미치지 않는 것 같습니다. 내 EA는 여전히 올바른 조건에서 위치를 열고 닫을 수 있습니다.

특정 디렉토리를 지정하지 않고 기본 디렉토리를 사용합니다. 파일이 있는 것을 볼 수 있지만 여전히 파일 열기에 실패합니다. 혼란을 더하기 위해 항상 실패하지는 않습니다. 대부분의 경우 fileopen에 성공합니다. fileopen에 성공하는지 테스트하기 위해 다른 조건을 추가했습니다. 성공률은 약 10:1 비율이며 1은 fileopen이 실패합니다.

어쨌든 도와주셔서 감사합니다.

 

어떤 버전을 사용하고 있습니까

및 아마도 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' 폴더가 예전에서 변경되었습니다. '기본'이라고 말할 때 이전 전문가/파일이 아닌 Mql4/files..의 새 '기본' 폴더에 대해 이야기하고 있다고 가정해야 합니다.

위의 제안을 따르고 파일>데이터 폴더 열기를 사용하고 플랫폼에서 사용 중인 실제 위치를 확인했는지 확인합니다. 제안된 대로 UAC를 사용하는 경우 사용자/앱 데이터에서 끝날 수 있습니다. 이를 알고 있고 필요한 경우 경로를 적절하게 조정하는 한 괜찮습니다.

분명히 제대로 거래되고 있다면 코드의 이 부분은 단지 기록 유지 및 로깅 을 위한 것이며 전략의 필수적인 부분은 아닙니다. 이러한 제안 중 일부가 오류 없이 실행되는 데 도움이 되기를 바랍니다. 포럼에 오신 것을 환영합니다!

핍핍...짐단디

 
qjol :

어떤 버전을 사용하고 있습니까

및 아마도 UAC 문제


현재 사용 중인 클라이언트 터미널은 빌드 610입니다.
 
Jimdandy :

WHRoeder가 위에서 말했듯이 .. 테스터를 사용 중이고 최소 7자리가 포함된 티켓 번호를 사용하지 않는 경우 6 빼기 7(ticketString-7) 또는 -1에서 시작하는 하위 문자열로 찾도록 요청하는 것입니다. 위치 .. 떨어질 것입니다. 또한 '기본' 폴더를 언급했습니다.

'default' 폴더가 예전에서 변경되었습니다. '기본'이라고 말할 때 이전 전문가/파일이 아닌 Mql4/files..의 새 '기본' 폴더에 대해 이야기하고 있다고 가정해야 합니다.

위의 제안을 따르고 파일>데이터 폴더 열기를 사용하고 플랫폼에서 사용 중인 실제 위치를 확인했는지 확인합니다. 제안된 대로 UAC를 사용하는 경우 사용자/앱 데이터에서 끝날 수 있습니다. 이를 알고 있고 필요한 경우 경로를 적절하게 조정하는 한 괜찮습니다.

분명히 제대로 거래되고 있다면 코드의 이 부분은 단지 기록 유지 및 로깅을 위한 것이며 전략의 필수적인 부분은 아닙니다. 이러한 제안 중 일부가 오류 없이 실행되는 데 도움이 되기를 바랍니다. 포럼에 오신 것을 환영합니다!

핍핍...짐단디


WHRoeder에 답장을 보내면서 그의 제안을 따랐지만 여전히 동일한 오류 코드 5004가 표시됩니다.

기본 폴더의 경우 빌드 610에서 폴더 구조가 변경되었음을 알고 있습니다. 내 EA를 다시 컴파일했으며 고유한 폴더를 지정하지 않았습니다. 그래서 EA가 클라이언트 터미널 기본 폴더에서 DAT 파일을 생성하고 찾을 것이라고 가정했습니다. 그리고 대부분의 경우 FILEOPEN이 성공하는 것이 확인된다. 같은 문장의 10%만 실패합니다. (나는 성공 여부를 테스트하기 위해 간단한 if 문을 사용하고 있습니다).

건배,

 
raisingfire :

친애하는 RaptorUK,

여기에 Print 문 다음의 로그에서 파일을 첨부했습니다.

빌드 610에서 폴더 구조가 변경된 것으로 알고 있습니다. 하지만 기본 폴더를 사용하기 때문에 터미널 클라이언트 프로그램에서 자동으로 구조를 조정해야 합니다.

도와주셔서 감사합니다.

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

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