밀리초 단위의 OnTimer는 이 타이머 이벤트 이전에 모든 틱이 완료되었음을 보장합니다. 즉, 모든 심볼에 대해 틱이 최신 상태입니다.
만약 스파이 인디케이터가 어떤 기술적 이유로 “오래된” 틱을 지연시켜 다른 상품의 더 새로운 틱보다 나중에 전송할 수 있다는 의미라면, 아마도 그런 일이 발생할 수 있을 것입니다. 그렇지 않다면 코드 자체에서는 별다른 문제를 발견할 수 없습니다.
타이머가 새로운 "이벤트"(시간 단위 카운트) 이전에 모든 틱이 지나갔음을 더 확실하게 보장한다고 생각하지는 않습니다. 타이머는 로컬 시간으로 작동하는 반면, 틱의 타임스탬프에는 서버 시간이 포함되어 있습니다. 따라서 인스트루먼트 간 동기화를 위해 타이머에 의존하지 않는 것이 좋습니다.
Классификация советников. Все советники, запускаемые в Оптимизаторе, делятся на два типа. Торговые. Статистические: "обучение", обработка котировочных данных. Каждый из них тоже делится на два типа
스크린샷에는 MetaQuotes-Demo에서 재현하기 위한 모든 데이터가 포함되어 있습니다. OnTick을 통해서는 틱이 동기화되지 않은 반면, OnTimer(엄청나게 느림)를 통해서는 동기화되어 있음을 명확히 확인할 수 있습니다.
자, 귀하께서는 == 연산자를 사용한 진입 조건이 포함된 코드를 가져오셨습니다. 앞서 언급했듯이 조건은 ‘>’ 연산자여야 하며, ‘=’는 사용해서는 안 됩니다. 2025.10.01 01:00:00.081 이전에 알려진 최신 가격을 기준으로 모든 상품에 대해 동기화된 거래를 수행하려면, 해당 시간 이전부터 틱 모니터링을 시작해야 합니다. 즉, 데모용 상수로 예를 들어 >1759280400080을 데모용 상수로 삼아야 합니다. 각 알고리즘마다 로직을 수정해야 하며, 단순히 한 유형의 핸들러를 다른 유형으로 교체하는 것만으로는 해결되지 않습니다.
PS. 제가 말하는 동기화란 마지막으로 알려진 가격을 기준으로 거래하는 것을 의미합니다. 밀리초 단위 일치에 따른 동기화를 위해서는 물론 추가적인 검증이 필요하지만, 이러한 상황(서로 다른 상품의 틱 밀리초가 일치하는 경우)이 발생할 확률은 낮아 잠재적인 신호를 놓치게 됩니다. 이러한 동기화가 실질적인 의미가 있는지 확신할 수 없습니다.
문제를 좀 더 명확히 해야겠습니다. 시가 기준으로, 알고리즘이 모든 종목의 바를 요구한다면, 모든 종목의 iTime(,,0)이 일치할 때까지 기다립니다. 이러한 접근 방식에서 바의 경우 일반적으로 논리적 문제가 없습니다. 바(심지어 M1도)가 누락되는 경우는 드물기 때문입니다. 하지만 초 단위나 그보다 더 세분화된 시간 단위에서는 동기화 오류가 빈번하게 발생할 수 있습니다. 그럴 때는 어떻게 해야 할까요?
저는 실제로는 틱의 타임스탬프가 엄격하게 일치하는 것이 아니라, 주어진 타임아웃 시간보다 오래되지 않은 어떤 가격이라도 존재하는 것을 동기화의 기준으로 삼아야 한다고 생각합니다.
과제를 좀 더 명확히 해야겠습니다. 시초가를 기준으로, 알고리즘이 모든 종목의 봉을 요구한다면, 모든 종목의 iTime(,,0)이 일치할 때까지 기다립니다. 이러한 접근 방식에서 봉에 대해서는 일반적으로 논리적 문제가 발생하지 않습니다. 봉(심지어 M1 봉조차도)이 없는 경우는 드물기 때문입니다.
여기서 말하는 것은 시가 기준 테스터 모드입니다.
Stanislav Korotky #: 초 단위 및 그보다 더 세분화된 시간 간격에서는 동기화 오류가 빈번하게 발생할 수 있습니다. 그럴 때는 어떻게 해야 할까요?
'마지막으로 알려진 시간'에 따른 틱이 더 이상 발생하지 않을 것입니다.
밀리초 단위의 OnTimer는 이 타이머 이벤트 이전에 모든 틱이 완료되었음을 보장합니다. 즉, 모든 심볼에 대해 틱이 최신 상태입니다.
만약 스파이 인디케이터가 어떤 기술적 이유로 “오래된” 틱을 지연시켜 다른 상품의 더 새로운 틱보다 나중에 전송할 수 있다는 의미라면, 아마도 그런 일이 발생할 수 있을 것입니다. 그렇지 않다면 코드 자체에서는 별다른 문제를 발견할 수 없습니다.
타이머가 새로운 "이벤트"(시간 단위 카운트) 이전에 모든 틱이 지나갔음을 더 확실하게 보장한다고 생각하지는 않습니다. 타이머는 로컬 시간으로 작동하는 반면, 틱의 타임스탬프에는 서버 시간이 포함되어 있습니다. 따라서 인스트루먼트 간 동기화를 위해 타이머에 의존하지 않는 것이 좋습니다.
좋아요, 동기화 작업이 복잡하다는 점을 고려하면 틱 단위로 하는 것도 타당합니다. 물론 밀리초 단위의 타임프레임을 설정하고 틱의 시간을 조정할 수도 있겠지만요.
하지만 시가도 마찬가지입니다. 모든 종목의 개장 시간은 동일함에도 말이죠.
그리고 이러한 동작 때문에 일부 시스템은 정상적으로 테스트할 수 없습니다.
문제 시연.
스크린샷에는 MetaQuotes-Demo에서 재현하기 위한 모든 데이터가 나와 있습니다. OnTick을 통해서는 틱이 동기화되지 않은 반면, OnTimer(엄청나게 느림)를 통해서는 동기화되어 있음을 명확히 확인할 수 있습니다.
OnTick을 통해서는 틱이 동기화되지 않지만, OnTimer(엄청나게 느림)를 통해서는 동기화됩니다.
동기화된 모드에서 계산 속도를 높이는 유일한 방법은 EAToMath와 유사한 수학 모드를 사용하는 것 같습니다.
아니면 단일 통과 데이터를 미리 파일에 저장해 두는 방법도 있습니다.
그리고 자신의 자문가에서 이 파일의 데이터를 사용하여 OnTick에서 동기화를 수행하면 됩니다. 빠르고 정확하게 작동할 것입니다.
문제 시연.
스크린샷에는 MetaQuotes-Demo에서 재현하기 위한 모든 데이터가 포함되어 있습니다. OnTick을 통해서는 틱이 동기화되지 않은 반면, OnTimer(엄청나게 느림)를 통해서는 동기화되어 있음을 명확히 확인할 수 있습니다.
자, 귀하께서는 == 연산자를 사용한 진입 조건이 포함된 코드를 가져오셨습니다. 앞서 언급했듯이 조건은 ‘>’ 연산자여야 하며, ‘=’는 사용해서는 안 됩니다. 2025.10.01 01:00:00.081 이전에 알려진 최신 가격을 기준으로 모든 상품에 대해 동기화된 거래를 수행하려면, 해당 시간 이전부터 틱 모니터링을 시작해야 합니다. 즉, 데모용 상수로 예를 들어 >1759280400080을 데모용 상수로 삼아야 합니다. 각 알고리즘마다 로직을 수정해야 하며, 단순히 한 유형의 핸들러를 다른 유형으로 교체하는 것만으로는 해결되지 않습니다.
PS. 제가 말하는 동기화란 마지막으로 알려진 가격을 기준으로 거래하는 것을 의미합니다. 밀리초 단위 일치에 따른 동기화를 위해서는 물론 추가적인 검증이 필요하지만, 이러한 상황(서로 다른 상품의 틱 밀리초가 일치하는 경우)이 발생할 확률은 낮아 잠재적인 신호를 놓치게 됩니다. 이러한 동기화가 실질적인 의미가 있는지 확신할 수 없습니다.
2025년 10월 1일 01:00:00까지 알려진 최신 가격으로 동기화 거래를 수행하려면,081을 기준으로 모든 상품에 대해, 해당 시간 이전에 틱 모니터링을 시작해야 합니다. 즉, 데모용 상수로 예를 들어 >1759280400080을 설정해야 합니다.
동기화를 위한 가장 간단한 방법은 사용되는 심볼들의 틱 시간으로 집합을 만드는 것입니다.
실행 중에 한 번의 통과로 동기화를 수행하는 것은 어렵습니다.
어려움은 지연 시간의 불확실성에 있습니다. 어떤 심볼이 기준이 될지 알 수 없습니다.
코드에 구현된 귀하의 방안을 확인해 보겠습니다.
완벽한 테스트 케이스를 만들기 위해서는 실제 적용 과제를 이해해야 할 것 같습니다. 밀리초 단위의 정확도로 시간이 일치하는 틱에 대해서만 거래하는 것입니까?
사전에 알려진 시점에 모든 상품에 대해 동기화된 틱이 발생하는 단 한 건의 거래라는 인위적인 예시를 위해, 인위적인 최적 알고리즘을 고안해 낼 수는 있겠지만, 그럴 필요가 있을까요?
하지만 개장 가격은 똑같은데, 모든 종목의 개장 시간은 동일하잖아요.
문제를 좀 더 명확히 해야겠습니다. 시가 기준으로, 알고리즘이 모든 종목의 바를 요구한다면, 모든 종목의 iTime(,,0)이 일치할 때까지 기다립니다. 이러한 접근 방식에서 바의 경우 일반적으로 논리적 문제가 없습니다. 바(심지어 M1도)가 누락되는 경우는 드물기 때문입니다. 하지만 초 단위나 그보다 더 세분화된 시간 단위에서는 동기화 오류가 빈번하게 발생할 수 있습니다. 그럴 때는 어떻게 해야 할까요?
저는 실제로는 틱의 타임스탬프가 엄격하게 일치하는 것이 아니라, 주어진 타임아웃 시간보다 오래되지 않은 어떤 가격이라도 존재하는 것을 동기화의 기준으로 삼아야 한다고 생각합니다.
과제를 좀 더 명확히 해야겠습니다. 시초가를 기준으로, 알고리즘이 모든 종목의 봉을 요구한다면, 모든 종목의 iTime(,,0)이 일치할 때까지 기다립니다. 이러한 접근 방식에서 봉에 대해서는 일반적으로 논리적 문제가 발생하지 않습니다. 봉(심지어 M1 봉조차도)이 없는 경우는 드물기 때문입니다.
여기서 말하는 것은 시가 기준 테스터 모드입니다.
초 단위 및 그보다 더 세분화된 시간 간격에서는 동기화 오류가 빈번하게 발생할 수 있습니다. 그럴 때는 어떻게 해야 할까요?
마지막으로 알려진 값을 입력해야 합니다.