CopyTicks(빌드 1881)는 새로운 틱이 요청되지 않은 경우 요청된 것보다 오래된 데이터를 반환합니다. 저것들. from 매개변수보다 오래된 데이터를 반환합니다. 버그가 떠 있습니다. 다른 시간에 나타나므로 이를 재현하는 작은 코드를 작성했습니다. EURUSD H1 , 2017.08.01 - 2018.08.01에 테스터에서 출시되었습니다.
voidOnTick ()
{
staticdatetime lastActivityTime = D'2017.08.01' ;
staticMqlTick ticks[ 2000 ];
staticconstuint requestedCount = 2000 ;
datetime dt[ 1 ];
CopyTime ( NULL , PERIOD_CURRENT , 0 , 1 , dt);
if (lastActivityTime >= dt[ 0 ]) {
return ;
}
lastActivityTime = TimeCurrent ();
int zero = 0 ;
int idx = 0 ;
do {
++idx;
CopyTime ( NULL , PERIOD_CURRENT , idx, 1 , dt);
if (dt[ 0 ] <= D'2017.08.01' ) break ;
Print ( "dt[0]=" , dt[ 0 ]);
ulong from = 1000 * dt[ 0 ];
int cnt = CopyTicks ( Symbol (), ticks, COPY_TICKS_INFO , from, requestedCount);
if (cnt < 1 ) {
Print ( "Error in CopyTicks" );
return ;
}
Print ( "cnt=" , cnt);
for ( int i = 0 ; i < cnt; ++i) {
if (ticks[i].time_msc < from) {
Print ( "ERROR: i=" , i, ", ticks[i].time_msc=" , ticks[i].time_msc, " (" , ticks[i].time, ")" );
i = i / zero;
}
}
Print ( "done" );
} while ( true );
}
그건 그렇고, 올바른 진드기 수집에 대한 Vasily Sokolov의 훌륭한 기사 가있었습니다. 거기에서 동기화 프로세스가 자세히 분석됩니다(내가 가지고 있지 않기 때문에 동일한 눈금이 때때로 인쇄됨).
그러나 CopyTiks 기능은 N개의 마지막 틱을 요청하는 것을 허용하지 않습니다. 대신 지정된 시점 이후에 들어온 모든 틱을 제공합니다. 이것은 작업을 복잡하게 만듭니다. 쿼리를 실행하고 틱 배열을 가져와 이전 업데이트에서 받은 틱 배열과 비교해야 합니다. 동시에 새로 도착한 진드기 중 "과거 배송"에 포함되지 않은 진드기, 즉 새 진드기가 무엇인지 알 수 있습니다. 그러나 단순히 눈에 보이는 차이가 전혀 없을 수 있기 때문에 진드기를 서로 직접 비교하는 것은 불가능합니다. 예를 들어 다음 거래 테이블을 고려하십시오.
쌀. 5. 동일한 거래의 예가 있는 모든 거래의 표.
우리는 절대적으로 동일한 진드기의 두 그룹을 즉시 볼 수 있습니다. 빨간색 프레임으로 표시되어 있으며 시간, 수량, 방향 및 가격이 동일합니다. 그래서 우리는 개별 진드기를 서로 비교하는 것이 불가능하다는 것을 확인합니다.
그러나 틱 그룹을 비교할 수 있습니다. 두 그룹의 틱이 같으면 마지막 가격 업데이트 동안 이러한 틱과 후속 틱이 이미 분석되었다고 결론을 내릴 수 있습니다.
Именно с этой, улучшенной и дополненной версией мы и начнем работать, чтобы постепенно превратить ее в скальперский стакан цен. Краткий обзор графической библиотеки CPanel Созданию пользовательских интерфейсов в MQL5 посвящено много статей. Среди них особенно выделяется серия Анатолия Кажарского "Графические интерфейсы", после которой сложно...
CopyTicks 오프라인 호출에 성공한 후 GetLastError 는 4403을 반환합니다.
CopyTicksRange를 통해 하겠지만 CopyTicks의 동작은 변경하는 것이 올바른 것 같습니다.
CopyTicks(빌드 1881)는 새로운 틱이 요청되지 않은 경우 요청된 것보다 오래된 데이터를 반환합니다. 저것들. from 매개변수보다 오래된 데이터를 반환합니다. 버그가 떠 있습니다. 다른 시간에 나타나므로 이를 재현하는 작은 코드를 작성했습니다. EURUSD H1 , 2017.08.01 - 2018.08.01에 테스터에서 출시되었습니다.
출력은 다음과 같습니다.
2018.10.17 21:31:26.221 2017.08.01 12:00:00 dt[0]=2017.08.01 03:00:00
2018.10.17 21:31:26.221 2017.08.01 12:00:00 cnt=2000
2018.10.17 21:31:26.221 2017.08.01 12:00:00 오류: i=0, ticks[i].time_msc=1501552175606 (2017.08.01 01:49:35)
저것들. 03:00부터 신청해서 01:49부터 받았습니다. 실제 상황에서 그 차이는 한 달 이상이었습니다.
베테랑들에게 질문합니다. 신선한 진드기를 얻는 이 방법으로 어떤 잠재적 오류가 발생할 수 있습니까?
같은 시간의 틱 순서는 보장되지 않는 것 같습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
실시간 틱
Andrey Khatimlianskii , 2020.01.31 14:40
그건 그렇고, 올바른 진드기 수집에 대한 Vasily Sokolov의 훌륭한 기사 가있었습니다. 거기에서 동기화 프로세스가 자세히 분석됩니다(내가 가지고 있지 않기 때문에 동일한 눈금이 때때로 인쇄됨).
그러나 CopyTiks 기능은 N개의 마지막 틱을 요청하는 것을 허용하지 않습니다. 대신 지정된 시점 이후에 들어온 모든 틱을 제공합니다. 이것은 작업을 복잡하게 만듭니다. 쿼리를 실행하고 틱 배열을 가져와 이전 업데이트에서 받은 틱 배열과 비교해야 합니다. 동시에 새로 도착한 진드기 중 "과거 배송"에 포함되지 않은 진드기, 즉 새 진드기가 무엇인지 알 수 있습니다. 그러나 단순히 눈에 보이는 차이가 전혀 없을 수 있기 때문에 진드기를 서로 직접 비교하는 것은 불가능합니다. 예를 들어 다음 거래 테이블을 고려하십시오.
쌀. 5. 동일한 거래의 예가 있는 모든 거래의 표.
우리는 절대적으로 동일한 진드기의 두 그룹을 즉시 볼 수 있습니다. 빨간색 프레임으로 표시되어 있으며 시간, 수량, 방향 및 가격이 동일합니다. 그래서 우리는 개별 진드기를 서로 비교하는 것이 불가능하다는 것을 확인합니다.
그러나 틱 그룹을 비교할 수 있습니다. 두 그룹의 틱이 같으면 마지막 가격 업데이트 동안 이러한 틱과 후속 틱이 이미 분석되었다고 결론을 내릴 수 있습니다.
같은 시간의 틱 순서는 보장되지 않는 것 같습니다.
틱 그룹에 대해 이야기하는 경우 코드에서 모든 것이 순서대로 보입니다.
결과(콜드 스타트 - 터미널 시작 직후).
어드바이저를 끌 수 있습니다. 터미널의 소비 측면에서 아무 것도 변경되지 않습니다.