'CopyTicks' 테스트 - 페이지 20

 

0이 아닌 경우 CopyTicks 내부에서 시작하기 위해 장소가 검색됩니다(아마도 바이너리 검색 ) - 내부 데이터베이스의 인덱스.

데이터베이스의 인덱스를 시간별로 반환하는 함수를 추가해주세요. 그러면 이 문제를 최적으로 해결할 수 있습니다.

fxsaber :
from_time에서 to_time으로 틱을 가져오기 위한 최적(성능) 알고리즘은 무엇입니까?
 

정당한 이유로 ""틱"이란 무엇입니까?"라는 주제가 제거되었습니다. 나는 살아남은 역사에서 내 대답 중 몇 가지를 인용 할 것입니다.

В парадигме MT тик - это то, что пришло от биржи. Единица стрима(-ов). Поэтому два подряд идущих тика могут полностью совпадать (MqlTick), но при этом не обозначать одно и то же событие. Помимо MqlTick-данных есть еще номер тика, который не показывается в MT. И есть MT-нюанс с тиками , когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.

두 개의 연속 틱(Tick/Calculate 이벤트 호출)은 MqlTick 구조에서 완전히 일치할 수 있지만(모든 가격 및 볼륨, 시간 및 플래그는 동일함) 실제로는 다릅니다. Bid/Ask는 항상 TickSize의 배수입니다. 마지막(거래소에 없음)은 TickSize의 배수가 아닐 수 있습니다. TickSize는 Point보다 몇 배 더 클 수 있습니다(예: RTS 참조). 따라서 이 경우 Point에 대해 이야기하는 것은 완전히 옳지 않습니다.

아마도 유용할 것입니다. SymbolInfoTick은 동기화된 함수가 아닙니다. 즉, OnTick의 다른 위치에서 다른 틱을 반환할 수 있습니다. 또한 OnTick의 맨 처음에 SymbolInfoTick이 호출되더라도 수신된 틱은 OnTick이 작동한 Tick 이벤트의 개시자가 아닙니다. MqlTick 구조의 필드는 교환에서 받은 틱과 같지 않습니다. 이 필드는 터미널 자체에서 합성되며 Marketwatch 값과 동일합니다.

 
INFO 틱이 테스터에서 Forex의 모든 틱과 일치하지 않는 이유는 무엇입니까?
 
테스터에서 Expert Advisor 실행
void OnTick ()
{
   static bool FirstRun = true ;
  
   if (FirstRun)
  {
     MqlTick Ticks[ 1 ];
    
     if ( SymbolInfoTick ( _Symbol , Ticks[ 0 ]))  
       Print ( CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , Ticks[ 0 ].time_msc + 1 )); // Сколько тиков со временем больше последнего
    FirstRun = false ;
  }
}

결과

2016.10 . 15 13 : 23 : 57.689 2016.10 . 12 00 : 00 : 16    1

0을 반환해야 하지만 1을 반환합니다. 동시에 Ticks[]는 변경되지 않습니다. 벌레!

 
fxsaber :
테스터에서 Expert Advisor 실행
void OnTick ()
{
   static bool FirstRun = true ;
  
   if (FirstRun)
  {
     MqlTick Ticks[ 1 ];
    
     if ( SymbolInfoTick ( _Symbol , Ticks[ 0 ]))  
       Print ( CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , Ticks[ 0 ].time_msc + 1 )); // Сколько тиков со временем больше последнего
    FirstRun = false ;
  }
}

결과

2016.10 . 15 13 : 23 : 57.689 2016.10 . 12 00 : 00 : 16    1

0을 반환해야 하지만 1을 반환합니다. 동시에 Ticks[]는 변경되지 않습니다. 벌레!

주말이라 그럴까요?

도움에서. CopyTicks 이 함수는 현재 작업 세션 에 대해 터미널에서 누적한 틱을 ticks_array 배열로 수신합니다.

 
Alexey Volchanskiy :

주말이라 그럴까요?

도움에서. CopyTicks 이 함수는 현재 작업 세션 에 대해 터미널에서 누적한 틱을 ticks_array 배열로 수신합니다.

테스터에 버그가 있습니다.
 

CopyTicks의 성능 문제.

로보

Network 'xxx': authorized on RoboForexEU-MetaTrader 5 through Europe #1 (ping: 56.66 ms)

BCS

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 45.53 ms)



이것은 눈금 표시기 데이터입니다. 두 경우 모두 2-3천 틱이 다운로드되었습니다. 그러나 robo에서는 훨씬 더 빠르게 발생합니다.

낮에는 Forex에서 속도가 일치하는 것을 보았습니다. 그때 시장은 더 유동적이었습니다. 코피틱스가 적극적인 시장 감시를 늦추고 있는 것 같습니다.

두 경우 모두에서 유일한 차트이자 유일한 지표입니다. 그리고 KopiTix는 이미 데이터베이스/캐시에서 따옴표를 다운로드했습니다.

 

1) 양쪽에 안경이 있었습니까?

2) 원래 스트림에 거래/정보 틱 분할이 있었습니까? 복잡한 흐름은 재계산이 필요하고 간단한 발급이 필요합니다.

3) 실제 요청은 무엇이었습니까?

4) 얼마나 많은 쿼리가 결과를 확인했습니까? 테스트 규칙이 준수되었으며 얼마나 정확하게 관찰되었는지: 콜드 스타트 고려, 이상값 폐기, 시리즈 결과의 반복성, 재생산 코드.

일반적으로 수치 결과는 누구나 반복할 수 있도록 정확한 코드가 앞에 와야 합니다. 그렇지 않으면 논의할 의미가 없습니다.

 
Renat Fatkhullin :

1) 양쪽에 안경이 있었습니까?

2) 원래 스트림에 거래/정보 틱 분할이 있었습니까? 복잡한 흐름은 재계산이 필요하고 간단한 발급이 필요합니다.

3) 실제 요청은 무엇이었습니까?

4) 얼마나 많은 쿼리가 결과를 확인했습니까? 테스트 규칙이 준수되었으며 정확히 어떻게: 콜드 스타트 회계, 이상치 거부, 시리즈 결과의 반복성, 재생산 코드.

일반적으로 수치 결과는 누구나 반복할 수 있도록 정확한 코드가 앞에 와야 합니다. 그렇지 않으면 논의할 의미가 없습니다.

정확한 코드에 대한 링크를 제공했습니다.

  1. 안경이 없었습니다.
  2. INFO만 체크합니다.
  3. > 0에서 COPY_TICKS_INFO.
  4. 작품의 링크에 있는 지표를 봐 주세요. 반복성이 완전합니다. 콜드 스타트는 제외됩니다. 배출량은 동일합니다.
 

점검 해보자.

그러나 서버 중 하나에 유리가 없다는 데 큰 의구심이 있습니다. 유리가 렌더링되지 않은 것은 중요하지 않습니다. 기호가 있으면 해당 데이터가 항상 존재하고 틱을 요청할 때 더 복잡한 발행 알고리즘이 작동합니다.