안녕하세요 여러분,
흥미로운 문제/버그를 발견하고 이전에 식별되었는지 또는 브로커 특정인지 확실하지 않습니다.
일부 표시기 코드에서 다음을 사용하고 시작 시 표시기를 실행하고 MT4를 처음 실행할 때 값을 기록해 두십시오(MT4가 다시 시작하기 전에 최소 10분 동안 실행되지 않았는지 확인하십시오).
반환된 시간은 실제로 MT4가 마지막으로 실행된 시간임을 알 수 있습니다.
이 문제를 해결하기 위해 내 코드에 지연을 도입해야 했습니다. 이는 표시기에 적합하지 않습니다.
누구든지 더 웅변적인 솔루션이 있는지 궁금합니다. 매번 시작할 때 정확한 MT4 서버 시간이 반환되지 않는 것이 이상적입니다.
문안 인사
폴비
이것 ??
Print (TimeToStr( TimeCurrent (), TIME_DATE | TIME_SECONDS ));
안녕하세요 deVries님,
TIME_SECONDS도 사용할 수 있습니다. 코드가 init{}에 있거나 start{} 시작 부분에 있는 한 별로 중요하지 않습니다.
요점은 MT4가 마지막으로 실행된 시간을 알 수 있다는 것입니다. 이는 잠재적으로 몇 시간 또는 며칠 전일 수 있습니다.
안녕하세요 여러분,
흥미로운 문제/버그를 발견하고 이전에 식별되었는지 또는 브로커 특정인지 확실하지 않습니다.
일부 표시기 코드에서 다음을 사용하고 시작 시 표시기를 실행하고 MT4를 처음 실행할 때 값을 기록해 두십시오(MT4가 다시 시작하기 전에 최소 10분 동안 실행되지 않았는지 확인하십시오).
반환된 시간은 실제로 MT4가 마지막으로 실행된 시간임을 알 수 있습니다.
이 문제를 해결하기 위해 내 코드에 지연을 도입해야 했습니다. 이는 표시기에 적합하지 않습니다.
누구든지 더 웅변적인 솔루션이 있는지 궁금합니다. 매번 시작할 때 정확한 MT4 서버 시간이 반환되지 않는 것이 이상적입니다.
문안 인사
폴비
이 점에 대한 문서가 100% 명확하지 않습니까?
그렇지 않습니다.
EA와 표시기 사이에는 문서에서 다루지 않은 중요한 차이점이 있습니다. EA는 브로커 연결과 새 틱이 있는 경우에만 start()에 대한 호출을 받는 반면 표시기는 항상 시작 전 또는 없이 초기 호출을 받습니다. 브로커 연결이 설정되고 있습니다. 따라서 TimeCurrent()는 EA와 지표에서 다른 의미를 가질 수 있습니다.
표시기의 TimeCurrent()에 대해 확실히 새로 고친 값을 원하는 경우 IsConnected()를 사용하여 TimeCurrent()가 이전 세션에서 마지막으로 알려진 시간을 참조할 수 있는지 여부를 확인할 수 있습니다.
추가 요점으로 나는 시도했습니다.
https://docs.mql4.com/windows/RefreshRates
TimeCurrent()를 호출하기 전에 차이가 없었습니다. 확실히 명심해야 할 사항입니다.
MT4 서버 시간과 GMT 간의 오프셋을 가져오기 위해 일부 코드의 일부로 사용하고 있으며 후속 계산을 던지고 있습니다.
그렇지 않습니다.
EA와 표시기 사이에는 문서에서 다루지 않은 중요한 차이점이 있습니다. EA는 브로커 연결과 새 틱이 있는 경우에만 start()에 대한 호출을 받는 반면 표시기는 항상 시작 전 또는 없이 초기 호출을 받습니다. 브로커 연결이 설정되고 있습니다. 따라서 TimeCurrent()는 EA와 지표에서 다른 의미를 가질 수 있습니다.
문서에서 말하는 내용을 염두에 두고 관련성이 있다고 생각하지 않습니다. . . 새 틱이 도착하기 전에 TimeCurrent()를 확인하면 마지막 틱의 시간을 얻습니다. 문서에 그렇게 나와 있지 않습니까?
여전히 오해의 소지가 있지만 현학적이고 싶다면 문제가 TimeCurrent() 의 정의가 아니라 https://docs.mql4.com/runtime/start 의 정의에 있다고 말할 수 있습니다. 즉, "새로운 견적이 들어오면 첨부된 전문가 및 사용자 지정 지표의 start() 함수가 실행됩니다"입니다. start()는 EA의 경우와 같이 새 틱과 관련해서만 호출되며 암시적으로 TimeCurrent()는 MT4 소프트웨어를 사용하는 이전 세션에서 마지막 틱의 시간을 반환할 수 없다는 분명한 의미가 있습니다. .
[다시 말하지만, 이 모든 것에 대한 한 가지 대답은 IsConnected()가 false를 반환하는 경우 표시기에서 start()에 대한 호출을 무시하는 것입니다.]
훨씬 더 현학적으로 MT4를 새로 설치하고 MT4를 처음 시작하기 전에 표시기가 첨부된 차트 파일에 복사하면 표시기가 TimeCurrent()가 보고된 start()에 대한 호출을 받게 될 것입니다. 1970년 1월 1일. 따라서 TimeCurrent() 문서는 "...마지막으로 알려진 서버 시간 또는 서버 연결이 없는 경우 1970년 1월 1일"이라고 말해야 합니다.
소란을 일으킬 필요가 없습니다. 첫 번째/다음 틱을 기다리면 TimeCurrent()가 업데이트되고 모든 것이 정상입니다. 과거 가격에 대한 지표는 쓸모가 없습니다.
이 경우 첫 번째 눈금을 무시합니다. . . 틱 2부터 정상적으로 계속합니다.
안녕하세요 여러분,
흥미로운 문제/버그를 발견하고 이전에 식별되었는지 또는 브로커 특정인지 확실하지 않습니다.
일부 표시기 코드에서 다음을 사용하고 시작 시 표시기를 실행하고 MT4를 처음 실행할 때 값을 기록해 두십시오(MT4가 다시 시작하기 전에 최소 10분 동안 실행되지 않았는지 확인하십시오).
반환된 시간은 실제로 MT4가 마지막으로 실행된 시간임을 알 수 있습니다.
이 문제를 해결하기 위해 내 코드에 지연을 도입해야 했습니다. 이는 표시기에 적합하지 않습니다.
누구든지 더 웅변적인 솔루션이 있는지 궁금합니다. 매번 시작할 때 정확한 MT4 서버 시간 이 반환되지 않는 것이 이상적입니다.
문안 인사
폴비