Sequenza di esecuzione di Init() e DeInit() - pagina 18

 
Alexey Kozitsyn:
Cioè usando le stampelle? Posso fare un esempio?

Non puoi aggiungere un indicatore tramite ChartIndicatorAdd() a un grafico che ha un simbolo o un TF diverso. Verrà mostrato un errore.

https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd

ChartIndicatorAdd

Aggiunge un indicatore con l'handle specificato alla finestra del grafico specificato. L'indicatore e il grafico devono essere disegnati sullo stesso simbolo e timeframe.

Questa è la restrizione ora. Non sarà nei servizi.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Una piccola punta di cappello, quasi sul tema del subj.

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

Bug, bug, domande

fxsaber, 2016.09.23 10:48

  1. Impostiamo l'indicatore su un grafico NONE
    #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE;
    
    void OnInit()
    {
      ::SetIndexBuffer(0, Buffer, INDICATOR_DATA);
      
      handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0));  
    }
    
    #define  TOSTRING(A) #A + " = " + (string)A + "\n"
    
    int OnCalculate( const int rates_total,
                     const int prev_calculated,
                     const datetime &time[],
                     const double &open[],
                     const double &high[],
                     const double &low[],
                     const double &close[],
                     const long &tick_volume[],
                     const long &volume[],
                     const int &spread[] )
    {
      if (handle != INVALID_HANDLE)
      {
        Buffer[rates_total - 1] = MathRand();
        
        double BufferCopy[];
        
        if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0)
          Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1]));
      }
      
      return(rates_total);
    }
  2. Rimuovere l'indicatore dal grafico a mano.
  3. Nel log vediamo che l'indicatore continua a funzionare. Potete chiudere tutti i grafici nel terminale, ma sarà ancora in esecuzione. E non servirà, ovviamente,
    void OnDeinit( const int Reason )
    {
      if (handle != INVALID_HANDLE)  
        IndicatorRelease(handle);
      
      return;
    }
  4. Il riavvio del terminale ferma l'esecuzione dell'indicatore.
  5. Quanti indicatori possono essere eseguiti in questo modo nell'inattività, e noi non ne sappiamo nulla! Non c'è nessun controllo.
Senza alcun reclamo agli sviluppatori.
 
fxsaber:
Questa è una restrizione ora. Non sarà nei servizi.

Non è affatto quello di cui stavo parlando. Non aggiungendo un indicatore da un Expert Advisor, ma creando un indicatore utilizzando un Expert Advisor.

Riguardo a questo:

Che i servizi o la capacità di eseguire più EA su un singolo grafico non possono coprire completamente le trappole di cui si sta discutendo?

Se non c'è la possibilità di creare indicatori usando i servizi, il problema di creare un indicatore con dati da un file non scomparirà. Se la sequenza OnDeinit() -> OnInit() non è controllata. Il cambiamento di TF è un'azione dell'utente, e la risposta a questa azione (OnDeit()) avverrà quando questo non è necessario (dopo OnInit() o forse anche dopo OnCalculate()?

Cioè, se l'indicatore registra i dati in un file e traccia una serie di grafici basati su questi dati, e i dati non sono scritti "consecutivamente", la visualizzazione corretta di tutti i dati non avverrà.

Ma se il servizio fosse un programma globale (come GPT, ma l'intero programma) e potesse creare buffer di indicatori, e i calcoli non fossero interrotti da azioni degli utenti come il cambio di TFs / chiusura del grafico - allora il problema non esisterebbe. Ma nel frattempo, gli indicatori sono castrati, come al solito.

 
Alexey Kozitsyn:

Non è affatto quello di cui stavo parlando. Non aggiungendo un indicatore da un EA, ma creando un indicatore usando un EA.

Non capisco la terminologia.

 
fxsaber:

Non capisco la terminologia.

Calcolo e visualizzazione dei dati con scrittura nei buffer degli indicatori, non solo visualizzazione dei dati.
 
Slawa:

Ancora nessuna soluzione per OnChartEvent

Cosa vuol dire che non c'è soluzione? Che tipo di servizio sarebbe senza la possibilità di accedere al mouse? E vorrei gestire anche gli eventi dell'utente.
 
Alexey Kozitsyn:
Calcolo e visualizzazione dei dati con scrittura nei buffer degli indicatori, non solo visualizzazione dei dati.

Si lamentano che i dati calcolati dall'indicatore non possono essere trasferiti in modo affidabile e logico a un'altra copia di questo indicatore durante il cambio del TF.

Questo è facilmente realizzabile attraverso i servizi se il servizio farà la parte di calcolo e l'indicatore la visualizzerà.

In tutti gli altri casi, che non rientrano in quelli evidenziati in grassetto, si può continuare a scrivere gli indicatori come quelli classici.

 
fxsaber:

Si lamentano che i dati calcolati dall'indicatore non possono essere trasferiti in modo affidabile e logico a un'altra copia di questo indicatore durante il cambio del TF.

Questo si fa facilmente attraverso i servizi, se il servizio farà la parte di calcolo e l'indicatore la visualizzerà.

In tutti gli altri casi, che non rientrano in quelli evidenziati in grassetto, si può continuare a scrivere indicatori nel modo classico.

Ok, beh, vedremo cosa otterremo. Quando sarà la beta?
 
Alexey Kozitsyn:
Ok, beh, vedremo cosa succede. Quando c'è la beta?
Se do il via libera, sarà stasera.
 
Nikolai Semko:
Cosa vuol dire che non c'è soluzione? Che tipo di servizio sarebbe senza la possibilità di accedere al mouse? E vorrei anche gestire gli eventi dell'utente.

Nessuna soluzione significa "non si sa ancora come risolvere", non "non lo farà"

E non c'è alcun problema con gli eventi personalizzati

Motivazione: