О датафидах. Сколько встречал этот термин, сложилось ощущение, что этим словом обозначают источник данных (котировок). Буквально "заполнитель данных". Когда речь идет о собственных инструментах, понимаю так, что мы сможем вычислять котировки, например, никем не котируемого MXNRUB по известным курсам MXNUSD и USDRUB, выгруженным из терминала в .csv формат, и легализовать для терминала новые котировки, указав файл .csv как новый датафид . Возможно, будет реализовано и более изящное решение, без выгрузки в файлы, путем онлайновых операций */ над тиками (MXNRUB = MXNUSD * USDRUB). И это будет новый датафид.
확실히 하기 위해(OnBookEvent 및 CopyTicks를 테스트하지 않고 OnCalculate를 계획대로) OnCalculate를 호출할 때 파일에 틱 기록만 남겨둘 것입니다.
그런 다음 스크립트는 CopyTicks를 통해 틱을 수신하여 동일한 파일을 생성합니다. 차이점은 더 명확했을 것이며 OnCalculate에서 틱 건너뛰기 또는 CopyTicks의 잘못된 작동을 나타냅니다.
그런 간단한 계산으로 더 이상 귀찮게 할 이유가 없습니다. SymbolInfoTick() 및 CopyTicks()의 두 호출 에 대한 구체적인 비교가 있습니다. 그리고 모든 SymbolInfoTick() 호출이 명확하게 표시됩니다. 그리고 CopyTicks()가 OnCalculate()에서 SymbolInfoTick()에서 요청했을 때 받지 못한 틱을 반환했음을 알 수 있습니다. 그리고 오류에 대한 두 가지 이유가 있을 수 있습니다. 1. OnCalculate()가 눈금을 건너뛰거나 2. SymbolInfoTick()이 어딘가에 있어야 하는 것과 다른 것을 반환합니다.
네, 이것은 수집하는 데 30초가 걸린 로그의 일부입니다... 그래서 놓친 틱의 수를 상상해 보십시오.
CopyTicks를 사용하면 OnCalculate에 없는 틱을 얻을 수 있습니다(누락된 것보다 시간이 더 긴 틱에 대해 OnCalculate에서 이에 대해 배웁니다).
로그를 보세요.
지원팀2017.05.23 14:13
바로 이것에 관한 것입니다.
진드기 팩이 도착했습니다. 2개의 스레드가 이 배치 처리를 시작했습니다. 사이클의 한 스레드는 배치의 각 틱에 대해 OnCalculate를 시작합니다. 다른 스레드는 전체 팩을 티크 베이스에 넣습니다. 이 2개의 스레드는 어떤 식으로든 서로 동기화되지 않으며 어떤 스레드가 많은 틱을 더 빠르게 처리할지 알 수 없습니다.
모든 틱 에 생성됩니다. 따라서 지표에 대한 틱 대기열이 있습니다. 일정량에 도달하면 표시기가 너무 느리다는 경고가 로그에 전송됩니다.
막대 자체는 본질적으로 지표이며 계산 이벤트를 기반으로 형성됩니다. 따라서 TF M1이 여전히 10:15:00.020이고 버스트가 50ms 동안 도착하면 첫 번째 틱의 시간은 여전히 10:14:59.970입니다. 그리고 모든 표시기는 이 계산 이벤트에서 먼저 호출됩니다. 먼저 시계열 표시기를 호출한 다음 이러한 시계열이 있는 사용자 지정 표시기를 호출합니다. 저것들. 이 시나리오에서 10:15 막대는 아직 0으로 형성되지 않았습니다. 그리고 0 - 10:14.
또한, 계산 이벤트를 통해 팩이 풀리기 시작하면 10:15 막대도 나타납니다. 디테일한 것 같습니다.
불행히도 서비스 데스크는 레퍼토리에 있습니다. 토론에 관한 경우 링크를 던질 필요가 없습니다. 그리고 손가락에 대한 구체적인 예를 들어보십시오. 그들은 그것에 대해 전혀 이야기하지 않습니다. 그들은 SymbolInfoTick()이 현재 체크된 틱을 반환한다고 말하고 이론상의 OnCalculate()는 모든 틱 을 처리합니다. 출력은 모든 틱이어야 합니다. 그리고 CopyTicks()는 그 반대를 알려줍니다. 음... 그리고 그들은 CopyTicks()를 보지 말라고 말합니다 :). 그들은 또한 그 해 말에 CopyTicks()를 수정할 때 두 가지 스트림에 대해 설명했습니다. 여기에서만 그에 관한 것이 아닙니다(비록 그에게도 x가 있을 수 있음).
영어로부터.
데이터 -- 데이터
먹이 -- 먹이
datafeed -- 데이터 소스("소스"라는 단어가 의미를 제대로 전달하지는 않지만)
피더 -- 피더, 피더, 로딩 장치
О датафидах. Сколько встречал этот термин, сложилось ощущение, что этим словом обозначают источник данных (котировок). Буквально "заполнитель данных". Когда речь идет о собственных инструментах, понимаю так, что мы сможем вычислять котировки, например, никем не котируемого MXNRUB по известным курсам MXNUSD и USDRUB, выгруженным из терминала в .csv формат, и легализовать для терминала новые котировки, указав файл .csv как новый датафид . Возможно, будет реализовано и более изящное решение, без выгрузки в файлы, путем онлайновых операций */ над тиками (MXNRUB = MXNUSD * USDRUB). И это будет новый датафид.
토론, 버그 보고서 또는 이와 유사한 것에 대한 링크가 없습니까? 아니면 그냥 그런 느낌인데 지금은 확인하지 않았나요?
내가 기억하는 한 OnCalculate에서 수집된 틱은 CopyTix를 통해 요청된 틱과 일치했습니다.
이제 구체적으로 확인했습니다 ... 예상대로 일종의 쓰레기를 얻었지만 예상했던 것은 아닙니다. :)
플래그가 0인 틱은 OnBookEvent()를 통해 잡힙니다...
그리고 다음은 내가 볼 것으로 기대한 것입니다.
보시다시피 SymbolInfoTick() 함수를 사용하여 OnCalculate() 함수 에 대한 각 호출에서 마지막 눈금을 요청할 때 일부 눈금은 건너뛰고 CopyTicks()에서 반환됩니다.확인할 코드:
확인할 코드:
확실히 하기 위해(OnBookEvent 및 CopyTicks 를 테스트하지 않고 OnCalculate 계획대로) OnCalculate를 호출할 때 파일에 틱 기록만 남겨둘 것입니다.
그런 다음 CopyTicks를 통해 틱을 수신하는 스크립트로 동일한 파일을 생성합니다. 차이점은 더 명확했을 것이며 OnCalculate에서 틱 건너뛰기 또는 CopyTicks의 잘못된 작동을 나타냅니다.
확실히 하기 위해(OnBookEvent 및 CopyTicks를 테스트하지 않고 OnCalculate를 계획대로) OnCalculate를 호출할 때 파일에 틱 기록만 남겨둘 것입니다.
그런 다음 스크립트는 CopyTicks를 통해 틱을 수신하여 동일한 파일을 생성합니다. 차이점은 더 명확했을 것이며 OnCalculate에서 틱 건너뛰기 또는 CopyTicks의 잘못된 작동을 나타냅니다.
그런 간단한 계산으로 더 이상 귀찮게 할 이유가 없습니다. SymbolInfoTick() 및 CopyTicks()의 두 호출 에 대한 구체적인 비교가 있습니다. 그리고 모든 SymbolInfoTick() 호출이 명확하게 표시됩니다. 그리고 CopyTicks()가 OnCalculate()에서 SymbolInfoTick()에서 요청했을 때 받지 못한 틱을 반환했음을 알 수 있습니다. 그리고 오류에 대한 두 가지 이유가 있을 수 있습니다. 1. OnCalculate()가 눈금을 건너뛰거나 2. SymbolInfoTick()이 어딘가에 있어야 하는 것과 다른 것을 반환합니다.
네, 이것은 수집하는 데 30초가 걸린 로그의 일부입니다... 그래서 놓친 틱의 수를 상상해 보십시오.
서비스 데스크와의 대화:
길을 잃지 않도록 https://www.mql5.com/ru/forum/190129/page8#comment_5081300 및 다음 게시물 2개를 살펴보세요.
표시기의 CopyTicks는 표시기가 OnCalculate에서 수신하지 않는 틱을 제공합니다(전도 후도 아님).
OnCalculate는 모든 틱에서 호출됩니다.
눈금은 별도의 스레드에서 베이스에 추가됩니다. 즉, 비동기식입니다. CopyTicks를 사용하면 OnCalculate라는 동일한 틱을 얻을 수 있다는 사실이 아닙니다.
그것에 관한 것이 아닙니다.
CopyTicks를 사용하면 OnCalculate에 없는 틱을 얻을 수 있습니다(누락된 것보다 시간이 더 긴 틱에 대해 OnCalculate에서 이에 대해 배웁니다).
로그를 보세요.
바로 이것에 관한 것입니다.
진드기 팩이 도착했습니다. 2개의 스레드가 이 배치 처리를 시작했습니다. 사이클의 한 스레드는 배치의 각 틱에 대해 OnCalculate를 시작합니다. 다른 스레드는 전체 팩을 티크 베이스에 넣습니다. 이 2개의 스레드는 어떤 식으로든 서로 동기화되지 않으며 어떤 스레드가 많은 틱을 더 빠르게 처리할지 알 수 없습니다.
그러나 팩의 각 틱은 OnCalculate에서 처리해야 합니다. 그리고 이것은 일어나지 않습니다.
이 시간에는 틱이 없습니다. 시간이 짧은 진드기와 시간이 긴 진드기가 있습니다. 그리고 그들 사이에는 OnCalculate 호출이 없었습니다.
퇴비
그러나 팩의 각 틱은 OnCalculate에서 처리해야 합니다. 그리고 이것은 일어나지 않습니다.
이 시간에는 틱이 없습니다. 시간이 짧은 진드기와 시간이 긴 진드기가 있습니다. 그리고 그들 사이에는 OnCalculate 호출이 없었습니다.
팩의 각 틱은 OnCalculate에서 처리됩니다. 패스가 없습니다. 싸이클은 그렇게 쓰여 있습니다.
OnCalculate에서 어떤 틱이 처리되는지 알아보려면 SymbolInfoTick 을 사용하십시오. 여기에서 모든 것이 명확합니다. 기호에 대한 정보에 틱이 적용된 다음 해당 기호의 모든 표시기가 호출되며 모두 동일한 스레드에 있습니다.
링크의 로그를 참조하십시오.
OnCalculate의 SymbolInfoTick에는 CopyTicks에서 얻을 수 있는 눈금이 표시되지 않습니다.
그래서 내가 쓴
https://www.mql5.com/ru/forum/190129/page8#comment_5082755 에서 제안한 대로 정확히 수행해야 합니다.
확실히 하기 위해(OnBookEvent 및 CopyTicks를 테스트하지 않고 OnCalculate를 계획대로) OnCalculate를 호출할 때 파일에 틱 기록만 남겨둘 것입니다.
그런 다음 CopyTicks를 통해 틱을 수신하는 스크립트로 동일한 파일을 생성합니다. 차이점은 더 명확했을 것이며 OnCalculate에서 틱 건너뛰기 또는 CopyTicks의 잘못된 작동을 나타냅니다.
이것이 바로 우리가 한 번에 CopyTicks의 정확성을 확인하는 방법입니다. 테스트 스크립트 및 지표가 남아 있으며 다시 확인하겠습니다.
모든 틱 에 생성됩니다. 따라서 지표에 대한 틱 대기열이 있습니다. 일정량에 도달하면 표시기가 너무 느리다는 경고가 로그에 전송됩니다.
막대 자체는 본질적으로 지표이며 계산 이벤트를 기반으로 형성됩니다. 따라서 TF M1이 여전히 10:15:00.020이고 버스트가 50ms 동안 도착하면 첫 번째 틱의 시간은 여전히 10:14:59.970입니다. 그리고 모든 표시기는 이 계산 이벤트에서 먼저 호출됩니다. 먼저 시계열 표시기를 호출한 다음 이러한 시계열이 있는 사용자 지정 표시기를 호출합니다. 저것들. 이 시나리오에서 10:15 막대는 아직 0으로 형성되지 않았습니다. 그리고 0 - 10:14.
또한, 계산 이벤트를 통해 팩이 풀리기 시작하면 10:15 막대도 나타납니다. 디테일한 것 같습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
mql5 언어의 특징, 미묘함 및 작업 방법
fxsaber , 2017.03.29 22:41
결과적으로 EA가 아직 형성되지 않은 막대의 틱을받는 것은 매우 정상입니다. 그러나 이것은 특별히 재현되는 미묘한 순간입니다. 시도해야합니다. 일반적으로 실제보다 이론에 가깝습니다.
추신: 속도가 편집증적인 경우 표시기(물론 막대 포함)를 사용하는 것은 선택 사항이 아닙니다. 모든 것은 고문에 있습니다.
서비스 데스크와의 대화:
불행히도 서비스 데스크는 레퍼토리에 있습니다. 토론에 관한 경우 링크를 던질 필요가 없습니다. 그리고 손가락에 대한 구체적인 예를 들어보십시오. 그들은 그것에 대해 전혀 이야기하지 않습니다. 그들은 SymbolInfoTick()이 현재 체크된 틱을 반환한다고 말하고 이론상의 OnCalculate()는 모든 틱 을 처리합니다. 출력은 모든 틱이어야 합니다. 그리고 CopyTicks()는 그 반대를 알려줍니다. 음... 그리고 그들은 CopyTicks()를 보지 말라고 말합니다 :). 그들은 또한 그 해 말에 CopyTicks()를 수정할 때 두 가지 스트림에 대해 설명했습니다. 여기에서만 그에 관한 것이 아닙니다(비록 그에게도 x가 있을 수 있음).
OnBookEvent()에서 수신할 때 플래그 0이 있는 틱에 대해 질문했습니까?