'CopyTicks' 테스트 - 페이지 12

 
Dmitriy Skub :

1년 후 요약은 다음과 같습니다.

- CopyTicks 기능이 올바르게 작동합니다(설명에 해당).

- 지정된 기능을 사용하여 얻은 파생상품 시장의 현재 틱 데이터가 거래소의 틱 데이터와 일치합니다.

- 가장 유동적인 상품에 대한 파생 상품 시장의 틱 데이터 기록은 2016년 7월 28 일부터 정확합니다(분명히 최신 버전의 서버 부분이 출시되었습니다).

위의 모든 내용은 MT5 1395 터미널 버전과 Open-Broker 의 선물 시장 실제 계정에 적용됩니다. 원칙적으로 주제는 닫혀 있습니다.

거래 방향도 확인하셨나요?
 

CopyBuffer에 대해 질문이 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

mql5를 사용하면 다른 창에서 차트를 그리는 표시기를 작성하거나 다른 창에서 표시기 버퍼에 액세스할 수 있습니까?

fxsaber , 2016.09.09 10:20

질문이 있습니다. CopyBuffer를 사용하여 변경된 값의 수( 입력 매개변수 개수가 0이 아님 )에 버퍼를 추가하거나 항상 버퍼의 전체 복사본을 만들 때 (성능 측면에서) 편리합니까?

그러나 CopyTicks에 대한 거의 동일한 질문입니다.

CopyTicks를 사용하여 이미 수집된 틱에 새 값을 추가하거나 틱이 필요한 곳에서 항상 전체 요청을 하고 수집된 값을 더 일찍 저장하지 않을 때 (성능 면에서) 편리합니까?

 
동적 배열 에 틱을 추가할 때 ArrayResize에서 reserved_size를 설정하는 것이 가장 좋습니다.
 
fxsaber :
동적 배열 에 틱을 추가할 때 ArrayResize에서 reserved_size를 설정하는 것이 가장 좋습니다.
동적 배열은 INT_MAX 크기로 제한되므로 바로 이 크기로 배열을 설정하는 것이 좋습니다.
 
prostotrader :
동적 배열은 INT_MAX 크기로 제한되므로 바로 이 크기로 배열을 설정하는 것이 좋습니다.
기억이 가물가물합니다 .
 
prostotrader :
동적 배열은 INT_MAX 크기로 제한되므로 바로 이 크기로 배열을 설정하는 것이 좋습니다.
미칼라스, 너야? :-)
 
Dennis Kirichenko :
미칼라스, 너야? :-)
Примечание

Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов, 
назначенных в качестве индикаторных буферов функцией SetIndexBuffer (). Для индикаторных буферов все операции по изменению размера производит 
исполняющая подсистема терминала.

Общее число элементов в массиве не может превышать 2147483647 .
 
prostotrader :
나는 당신의 손글씨에서 당신을 볼 수 있습니다 ;-)
 

스크립트는 최고의 갱이 동일한 밀리초 내에 변경될 때 틱을 표시합니다.

 #property script_show_inputs

sinput int Count = 10000 ; // Количество тиков на проверку

#define TOSTRING(A) " " + #A + " = " + ( string )Tick.A

string TickToString( const MqlTick &Tick )
{
   static int i = 0 ;
  
  i++;
  
   return ( "Tick" + ( string )i + ":" + TOSTRING(time) + "." + ( string )(Tick.time_msc % 1000 ) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume));
}

void OnStart ()
{
   MqlTick Ticks[];
  
   const int Amount = CopyTicks ( _Symbol , Ticks, COPY_TICKS_INFO , 0 , Count);
  
   for ( int i = 1 ; i < Amount; i++)
     if (Ticks[i].time_msc == Ticks[i - 1 ].time_msc) // ищем соседние тики с одним временем (с точностью до мс)
//      if ((Ticks[i].bid > Ticks[i - 1].bid) ||(Ticks[i].ask < Ticks[i - 1].ask)) // ищем выставление лимитной заявки внутрь спреда
         Print (TickToString(Ticks[i - 1 ]) + "\n" + TickToString(Ticks[i]) + "\n" );
}

결과의 일부:

 2016.09 . 13 11 : 58 : 46.861 Test (RTS- 9.16 ,M1)      Tick14: time = 2016.09 . 13 10 : 12 : 55.819 bid = 98220 .0 ask = 98240.0 last = 98240.0 volume = 2
2016.09 . 13 11 : 58 : 46.861 Test (RTS- 9.16 ,M1)      Tick13: time = 2016.09 . 13 10 : 12 : 55.819 bid = 98230 .0 ask = 98240.0 last = 98240.0 volume = 2

여기에서 1밀리초 이내에 누군가 자신의 BuyLimit = 98230을 제거했습니다. 제거되었으며 시장과 일치하지 않습니다.

이 검사는 1밀리초 내에 이러한 모든 작업이 주문장에서 최상의 지정가 주문을 제거(실행이 아님)하는 것으로 나타났습니다.

결과의 또 다른 부분:

 2016.09 . 13 11 : 58 : 46.861 Test (RTS- 9.16 ,M1)      Tick4: time = 2016.09 . 13 10 : 00 : 00.235 bid = 98490.0 ask = 99040 .0 last = 98500.0 volume = 8
2016.09 . 13 11 : 58 : 46.861 Test (RTS- 9.16 ,M1)      Tick3: time = 2016.09 . 13 10 : 00 : 00.235 bid = 98490.0 ask = 98600 .0 last = 98500.0 volume = 8
2016.09 . 13 11 : 58 : 46.861 Test (RTS- 9.16 ,M1)      
2016.09 . 13 11 : 58 : 46.861 Test (RTS- 9.16 ,M1)      Tick2: time = 2016.09 . 13 10 : 00 : 00.235 bid = 98490 .0 ask = 98600.0 last = 98500.0 volume = 8
2016.09 . 13 11 : 58 : 46.861 Test (RTS- 9.16 ,M1)      Tick1: time = 2016.09 . 13 10 : 00 : 00.235 bid = 98500 .0 ask = 98600.0 last = 98500.0 volume = 8

여기, 여하튼 세션이 시작될 때 누군가 SellLimit과 BuyLimit을 모두 1밀리초 만에 제거했습니다. 저것들. 1밀리초에 두 가지 동작!

어떻게 이럴 수있어? 결국 HFT도 지정가 주문을 1ms 미만으로 취소할 수 없습니다.

또는 두 개의 지정가 주문(BuyLimit1_price < BuyLimit2_price)이 OrderSendAsync 를 통해 스프레드 내부로 전송되면 거래소는 입찰 가격이 동시에 개선되는 두 개의 연속 틱을 생성합니까(정확도 1ms)?

 
fxsaber :


어떻게 이럴 수있어? 결국 HFT도 지정가 주문을 1ms 미만으로 취소할 수 없습니다.


그런 지식은 어디서 얻었습니까?

Plaza II 외에도 FAST/FIX 프로토콜이 있습니다.

1ms 동안 수백 가지 작업 수행