Un minuto e mezzo di differenza tra l'ora locale e l'ora fresca di zecca. Cosa fare. - pagina 3

 
pivomoe:

TimeCurrent() - Il tempo dell'ultimo tick su un carattere sarà inferiore al tempo di ritardo, quindi può essere utilizzato. Usare l'ora locale nella prima versione non è stata una buona idea.

Whoa... Beh, anche la versione attuale sembra non avere successo.

Leggiamo la definizione di TimeCurrent():

TimeCurrent

Restituisce l'ultima ora conosciuta del server, l'ora dell'ultimo arrivo della quotazione per uno dei simboli selezionati in "Market Watch".

Uno di essi significa che viene visualizzato il tempo del più frequente (per semplicità, il più liquido). E questo non è quello che volete. Quello che vi serve è SymbolInfoInteger( bla-blah, SYMBOL_TIME ). Sembra così.

 
Alexey Kozitsyn:

Whoa... dac, anche la versione attuale sembra non funzionare.

Leggi la definizione di TimeCurrent():

Con uno si intende che visualizza l'ora del cambiamento più frequente (per semplicità, il più liquido). E questo non è ciò di cui avete bisogno. Quello che vi serve è SymbolInfoInteger( bla-blah, SYMBOL_TIME ). Credo di sì.

È così che ho provato per prostotrader a portare quello che vedo il problema. Nell'ultima versione passo attraverso tutti i simboli e prendo il tempo massimo dell'ultimo tick ricevuto.

   for(int i=0; i<KolichestvoSimvolov; i++)     
   if( InformaziaOPoslednemTike[i].LastTick.time_msc > VremaySamogoSvegegoTikaPoVsemSimvolam ) VremaySamogoSvegegoTikaPoVsemSimvolam= InformaziaOPoslednemTike[i].LastTick.time_msc;
Alexey Kozitsyn:

Se qualcuno ha ricevuto informazioni su una zecca alle 17:59:01, e io non le ho ricevute nemmeno alle 18:00 - questo è un grosso problema.

Ed ecco la domanda. Qual è il problema (e ce n'è uno)? Nel server del broker, che non dà il tick (a tutti) per molto tempo, o in MT5, che non lo riceve per molto tempo.

Da un lato il tempo medio tra "TimeCurrent" e il tempo di arrivo dell'ultimo tick è di 5 millisecondi, dall'altro ci sono tick che arrivano con decine di secondi di caduta. Per esempio da 18 a 25. Ho preso un tick con un ritardo di 45 secondi. E questo su un paio di decine di simboli non liquidi.


+ a questo il problema del termine può essere aggravato usando CopyTicks per ottenere l'ultimo tick.
if(CopyTicks(Symbol(),ticks,COPY_TICKS_TRADE,0,1)==1) 

Non solo è più lento per tempi, ma può essere eseguito sul posto per un secondo e mezzo.

Ho anche capito che OnBookEvent è adatto solo per il trading su un simbolo.

 
pivomoe:

Questo è il modo in cui ho cercato per prostotrader di portare quello che vedo come un problema. Nell'ultima versione passo attraverso tutti i simboli e prendo il tempo massimo dell'ultimo tick ricevuto.

Da un lato il tempo medio tra "TimeCurrent" e il tempo di arrivo dell'ultimo tick è di 5 millisecondi, dall'altro ci sono tick che arrivano con un calo di decine di secondi. Per esempio da 18 a 25. Ho catturato una zecca con un ritardo di 45 secondi. E questo su un paio di decine di simboli non liquidi.


+ a questo il problema del termine può essere aggravato usando CopyTicks per ottenere l'ultimo tick.

Non solo è più lento per tempi, ma può essere eseguito in modo piatto per un secondo e mezzo.

Ho anche capito che OnBookEvent è adatto solo per il trading su un simbolo.

Eccoci qui. Si scopre che hai appena capito che il vetro del mercato si forma per ogni coppia di valute separatamente, quindi il trading sui suoi dati per diverse coppie non è possibile.

Spero che ti renderai presto conto che inseguire i dati di vari grafici in una certa sequenza, data da te, non corrisponde alla sequenza dei dati in arrivo sui nuovi tick nei grafici di diverse coppie di valute.

Pertanto, se EURUSD è controllato per primo, e BTCUSD è controllato per ultimo, e ci sono decine di simboli tra di loro, il tempo di ricezione dei tick può apparire come questo

18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 bene e così via. Senza alcuna teoria del complotto, colpa di MT o del broker. Quello che hanno programmato è quello che hanno ottenuto.

 
Алексей Тарабанов:

Eccoci qui. Si scopre che hai appena realizzato che il bicchiere si forma per ogni coppia di valute separatamente, quindi fare trading sui suoi dati non è possibile per diverse coppie.

Spero che ti renderai presto conto che inseguire i dati di vari grafici in una certa sequenza, data da te, non corrisponde alla sequenza dei dati in arrivo sui nuovi tick nei grafici di diverse coppie di valute.

Pertanto, se EURUSD è controllato per primo, e BTCUSD è controllato per ultimo, e ci sono decine di simboli tra di loro, il tempo di ricezione dei tick può apparire come questo

18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 bene e così via. Senza alcuna teoria del complotto, colpa di MT o del broker. Quello che abbiamo programmato è quello che abbiamo ottenuto.

Per catturare nuove zecche tramite OnBookEvent mi sono ispirato aprostotrade, che ha scritto che "è più corretto". Non uso il tick in sé, mi limito a sottoscrivere il suo aggiornamento per tutti i simboli nel rapporto di mercato.OnBookEven viene utilizzato per rilevare solo il simbolo che è stato utilizzato per aggiornare il tick. Poi viene controllato per un nuovo tick e poi guardo se l'EA ha impostato nuovi anti-record. Questa èin realtà l'intera funzione:

void OnBookEvent(const string &symbol)
  {   
   if( MestoPoluchenieTikov == ON_TIMER ) return;
//--- Ищем индекс символа для которого полученно событие OnBookEvent
   int IndeksSimvola= -1;
   for(  int i=0;  i < KolichestvoSimvolov; i++ )
   if(  symbol == GCInformaziaOPoslednemTike[i].Simvol  ) { IndeksSimvola= i; break; }
   
   if( IndeksSimvola== -1 ){Print(__FUNCTION__,"Не удалось найти символ по которому полученно событие OnBookEvent ");ExpertRemove();return;}
   
   bool PoluchiliNoviiTick= false;
          
    //--- Получаем тик заданным в настройках способом.
   if( SposobPoluchenieTikov == SYMBOL_INFO_TICK  ) PoluchiliNoviiTick= PolychaemNoviiTickSymbolInfoTick(GCInformaziaOPoslednemTike[IndeksSimvola]);
   if( SposobPoluchenieTikov == COPY_TICKS       )  PoluchiliNoviiTick= PolychaemNoviiTickCopyTicks(GCInformaziaOPoslednemTike[IndeksSimvola]);    
       
     //--- Смотрим не установлены ли новые рекорды.  
   if(  PoluchiliNoviiTick ) PitaemsayObnovitRekordi( GCInformaziaOPoslednemTike, IndeksSimvola );                 
   
   ObnovlaemInformacyyNaGrafikeEslePora();
 
  }   
Alexei Tarabanov:

Spero che tu capisca che inseguire i dati di diversi bicchieri in una certa sequenza, data da te, non corrisponde alla sequenza dei dati in arrivo sui nuovi tick nei bicchieri di diverse coppie di valute.

Per quanto ho capito, se non ricevo una tazza usando MarketBookGet, allora non cerco nulla. Forse, semplicemente non hai guardato il mio codice della seconda pagina.

 
pivomoe:

Ho avuto l'idea di catturare nuove zecche tramite OnBookEvent daprostotrade, che ha scritto che è "più corretto". Non uso il tick in sé, mi limito a sottoscrivere i suoi aggiornamenti per tutti i simboli nel rapporto di mercato.OnBookEven lo uso fondamentalmente solo per identificare il simbolo, per il quale il tick è stato aggiornato. Poi viene controllato per un nuovo tick e poi guardo se l'EA ha impostato nuovi anti-record. Questa èin realtà l'intera funzione:

Per quanto ho capito, se non ottengo la coppa usando MarketBookGet, allora non controllo nulla. Probabilmente non hai guardato il mio codice della seconda pagina.

Il segnale MT non viene elaborato finché il segnale precedente non viene elaborato.

 
pivomoe:

Ho avuto l'idea di catturare nuove zecche tramite OnBookEvent daprostotrade, che ha scritto che è "più corretto". Non uso il tick in sé, mi limito a sottoscrivere i suoi aggiornamenti per tutti i simboli nel rapporto di mercato.OnBookEven lo uso fondamentalmente solo per identificare il simbolo, per il quale il tick è stato aggiornato. Poi viene controllato per un nuovo tick e poi guardo se l'EA ha impostato nuovi anti-record. Questa èin realtà l'intera funzione:

Per quanto ho capito, se non ottengo la coppa usando MarketBookGet, allora non controllo nulla. Probabilmente non hai guardato il mio codice della seconda pagina.

Non l'ho fatto.

 
pivomoe:

La tua logica va bene, non ascoltare quelli che passano.

1. Cerca di tenere 3-5 strumenti (uno dei quali illiquido). Suonerà?

2. Eseguitelo su una macchina pulita senza altri software utilizzando internet. Si ripeterà?

3. Prova a separare la cattura della latenza in diversi EA (1 per strumento).

Se il problema non è nelle risorse (c'era qualche limitazione sul numero di thread assegnati a un terminale), allora il bug dovrebbe essere risolto.

 
Andrey Khatimlianskii:

La tua logica va bene, non ascoltare quelli che passano.

1. Cerca di tenere 3-5 strumenti (uno dei quali illiquido). Suonerà?

2. Eseguitelo su una macchina pulita senza altri software utilizzando internet. Si ripeterà?

3. Prova a separare la cattura della latenza in diversi EA (1 per strumento).

Se il problema non è con le risorse (c'era qualche limitazione sul numero di thread assegnati a un terminale), allora il bug dovrebbe essere risolto.

Grazie per la risposta. Oggi ho fatto un piccolo progresso nella risoluzione di questo problema. È trattato con il comando Sleep() tra le chiamate SymbolInfo(). Prima, mi limitavo a scorrere l'intera panoramica del mercato senza fare pause. L'ho testato su 40 simboli alla sera. Se Sleep(5) allora prendo "nuovo tick", che avrebbe dovuto essere due secondi fa. Ma Sleep(10) mostra un ritardo di 400 millisecondi (dovuto a Sleep(10) ( 40 simboli *10 ). Ho provato a testarlo su 4 simboli più liquidi al Vespro. Con Sleep(1) nessun ritardo.... tutto è perfetto. Qui non capisco come possa essere, se il simbolo nella revisione è piccolo SymbolInfo può essere usato senza pause. E se il simbolo è molto bisogno di usare le pause.

Ora le risposte:

1) Su liquido la sera non si gioca.

2) A 40 caratteri, si ripete anche con il software disattivato.

3) Non capisco cosa suggerite. Catturare nuovi tick contemporaneamente da due EAs in un terminale?

ZZZ Ora sto scavando nella direzione della fattibilità di chiamare SymbolInfo. Per esempio sono riuscito a scoprire che anche un simbolo nella panoramica del mercato non è in grado di inviare nuovi tick a più di 3,5 millisecondi di distanza (era di sera, però).

 
pivomoe:

1) Su quelli liquidi, non riproduce il vespro.

2) Su 40 caratteri si ripete anche con il software disattivato.

3) Non capisco cosa sta suggerendo. Catturare nuovi tick contemporaneamente da due EAs in un terminale?

ZZZ Ora sto scavando nella direzione della fattibilità di chiamare SymbolInfo. Per esempio sono riuscito a scoprire che anche un simbolo nella panoramica del mercato non è in grado di dare nuovi tick più di 3,5 millisecondi (era di sera però).

1. Prova ad aggiungere un illiquido

3. catturare le mancanze di uno strumento da un EA. Ed eseguire 40 EAs.

 
pivomoe:

Grazie per la vostra risposta. Oggi ho fatto un po' di strada per risolvere questo problema. È trattato con il comando Sleep() tra le chiamate SymbolInfo(). In precedenza, mi limitavo a scorrere l'intera panoramica del mercato senza fare pause. L'ho testato su 40 simboli alla sera. Se Sleep(5) allora prendo "nuovo tick", che avrebbe dovuto essere due secondi fa. Ma Sleep(10) mostra un ritardo di 400 millisecondi (dovuto a Sleep(10) ( 40 simboli *10 ). Ho provato a testarlo su 4 simboli più liquidi al Vespro. Con Sleep(1) nessun ritardo.... tutto è perfetto. Qui non capisco come possa essere, se il simbolo nella revisione è piccolo SymbolInfo può essere usato senza pause. E se hai molti caratteri, devi usare le pause.

Vi prego di fornirmi un pezzo di codice che catturi i ritardi. Proprio qui, tramite il pulsante di inserimento del codice.