Domanda sulle quotazioni FORTS - pagina 3

 

Si consiglia di mantenere l'orario del computer preciso, in modo che ci siano meno possibilità di sbagliare i registri.

Grazie per lo script: ecco i risultati di questo script in 1 minuto 17:36

CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 3
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 3
 CollectTicks (ED-12.14,M1)      2014.11.10 17:36:12; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:26; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:28; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2474; Ask = 1.2476; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2473; Ask = 1.2475; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2473; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2472; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:43; Bid = 1.2472; Ask = 1.2474; Last = 1.2474; Vol = 2

La particolarità di OnTick è che reagisce sia ai cambiamenti di Bid/Ask (flusso di informazioni) che di Last (flusso di scambi).

Di conseguenza, il numero di chiamate OnTick per gli strumenti scambiati in borsa è consapevolmente più grande del numero di transazioni commerciali.

Perché si fa così?

  1. non si può soffocare un Expert Advisor solo con transazioni commerciali e non dargli informazioni sui cambiamenti del mercato (una cosa è chiamarlo 5 volte, un'altra è chiamarlo 15 volte)
  2. è impossibile dare zero ultimo e ultimo_volume nella recensione del mercato dal vivo, perché alcuni commercianti esploderanno


C'è un'altra cosa con il fatto che negli aggiornamenti batch, quando due o più tick su uno strumento arrivano allo stesso tempo, OnTick viene chiamato una volta sola. Questo ci permette di non rallentare il flusso delle quotazioni in entrata e di non fare un'enorme coda di tick per gli Expert Advisors che rallentano.

Presto abiliteremo il flusso Time & Sales, che ci permetterà di analizzare accuratamente il feed delle transazioni.

 
Renat:

È consigliabile mantenere l'orario del computer preciso, in modo che ci siano meno possibilità di sbagliare i registri.

Grazie per lo script: ecco i risultati di questo script in 1 minuto 17:36

La particolarità di OnTick è che reagisce sia ai cambiamenti di Bid/Ask (flusso di informazioni) che di Last (flusso di scambi).

Di conseguenza, il numero di chiamate OnTick per gli strumenti scambiati in borsa è consapevolmente più grande del numero di transazioni commerciali.

Perché si fa così?

  1. non si può soffocare un Expert Advisor solo con transazioni commerciali e non dargli informazioni sui cambiamenti del mercato (una cosa è chiamarlo 5 volte, un'altra è chiamarlo 15 volte)
  2. è impossibile dare zero ultimo e ultimo_volume nella recensione del mercato dal vivo, perché alcuni commercianti esploderanno


C'è un'altra cosa con il fatto che negli aggiornamenti batch, quando due o più tick di strumento arrivano allo stesso tempo, allora OnTick viene chiamato una volta sola. Questo permette di non rallentare il flusso delle quotazioni in entrata e di non fare un'enorme coda di tick per rallentare gli EAs.

Presto includeremo un flusso Time & Sales, che ci darà la possibilità di analizzare accuratamente il nastro degli scambi.

Tutto questo è fantastico, naturalmente, ma per FORTS, dove ci sono pile, si sarebbe dovuto aggiungere un flag di citazione alla struttura MqlTick.

La "moltiplicazione" dei trade non è terribile - la cosa peggiore è che i veri trade vengono persi.

P.S. Il mio BAN è legato al mio indirizzo IP, per favore rimuovilo, altrimenti devo reinstallare il mio browser ogni volta per risponderti.

 

Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.

Questo approccio si traduce in quanto segue:

Come dovrebbe essere:

Tempo di carta (mcs) Prezzo Qtà

317922.000000 RTS-12.14 [FORTS] 18:44:54 199000.000000 104140.000000 1.000000

317923.000000 RTS-12.14 [FORTS] 18:44:54 261000.000000 104130.000000 1.000000
317924.000000 RTS-12.14 [FORTS] 18:44:54 587000.000000 104140.000000 1.000000
317925.000000 RTS-12.14 [FORTS] 18:44:54 589000.000000 104140.000000 1.000000
317926.000000 RTS-12.14 [FORTS] 18:44:54 691000.000000 104140.000000 1.000000
317927.000000 RTS-12.14 [FORTS] 18:44:54 691000.000000 104140.000000 1.000000
317928.000000 RTS-12.14 [FORTS] 18:44:54 842000.000000 104130.000000 2.000000
317929.000000 RTS-12.14 [FORTS] 18:44:54 919000.000000 104150.000000 1.000000
317930.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104150.000000 1.000000
317931.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104150.000000 1.000000
317932.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 1.000000
317933.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 1.000000
317934.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 3.000000
317935.000000 RTS-12.14 [FORTS] 18:44:55 375000.000000 104140.000000 1.000000
317936.000000 RTS-12.14 [FORTS] 18:44:55 375000.000000 104130.000000 5.000000
317937.000000 RTS-12.14 [FORTS] 18:44:55 796000.000000 104130.000000 1.000000
317938.000000 RTS-12.14 [FORTS] 18:44:55 799000.000000 104130.000000 2.000000
317939.000000 RTS-12.14 [FORTS] 18:44:56 54000.000000 104160.000000 1.000000
317940.000000 RTS-12.14 [FORTS] 18:44:57 235000.000000 104160.000000 1.000000
317941.000000 RTS-12.14 [FORTS] 18:44:57 451000.000000 104140.000000 2.000000
317942.000000 RTS-12.14 [FORTS] 18:44:57 487000.000000 104140.000000 6.000000
317943.000000 RTS-12.14 [FORTS] 18:44:57 521000.000000 104160.000000 1.000000
317944.000000 RTS-12.14 [FORTS] 18:44:57 621000.000000 104160.000000 1.000000
317945.000000 RTS-12.14 [FORTS] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FORTI] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 RTS-12.14 [FORTS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000
317953.000000 RTS-12.14 [FORTS] 18:44:59 56000.000000 104160.000000 1.000000
317954.000000 RTS-12.14 [FORTS] 18:44:59 560000.000000 104140.000000 1.000000
317955.000000 RTS-12.14 [FORTS] 18:44:59 604000.000000 104140.000000 1.000000
317956.000000 RTS-12.14 [FORTS] 18:44:59 647000.000000 104160.000000 1.000000


Come si ottiene in MT5:

NE 0 18:44:54.483 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:54 Bid = 104130 Ask = 104150 Last = 104140 Vol = 1
ES 0 18:44:54.639 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:54 Bid = 104130 Ask = 104150 Last = 104130 Vol = 2
OR 0 18:44:54.720 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:54 Bid = 104130 Ask = 104150 Last = 104150 Vol = 1
NQ 0 18:44:54.983 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:55 Bid = 104140 Ask = 104150 Last = 104150 Vol = 1
FP 0 18:44:55.139 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:55 Bid = 104140 Ask = 104160 Last = 104160 Vol = 3
JO 0 18:44:55.174 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:55 Bid = 104140 Ask = 104160 Last = 104130 Vol = 5
GN 0 18:44:55.206 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 5
RM 0 18:44:55.592 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 2
IL 0 18:44:55.891 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:56 Bid = 104130 Ask = 104160 Last = 104160 Vol = 1
HJ 0 18:44:55.921 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:56 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
RI 0 18:44:57.032 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
PH 0 18:44:57.242 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
FG 0 18:44:57.297 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 6
PF 0 18:44:57.328 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
JE 0 18:44:57.436 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
QD 0 18:44:57.838 FORTSTicksAction (RTS-12.14,M1) Ora = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 3
DP 0 18:44:58.514 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 13
RR 0 18:44:58693 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:58 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
JP 0 18:44:58795 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CO 0 18:44:58.852 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
GN 0 18:44:59.358 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
MM 0 18:44:59.406 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
IL 0 18:44:59.453 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CK 0 18:50:31.437 FORTSTicksAction (RTS-12.14,M1) Ora = 18:50:24 Bid = 0 Ask = 0 Last = 104160 Vol = 1
KH 0 18:50:33.357 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:50:24 Bid = 104080 Ask = 104180 Last = 104160 Vol = 1


Questi sono tutti ultimi appena prima della chiusura della sessione (cioè non ci sono quotazioni inferiori fino alla fine della compensazione).

Come punto di partenza prendiamo le tre linee segnate in nero. Ci sono due domande:

1.Dove sono andati quelli evidenziati in rosso?

2.da dove viene l'evidenziato in blu?


Un'altra domanda (opzionale) - che intervallo di tempo significa "arrivo simultaneo"?

 
Dima_S:

Questo approccio si traduce in quanto segue:

317945.000000 RTS-12.14 [FORTS] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FORTI] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 RTS-12.14 [FORTS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000



Queste sono tutte le ultime appena prima della chiusura della sessione (cioè nessuna quotazione inferiore fino alla fine della compensazione).

Prendiamo le tre linee evidenziate in nero come punto di partenza. Ci sono due domande:

1.Dove sono andati quelli evidenziati in rosso?

Sono arrivati in un unico pacchetto di rete molto probabilmente e sono stati chiamati come un unico OnTick. Ci sono stati 8 tick in un secondo, tre di loro erano chiamate singole, e gli ultimi 5 molto probabilmente sono arrivati in un pacchetto con l'ultima citazione mostrata come Ultimo.


2. Da dove viene l'evidenziazione blu?

Questo è il postmarket. Diamo anche la possibilità di catturare eventi post-mercato. È qui che il ritiro delle offerte di solito funziona solo.


Un'altra domanda (opzionale) - che intervallo di tempo significa "arrivo simultaneo"?

Non è un intervallo, ma piuttosto un pacchetto fisico di rete. Un pacchetto arriva su 2-3-4 tick, sono tutti sovrapposti nella base, ma la chiamata OnTick va una volta sola.

C'è anche la possibilità che l'Expert Advisor sia rallentato (occupato) e che una nuova quotazione venga aggiunta al database ma OnTick non venga chiamato, poiché l'Expert Advisor sta lavorando. Se non ci fosse un meccanismo di questo tipo, sarebbe facile far traboccare le code di quotazioni in entrata per l'Expert Advisor e iniziare a inviare le vecchie quotazioni ad esso.

 

Renat!

Grazie mille per la spiegazione dettagliata, ma...

Mi sembra che un tale approccio sia inaccettabile per il FORTS.

Dovrebbe essere: Quote - volume, e nient'altro.

C'erano 11 citazioni, quindi dovrebbero essercene 11 in OnTick.

Non è così?

 

Sbagliato.

Non confondete la questione della consegna di flussi di dati corretti e accurati al terminale con la chiamata/notifica di esperti.

Tutti i dati sono consegnati accuratamente e correttamente al terminale, la sua base. Basta confrontare i grafici.

D'altra parte, l'avvio dell'Expert Advisor è una notifica indipendente e asincrona. Il pacchetto di dati in arrivo non può aspettare alcuni esperti lenti, ma deve essere applicato immediatamente all'ambiente di mercato e solo facoltativamente (se l'esperto ha finito la chiamata precedente) eseguire l'esperto.

Pensate alla situazione: un flusso di citazioni 2 al secondo e un Expert Advisor funzionante, che rallenta, fa dei trade, ma richiede che le nuove citazioni in attesa nella coda non siano imposte all'ambiente di mercato del terminale, finché l'EA non finisce il suo lavoro.

Riesci a vedere dove questo porterebbe? L'intero terminale comincerà a ritardare tutti i processi per il bene della sciocca idea di mantenere un'istantanea di mercato sullo stato della quotazione in corso di elaborazione. E se si pensa ad altri strumenti, ci si spara da soli.

Ecco perché l'overlay degli aggiornamenti di mercato è sempre prioritario, istantaneo e indipendente da altri processi. Tutti gli altri devono stare al passo con il mercato in modo asincrono.

 
Renat:

Sbagliato.

Non confondete la questione della consegna di flussi di dati corretti e accurati al terminale con la chiamata/notifica di esperti.

Tutti i dati sono consegnati accuratamente e correttamente al terminale, la sua base. Basta confrontare i grafici.

D'altra parte, l'avvio dell'Expert Advisor è una notifica indipendente e asincrona. Il pacchetto di dati in arrivo non può aspettare alcuni esperti lenti, ma deve essere applicato immediatamente all'ambiente di mercato e solo facoltativamente (se l'esperto ha finito la chiamata precedente) eseguire l'esperto.

Pensate alla situazione: un flusso di citazioni 2 al secondo e l'Expert Advisor funzionante, che sta frenando, fa dei trade, ma richiede che le nuove citazioni in attesa nella coda non siano imposte all'ambiente di mercato del terminale, fino a quando Sua Maestà l'Expert Advisor finisce il suo lavoro.

Riesci a vedere dove questo porterebbe? L'intero terminale comincerà a ritardare tutti i processi per il bene della sciocca idea di mantenere un'istantanea di mercato sullo stato della quotazione in corso di elaborazione. E se si pensa ad altri strumenti, ci si spara da soli.

Ecco perché l'overlay degli aggiornamenti di mercato è sempre prioritario, istantaneo e indipendente da altri processi. Tutti gli altri devono stare al passo con il mercato in modo asincrono.

Non sono d'accordo.

Diciamo che non uso la tazza (bid e ask sono nel tick)

Che idea sulla situazione del mercato FORTS avrò io (un esperto) senza conoscere la quotazione

e il volume?

Infatti, per FORTS, possiamo non passare bid e ask (sono nel ticker).

I cambiamenti nel codice sono minimi - bid e ask non vengono passati al mercato.

 
Mikalas:

Non sono d'accordo.

Rileggete più volte la mia spiegazione, per favore.

Diciamo che non uso un book di tassi (bid e ask sono nel tick)

Quale visione del mercato FORTS avrò (l'esperto) con una quotazione che non è chiara

Con la quotazione attuale aggiornata in modo asincrono e nessun'altra.

Se sei stato chiamato, questo è tutto - solo la citazione che hai nel pacchetto è di fronte a te. Se ci sono 2 citazioni nel lotto, si vedrà solo l'ultima. Perché nessuno passerà la prima quotazione all'Expert Advisor e aspetterà che l'Expert Advisor finisca l'operazione. La vecchia citazione è passata e se non l'avete colta in tempo per risolverla, significa che il treno è passato. Usando quella vecchia citazione, non sarete in grado di eseguire nulla. E l'attuale/ultimo è anche dubbio che venga eseguito, perché il mercato potrebbe essere cambiato al momento dell'invio dell'ordine.

Nessun "non tradurre bid/ask" aiuterà. Le zecche obsolete sono zecche obsolete - nessuno congelerà il mercato e non vi lascerà lavorare con le vecchie zecche.

Se vuoi, puoi farlo:

  1. mettere il terminale in colocation più vicino al broker su un computer ad alta velocità e prendere sempre più
  2. mettere in loop l'EA, scansionare costantemente il mercato e guardare il mercato per ottenere tutto più spesso.
  3. analizzare il grafico, analizzare il mercato

Insieme a Time & Sales penseremo a fornire un accesso diretto all'ultimo flusso di prezzi in tick, in modo da poter accedere a tick consecutivi. Nella revisione del mercato, lo raccogliamo in modo sessualizzato. Questo darà più opportunità ai bagarini.

 

Renat:

Insieme a Time & Sales, prenderemo in considerazione la possibilità di fornire un accesso diretto all'ultimo flusso di prezzi in tick, in modo da poter accedere a tick coerenti. In Market Watch lo raccogliamo in modo sessualizzato. Questo darà più opportunità ai bagarini.

È l'unica soluzione accettabile. Si spera che ci siano code phypho per determinati simboli. Questo risolverà un altro problema, irrisolvibile all'interno di questo modello di eventi, di ottenere quotazioni senza perdite per simboli diversi dal simbolo EA.
 

Ho ancora dei dubbi.

Metterò questo in azione:

//+------------------------------------------------------------------+
//|                                                    Kotirovki.mq5 |
//|                                                   Copyright 2014 |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Mikalas"
#property link      "http://www.mql5.com"
#property version   "1.02"
//
MqlTick curr_tick;
double  start_last   = 0;
double  start_bid    = 0;
double  start_ask    = 0; 
ulong   start_volume = 0;  
//  
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{

}
//+------------------------------------------------------------------+
//| Expert On Tick event function                                    |
//+------------------------------------------------------------------+  
void OnTick()
{
  if ( SymbolInfoTick( _Symbol, curr_tick ) )
  {
    if ( start_last == curr_tick.last )
    {
      if ( start_volume == curr_tick.volume )
      {
        if ( ( start_ask == curr_tick.ask ) &&
             ( start_bid == curr_tick.bid )  )
        {
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Новая котировка(Всё одинаковое)" );
        }
        else
        {
          start_ask = curr_tick.ask;
          start_bid = curr_tick.bid;
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Изменение ask или bid? Или же новая котировка?" );
        }
      }
      else
      {
        start_last = curr_tick.last;
        start_volume = curr_tick.volume;
        start_ask = curr_tick.ask;
        start_bid = curr_tick.bid;
        Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                               "; Ask = ", curr_tick.ask,
                               "; Last = ", curr_tick.last,
                               "; Vol = ", curr_tick.volume, "Новая котировка (Изменён объём)!" );
      }
    }
    else
    {
      start_last = curr_tick.last;
      start_volume = curr_tick.volume;
      start_ask = curr_tick.ask;
      start_bid = curr_tick.bid;
      Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                             "; Ask = ", curr_tick.ask,
                             "; Last = ", curr_tick.last,
                             "; Vol = ", curr_tick.volume, "Новая котировка! (Изменена котировка)" );
    }
  }
}

E domani vedremo cosa succede...

File:
Kotirovki.ex5  5 kb