Testare 'CopyTicks'. - pagina 12

 
Dmitriy Skub:

Dopo un anno, riassumiamo i risultati intermedi:

- la funzione CopyTicks funziona correttamente (come descritto);

- I dati attuali di tick del mercato dei futures ottenuti con questa funzione coincidono con i dati della borsa;

- La cronologia dei tick del mercato dei futures per gli strumenti più liquidi è corretta a partire dal 28.07.2016 (ovviamente, inizio dell'ultima versione del server);

Tutto ciò si applica al terminale MT5 versione 1395 e ai conti reali del mercato dei derivati in Open-Broker. In linea di principio, l'argomento è chiuso.

Avete controllato anche la direzione degli scambi?
 

Ho una domanda su CopyBuffer

Forum sul trading, sistemi di trading automatico e test di strategie di trading

mql5 ti permette di scrivere un indicatore che disegna grafici in diverse finestre o accede ai buffer degli indicatori in altre finestre?

fxsaber, 2016.09.09 10:20

Ho questa domanda. È ragionevole (dal punto di vista delle prestazioni) quando si usa CopyBuffer aggiungere i buffer per numero di valori cambiati(il conteggio dei parametri di input non è zero) o fare sempre una copia completa del buffer?

ma quasi la stessa domanda su CopyTicks.

È ragionevole (dal punto di vista delle prestazioni) quando si usa CopyTicks aggiungere nuovi valori alle zecche già raccolte o fare sempre la richiesta completa dal luogo in cui le zecche sono richieste e non memorizzare i valori precedentemente raccolti?

 
Quando si aggiungono zecche a un array dinamico, quanto reserve_size in ArrayResize è meglio?
 
fxsaber:
Quando si aggiungono zecche a un array dinamico, quanto reserve_size in ArrayResize è meglio?
Un array dinamico è limitato a INT_MAX, quindi è meglio impostare subito questa dimensione.
 
prostotrader:
Un array dinamico è limitato a INT_MAX, quindi è meglio impostare subito l'array a questa dimensione.
È un peccato per la memoria dell'uccello.
 
prostotrader:
Un array dinamico è limitato a INT_MAX, quindi è meglio impostare subito l'array a questa dimensione.
Mikalas, sei tu? :-)
 
Dennis Kirichenko:
Mikalas, sei tu? :-)
Примечание

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

Общее число элементов в массиве не может превышать 2147483647.
 
prostotrader:
Posso vedere dalla tua scrittura che lo sei ;-)
 

Lo script emette dei tick quando le migliori bande sono cambiate nello stesso millisecondo

#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");
}

Parte del risultato:

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

Qui, nello stesso millisecondo qualcuno è riuscito a ritirare il suo BuyLimit= 98230. Esattamente ritirato, non è stato schiacciato con il pennarello.

La verifica ha dimostrato che tutte queste azioni entro un millisecondo sono prelievi (non esecuzioni) del limite migliore dalla tazza.

Un'altra parte del risultato:

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

Qui, in qualche modo all'apertura della sessione qualcuno è riuscito a rimuovere sia SellLimit che BuyLimit in un millisecondo. Cioè due azioni in un millisecondo!

Come può essere? Dopo tutto, nemmeno l'HFT può rimuovere un ordine limite in meno di 1 ms.

O se attraverso OrderSendAsync vengono inviati due ordini limite (BuyLimit1_price < BuyLimit2_price) all'interno dello spread, allora la borsa genererà due tick consecutivi con miglioramento del prezzo bid allo stesso tempo (con una precisione di 1ms)?

 
fxsaber:


Come può essere? Dopo tutto, nemmeno gli HFT possono rimuovere un ordine limite in meno di 1ms.


Dove ha ottenuto questa conoscenza?

Oltre a Plaza II, c'è un protocollo FAST/FIX

Ci sono centinaia di operazioni in 1ms.