Simboli personalizzati. Errori, bug, domande, suggerimenti. - pagina 33

 
RusPro #:

Ho provato il tuo test, è esattamente lo stesso - ritarda di un paio di secondi. non su custom, ma su silver futures

Strumento Silv-12.21. MICEX, broker BCS. Ma credo che non abbia importanza.

Ma nel tuo caso è possibile che il grafico non sia costruito sulle offerte, o che il broker abbia diversi flussi di quote e scambi (anche se, nello scambio - improbabile).

L'argomento qui riguarda gli strumenti personalizzati.

 
Andrey Khatimlianskii #:

Non abbiamo parlato di strumenti ordinari, ma di castum. Per definizione, tutte le informazioni su di loro sono disponibili nel terminale, niente deve andare al server.

Forse c'è qualche sciocchezza lì - come la richiesta di tempo del server o qualcosa del genere. In generale, è un abbaglio. E se si avvia un test se non c'è una connessione fisica, cosa succederà? Sono curioso, ma non ho niente su cui testarlo.

 

Ciao a tutti!
Per qualche motivo la storia non viene copiata nel simbolo personalizzato. Il codice è il più semplice. Non ottengo alcun errore, ma non ci sono virgolette nel simbolo personalizzato.

Voglio solo trasferire le quotazioni reali con 1 ora di offset al simbolo personalizzato.

Puoi dirmi perché il risultato è vuoto?
Grazie.


int OnInit()
  {
   
   string Sym1 = "EURUSD"; /// источник
   string Sym2 = "EURUSD2";   /// приемник
   int HBack = 1;   /// количество часов сдвига
   datetime tc = StringToTime(TimeCurrent());   /// конец участка
   datetime sht = tc - HBack * 60 * 60;
   datetime sht2 = tc - 2 * HBack * 60 * 60;
   
   MqlRates mrates[];
   
   if( CopyRates(Sym1, PERIOD_M1, sht, tc, mrates) < 0 ){
        
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
        
   if( CustomRatesReplace(Sym2, sht2, sht, mrates, WHOLE_ARRAY) < 0 ){
      
      Alert("Ошибка вставки исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
      
   
   return(INIT_SUCCEEDED);
  }
 

SymbolInfoXXX è in inesorabile ritardo rispetto a iClose:

simboli personalizzati (sia tick che barre).

Ho trovato cheSymbolInfoDouble e SymbolInfoTick, che sono chiamati nell'EA, lavorando su questo grafico, in qualche momentosi "bloccano": nella panoramica del mercato le quotazioni cambiano, il grafico viene aggiornato, iClose e CopyTicksRange ottengono i dati attuali, ma SymbolInfoXXX dà informazioni non aggiornate.

Nel processo di parsing si è arrivati al codice più semplice, che era destinato a rilevare questi "hangs", ma molto prima ha dimostrato il problema dall'altro lato:SymbolInfoXXX è semplicemente in inesorabile ritardo rispetto a iClose! Si può vedere a occhio nudo:


Esegui un tale EA sul tuo grafico di castum, per favore:

int OnInit(void)
{
        EventSetMillisecondTimer(10);
        return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
        EventKillTimer();
        Comment("");
}

void OnTimer(void)
{
        MqlTick tick;
        SymbolInfoTick( _Symbol, tick );

        Comment( "SymbolInfoInteger( _Symbol, SYMBOL_TIME ) = ", TimeToString( SymbolInfoInteger( _Symbol, SYMBOL_TIME ), TIME_SECONDS ),
                                        "\nSymbolInfoDouble( _Symbol, SYMBOL_BID ) = ", SymbolInfoDouble( _Symbol, SYMBOL_BID ),
                                        "\ntick.time = ", TimeToString( tick.time, TIME_SECONDS ),
                                        "\ntick.bid = ", tick.bid,
                                        "\niClose[0] = ", iClose( _Symbol, PERIOD_CURRENT, 0 ) );
}

(OnTimer può essere cambiato in OnTick, non cambia l'essenza)

Avete ritardi simili?


 
Andrey Khatimlianskii #:

Esegui un EA come questo sul tuo grafico dei naufraghi, per favore:

Hai dei freni simili?

Su un simbolo personalizzato che non si aggiorna e non ha un tick in Market Watch, non si sentono freni.

 
MOZART09 simbolo personalizzato non copia la storia. Il codice è il più semplice.

Non è possibile creare un simbolo personalizzato con il codice più semplice. C'è un sacco di ruzzoloni. Guarda qui.

Пользовательские символы: основы применения на практике
Пользовательские символы: основы применения на практике
  • www.mql5.com
Статья посвящена программной генерации пользовательских символов, с помощью которых демонстрируется несколько популярных способов отображения котировок. Предложен вариант малоинвазивной адаптации советников для торговли реальным символом с графика производного пользовательского символа. Исходные коды MQL прилагаются.
 
fxsaber #:

Su un simbolo personalizzato che non si aggiorna e non ha un tick in Market Watch, non sento i freni.

Probabilmente perché i freni sono proprio nell'aggiornamento (o meglio nella ricezione delle informazioni aggiornate da parte dell'EA in esecuzione su tale grafico)?

 
Andrey Khatimlianskii #:

Probabilmente perché è l'aggiornamento (o piuttosto il ricevere informazioni aggiornate da un EA in esecuzione su un tale grafico) che sta rallentando le cose?

Non uso simboli personalizzati aggiornabili, quindi non ne sono a conoscenza.

 

Build 3091, catturato citazioni appese (click):


L'ultimo tick restituito da SymbolInfoDouble e SymbolInfoTick è 04:52:07 (offerta 61083.19)

Allo stesso tempo i nuovi tick sono nella storia dello strumento, il grafico e marketwatch sono aggiornati, iClose restituisce il valore corretto.

C'è un codice per riprodurlo. Cos'altro devo sistemare?

 

Ho trovato una dipendenza - solo gli strumenti su cui i grafici erano aperti (e l'EA era in esecuzione per tracciarli, rispettivamente) si sono bloccati.

Se cambio lo strumento grafico con un altro (anche castrum, ma non attivo finora), tutto è a posto lì. Se torniamo a uno strumento "congelato", o apriamo un nuovo grafico per esso, SymbolInfoDouble e SymbolInfoTick sono ancora nello stesso stato congelato.