Discussione sull’articolo "Manuale MQL5: Controlli della finestra secondaria dell'indicatore - Pulsanti" - pagina 6

 
tol64:

Non necessariamente ogni secondo, c'è un'alternativa su un altro evento (già discusso). Vi prego di darmi un esempio di come l'ho fatto qui. ) A partire dalla condizione che l'Expert Advisor ha bisogno di questo evento, ma l'indicatore no. In questo modo sarà più chiaro.

P.S. Correzione. Ho commesso un errore. )) La tua variante non è più corretta. Non si adatta affatto. Quindi è meglio dare un esempio basato sulla condizione di cui sopra.

Se l'indicatore non ha bisogno di questo evento, semplicemente non lo elabora. Inoltre, l'Expert Advisor non dovrebbe disabilitare gli eventi di cui non ha bisogno. Può attivarli, ma non disattivarli. Perché non è affar suo quali eventi passino attraverso la sua finestra e chi ne abbia bisogno.

 
C-4:

Se l'indicatore non ha bisogno di questo evento, semplicemente non lo elabora. Inoltre, l'Expert Advisor non deve disattivare gli eventi di cui non ha bisogno. Può attivarli, ma non disattivarli. Perché non è affar suo quali eventi passino attraverso la sua finestra e chi ne abbia bisogno.

Il punto è che questo evento può essere non elaborato (si può semplicemente dimenticarlo). Ma questo non significa che la coda degli eventi nella funzione OnChartEvent() non si riempia di cose non necessarie in un determinato momento.

Questo significa migliaia di eventi inutili al minuto. E se ci sono diversi programmi sul grafico? Non è un problema?

Si sprecano molte meno risorse se si controlla ogni secondo se un evento è abilitato e lo si abilita se al momento non è abilitato ma è necessario. Neanche questo è un argomento? Allora fate a modo vostro.

Non ho altre argomentazioni. ) Rimango della mia opinione, poiché non ho sentito nulla che possa farmi cambiare idea.

Bene. Allora ho una domanda per coloro che pensano che questo evento non debba essere disabilitato dal programma che lo ha attivato.

Perché? )

Ovvero:

1. Perché lasciare qualcosa che non serve (migliaia di eventi al minuto)?

2. (in un'altra formulazione) Perché spendere più risorse quando se ne possono spendere meno?

Opzioni come "se un evento non è necessario, semplicemente non elaborarlo" personalmente non mi piacciono affatto. Non si può disabilitare uno, non si può disabilitare l'altro, e cosa si ottiene?

 

Caro autore dell'articolo, è inutile che tu spieghi le contraddizioni interne dei tuoi prodotti, che cerchi di combattere e insegnare ai "principianti".

Così, l'autore ha mostrato i momenti scivolosi che possono turbare il corretto funzionamento del suo indicatore. Bene, ora è chiaro al "principiante" che:

  1. Quando si elimina un programma dal grafico, si deve pensare a non danneggiare altri programmi.
  2. In nessun caso si devono inserire programmi in conflitto su un grafico, ma è meglio collocarli in altre finestre del grafico del simbolo in questione. Se qualcuno non lo sa, un simbolo può aprire un numero sufficiente di finestre del grafico.
  3. Ogni grafico ha le sue proprietà intrinseche. Pertanto, modificandole, si può disturbare il corretto funzionamento di altri programmi. Non è assolutamente il caso di farlo!
  4. Il programma deve essere "a prova di errore". Cioè, se un virus sotto forma di indicatore o di un altro programma cerca di modificare le proprietà di un grafico che utilizzate nei vostri programmi, dovete controllarlo. E se ciò accade regolarmente, rimuovete il virus!
  5. Gli errori nei programmi per i mercati finanziari portano molto spesso a ingenti perdite. Ricordatelo!
 
tol64:

1. Perché lasciare ciò che non serve (migliaia di eventi al minuto)?

2. (in un'altra formulazione) Perché spendere più risorse quando se ne possono spendere meno?

Opzioni come "se un evento non è necessario, semplicemente non elaborarlo" personalmente non mi piacciono affatto. Non si può disabilitare uno, non si può disabilitare l'altro e cosa si ottiene?

Otterrete un codice completamente controllato.

Si enfatizzano le prestazioni, ma diminuiscono così tanto con questo evento abilitato? Per rispondere a questa domanda, ho scritto appositamente un semplice Expert Advisor per testare questo evento. Dopo aver testato diverse combinazioni, ho ottenuto la seguente tabella:

Modalità
Carico % della CPU
EVENT_MOVE_MOUSE è abilitato, l'elaborazione di questo evento nell'Expert Advisor è abilitata.9%
EVENT_MOVE_MOUSE è abilitato, l'elaborazione di questo evento nell'Expert Advisor è disabilitata.
6%
EVENT_MOVE_MOUSE è disattivato, l'elaborazione di questo evento nell'Expert Advisor è disattivata.
5-6%
L'Expert Advisor è disattivato. Il grafico è chiuso. Spostate il mouse sulla finestra di MetaTrader.
5-6%

Come si può notare, il carico reale aumenta solo quando avviene l'elaborazione effettiva di questo evento. È da notare che, a giudicare dal carico della CPU, MetaTrader tiene traccia della posizione del mouse indipendentemente dal fatto che la sottoscrizione a questo evento sia abilitata o meno. In generale, si scopre che è inutile risparmiare risorse ipotetiche, perché il tracciamento del mouse verrà eseguito comunque.

Test del codice dell'Expert Advisor:

//+------------------------------------------------------------------+
//|Test.mq5 |
//| Copyright 2013, MetaQuotes Software Corp. | |
//| http://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ObjectCreate(0, "Edit", OBJ_EDIT, 0, 0, 0);
   ObjectSetInteger(0, "Edit", OBJPROP_XSIZE, 400);
   /Attivare e disattivare l'evento come si ritiene opportuno
   ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, false);
   
//---
   return(INIT_SUCCEEDED);
  }
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   //Commentare il blocco se non è necessario elaborare l'evento in arrivo.
   if(id == CHARTEVENT_MOUSE_MOVE)
   {
      string label = (string)lparam + " " + (string)dparam + " " + sparam;
      //printf(sparam);
      ObjectSetString(0, "Edit", OBJPROP_TEXT, label);
      ChartRedraw(0);
   }
}
Знакомство с MQL5: написание простого советника и индикатора
Знакомство с MQL5: написание простого советника и индикатора
  • 2010.03.16
  • Denis Zyatkevich
  • www.mql5.com
В этой статье проведен краткий обзор языка MQL5, приведен пример написания советника и индикатора. Данная статья ориентирована как на читателей, знакомых с программированием на языке MQL4, так и на тех, кто только начинает знакомство с программированием торговых систем и индикаторов.
 

1. È necessario considerare sempre il caso in cui un evento non venga visualizzato nello stack. Se può accadere qualcosa di critico nel caso in cui un evento venga perso, è molto grave.

2. Personalizzare il grafico a proprio piacimento è sbagliato. È come fare trading con una macchina da trading automatizzata senza un mago.

 
DC2008:

Caro autore dell'articolo, è inutile che tu spieghi le contraddizioni interne dei tuoi prodotti, che cerchi di combattere e insegnare ai "principianti".

Così, l'autore ha mostrato i momenti scivolosi che possono turbare il corretto funzionamento del suo indicatore. Bene, ora è chiaro per un "principiante" che:

...

Potete inventarvi altre 20 regole per giustificare il vostro senso di autostima e poi sicuramente confonderete voi stessi e "aiuterete" i principianti. Le contraddizioni e le incomprensioni in questo caso sono state osservate da voi. )

C-4:

Otterrete un codice completamente controllato.

...

Sarà controllato quando lo controllerete voi. In questo caso, si propone di lasciare tutto non controllato, cioè di lasciare un evento che non è necessario al momento e che può essere riprodotto molto spesso. Su esempi semplici potrebbe non essere evidente. Forse si vedrà la necessità di disabilitare tutto ciò che non serve in programmi più complessi.

 
TheXpert:

1. È necessario considerare sempre il caso in cui un evento non venga visualizzato nello stack. Se può accadere qualcosa di critico nel caso in cui un evento venga mancato, è molto grave.

...

Ad esempio, quando la coda degli eventi trabocca?
 

tol64:

Mi scusi, la sto per caso distraendo dallo scrivere un altro tutorial o una ricetta?

In caso contrario, continuiamo a parlare del tuo articolo sul controllo nella sottofinestra dell'indicatore. Quindi, proponi una soluzione di massa (o un'idea) su come realizzare un comodo menu in un indicatore. Bene, lo scopo dell'articolo è molto valido! Ma come può un programmatore "principiante" utilizzare tutto questo arsenale? Dove collocare le funzioni personalizzate? Dimostratelo con un esempio. E allo stesso tempo spiegare cosa è necessario correggere nel codice per utilizzare, ad esempio, 5 pulsanti? Consideratela una domanda da principiante.

 
tol64:
Come quando la coda degli eventi trabocca?
Si.
 
DC2008:
Siete così sicuri che tutto ciò che è scritto nel vostro articolo sia perfetto?