TimeCurrent() 및 iTime() 버그/문제 - 페이지 2

 
RaptorUK :
문제는 표시기에 대해 처음 start() 가 호출될 때 새 틱의 결과가 아닐 수 있다는 것입니다. . . 이 경우 TimeCurrent()는 잘못된 시간을 보고합니다. 나는 이것을 확인하지 않았다. . .

이 경우 첫 번째 눈금을 무시합니다. . . 틱 2부터 정상적으로 계속합니다.

예, 이것이 제가 말하고자 하는 바입니다.
 
그것은 지표입니다. 왜 TimeCurrent가 무엇인지 신경쓰세요. for 표시기 계산 루프를 수행하고 막대를 그립니다. TimeCurrent를 보지 말고 Bid를 보지 마십시오.
 
나는 GMT와 일치하는 차트에 특정 시간을 표시하고 있으므로 MT4 서버 시간 과 GMT 사이의 오프셋을 얻으려고 할 때 매우 중요합니다.
 

Paul_B :
I'm plotting certain times on a chart which match to GMT, so it matters a great deal when trying to get the offset between MT4 server time and GMT.

<g> 귀하는 아직 이 포럼의 문화에 적응하지 못한 것 같습니다. 포럼의 중재자 및 기타 장기 사용자의 응답 순서는 항상 "잘못된 일을 하고 있습니다" 다음에 "왜 그렇게 하시겠습니까?"입니다. 당신이 뭔가 잘못하고 있지 않다는 것이 밝혀졌을 때.

내가 너라면 IsConnected()가 false이면 start() 호출을 종료할 것입니다. 또는 정적 변수에서 틱 수를 유지하고 틱 #1을 무시할 수 있지만 정상적인 상황에서는 불필요하게 시작이 지연됩니다.

 
입력 cyclops993에 감사드립니다. 현재 작동하고 있지만 내가 가진 것은 이상적인 솔루션이나 특히 강력한 것처럼 보이지 않습니다. IsConnected()를 조금 더 살펴보겠습니다.
 
Paul_B : 저는 GMT와 일치하는 차트에 특정 시간을 표시하고 있으므로 MT4 서버 시간과 GMT 사이의 오프셋을 구하려고 할 때 매우 중요합니다.
이제 우리는 그 이유를 이해합니다. (OP에서 자신을 설명하지 않은 이유는 무엇입니까?) 정확히 내 코드 와 같습니다.
      nextAutoUpdate = timeSrv + HR2400;
       if (Srvr_To_UTC_Auto) if (
         IsDllsAllowed()){                             // Complained @ init
         int       srvrToUTC         = LocalTimeToUTC() - TimeCurrent () ;
         double    nearestHalfHour   = MathRound (srvrToUTC / 1800 .);
         Srvr_To_UTC_Hours          = nearestHalfHour / 2 .; // Update external
      }

나는 두 번째 RaptorUK의 제안을 표시할 것입니다. 첫 번째 눈금을 무시하고 두 번째 눈금의 모든 막대를 업데이트합니다.

또한 완전히 예상치 못한 것은 아닙니다. 표시기가 잠을 잘 수 없기 때문에 EA가 iCustom을 통해 초기화에서 표시기를 로드하면 표시기가 초기화 및 시작을 실행할 때까지 호출에서 버퍼 값을 반환할 수 없습니다.

 
Paul_B :
입력 cyclops993에 감사드립니다. 현재 작동하고 있지만 내가 가진 것은 이상적인 솔루션이나 특히 강력한 것처럼 보이지 않습니다. IsConnected()를 조금 더 살펴보겠습니다.

나는 당신이 선택의 여지가 많이 있다고 생각하지 않습니다. MT4는 오프라인 차트에 표시기를 채우고 연결이 설정될 때까지 기다리지 않고 MT4가 로드되는 즉시 차트에 표시기를 (재)표시하기를 더 일반적으로 원하기 때문에 start()에 대한 더미 호출을 생성합니다.

제대로 설정된 연결과 유효한 TimeCurrent()가 있는지 확실하게 하려면 AccountNumber() != 0 및 AccountBalance() > 0을 찾을 수도 있습니다. 또는 두 번째 틱을 기다릴 수도 있습니다. 유동성이 부족한 기호에 대한 몇 초 지연 비용.

 

감사합니다. 두 번째 틱이 수신될 때까지 기다리도록 표시기를 프로그래밍하겠습니다.

덧붙여서, 방금 IsConnected() 가능성을 탐색했지만 IsConnected()가 true로 보고된 경우에도 여전히 "잘못된" TimeCurrent()가 발생했습니다.

 
cyclops993 :

<g> 귀하는 아직 이 포럼의 문화에 적응하지 못한 것 같습니다. 포럼의 중재자 및 기타 장기 사용자의 응답 순서는 항상 "잘못된 일을 하고 있습니다" 다음에 "왜 그렇게 하시겠습니까?"입니다. 당신이 뭔가 잘못하고 있지 않다는 것이 밝혀졌을 때.

내가 너라면 IsConnected()가 false이면 start() 호출을 종료할 것입니다. 또는 정적 변수에서 틱 수를 유지하고 틱 #1을 무시할 수 있지만 정상적인 상황에서는 불필요하게 시작이 지연됩니다.

사용자가 문제를 설명하기 위해 테스트 코드를 제공하지 않으면 특정 도움말을 제공하기가 약간 어려우며 종종 가장 좋은 가정은 코드의 오류입니다. . . 아마도 당신은 모든 질문과 도움 요청에 대한 답변을 인계받아야 할 것입니다. 그렇게 하면 모든 문제가 해결될 것입니다. 그러면 도움을 주려는 사람들을 파헤칠 필요가 없습니다. . .
 
RaptorUK :
사용자가 문제를 시연하기 위해 테스트 코드를 제공하지 않는 경우 [...]

OP에 잘못되거나 누락 된 것은 없었습니다. Paul_B는 MT4 문서에서 완벽하게 합리적으로 start()가 새 틱에 대한 응답으로만 호출된다고 가정하고 있었습니다. ( 그가 TimeCurrent() 를 확인 하길 원했는지는 차이가 없으며 실제로 우리의 관심사가 아닙니다.)

이 영역에서 매뉴얼이 분명히 부족하다는 사실에도 불구하고 귀하의 응답은 기본적으로 RTFM의 좋은 버전이었습니다. MT4 문서의 품질은 꽤 좋습니다.] Angevoyageur의 반응은 이것을 소란이라고 설명하는 것이었으며, 이는 아무리 온화하더라도 모든 종류의 MT4에 대한 비판에 대해 병리학적으로 민감한 반응 패턴의 일부인 것 같습니다. 그런 다음 WHRoeder는 "당신은 그렇게 하고 싶지 않습니다"라고 말했고 Paul_B는 GMT 오프셋을 계산하는 방법을 이미 알고 있었기 때문에 분명히 관련이 없는 일부 코드를 복사하여 붙여넣었습니다.