Domande da un "manichino" - pagina 7

 
kPVT:

Ho un esperto con cui cerco di affrontare gli eventi.

Ricevo eventi che non corrispondono ad azioni.

Corrisponde esattamente a un clic sul grafico e a un clic di un pulsante

Un evento controverso id=9(CHARTEVENT_CUSTOM), che viene generato quando per esempio il grafico viene spostato e ci sono circa 10 eventi simili.

L'eventoCHARTEVENT_OBJECT_ENDEDIT non è stato controllato.

Non è tutto chiaro con tutto il resto. O la descrizione non corrisponde al numero dell'evento o l'evento di creazione di un oggetto è generato in modo errato quando si crea un oggetto manualmente.

Tutto sommato, per favore aiutatemi.

È meglio che tu vada così:

//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
  {
   string str_id="";
   switch(id)
     {
      case CHARTEVENT_KEYDOWN:          str_id="KEYDOWN";        break;
      case CHARTEVENT_OBJECT_CREATE:  str_id="OBJECT_CREATE";  break;
      case CHARTEVENT_OBJECT_CHANGE:  str_id="OBJECT_CHANGE";  break;
      case CHARTEVENT_OBJECT_DELETE:  str_id="OBJECT_DELETE";  break;
      case CHARTEVENT_CLICK:            str_id="CLICK";          break;
      case CHARTEVENT_OBJECT_CLICK:      str_id="OBJECT_CLICK";   break;
      case CHARTEVENT_OBJECT_DRAG:       str_id="OBJECT_DRAG";    break;
      case CHARTEVENT_OBJECT_ENDEDIT:    str_id="OBJECT_ENDEDIT"; break;
      case CHARTEVENT_CHART_CHANGE:      str_id="CHART_CHANGE";   break;
      default:
         if(id>CHARTEVENT_CUSTOM)       str_id="CUSTOM+"+IntegerToString(id-CHARTEVENT_CUSTOM);
         else                         str_id="UNKNOWN";
     }
//--- для отладки
   printf("ChartEvent :id=%s, l=%d d=%f s=%s",str_id,lparam,dparam,sparam);
//---
   ExtExpertPrg.ChartEvent(id,lparam,dparam,sparam);
  }
 

Probabilmente sto sbagliando qualcosa, ma cercherò di descrivere più dettagliatamente il motivo del mio malinteso.

AlexSTAL:

Si assegnano inizialmente delle corrispondenze numeriche alle costanti numeriche già assegnate CHARTEVENT_XXXXXXXXXXX...

Dove posso vedere quale valore numerico hanno le costanti CHARTEVENT_XXXXXXXXX?

Non l'ho trovato, così ho sperimentato e ho scoperto cheCHARTEVENT_KEYDOWN = 0 e CHARTEVENT_CLICK = 4, che corrisponde all'ordine di descrizione di queste costanti nell'aiuto.

Ho assegnato i numeri agli altri eventi di conseguenza, quindi c'è un array event[10].

Rosh:

Purtroppo non capisco la sua domanda. Cosa sta andando esattamente storto?

In base alla mia numerazione degli eventi e utilizzando l'Expert Advisor del mio post precedente:

Per esempio disegno una linea di tendenza -> eventoCHARTEVENT_OBJECT_CHANGE,

spostare questa linea -> l'eventoCHARTEVENT_OBJECT_CHANGE,

cambiare le proprietà tramite menu -> 2 eventiCHARTEVENT_CHART_CHANGE e CHARTEVENT_CUSTOM,

rimuovilo premendo Del -> evento solo CHARTEVENT_KEYDOWN, (se la numerazione degli eventi è sbagliata ci dovrebbero essere ancora 2 eventi, rimozione e pressione del pulsante).

Tutto questo si basa sulla mia numerazione.

Il prossimo...

Sto usando un Expert Advisor:

Disegnare una linea di tendenza -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

spostare questa linea -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

Cambio le proprietà tramite menu -> ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 Trendline 40716 e ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s=

Lo cancello premendo Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=

La situazione non si è chiarita.

Non si sa mai:

MT5 64x - build 458.

Il sistema è W7 64x Home Extended.

Grazie per la vostra reattività ))




Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
kPVT:

Probabilmente sto facendo qualcosa di sbagliato, ma cercherò di descrivere più dettagliatamente il motivo del mio malinteso.

Dove posso trovare il valore numerico delle costanti CHARTEVENT_XXXXXXXXX?

Non l'ho trovato, così ho sperimentato e ho scoperto cheCHARTEVENT_KEYDOWN = 0 e CHARTEVENT_CLICK = 4, che corrisponde all'ordine di descrizione di queste costanti nell'aiuto.

Ho dato al resto degli eventi dei numeri di conseguenza, ecco come è venuto fuori l'array event[10].

Questo non deve essere fatto in nessun modo!

I valori numerici sono assegnati dallo sviluppatore e possono essere cambiati in qualsiasi momento.

Si possono usare solo costanti di carattere

--------------

zioVic ti ha dato un esempio di uso corretto (o il mio snippet di aiuto)

--------------

Cosa stai facendo? Perché avete bisogno di una rappresentazione numerica?

 
AlexSTAL:

Questo non deve essere fatto in nessun caso!

I valori numerici sono assegnati dallo sviluppatore e possono essere cambiati in qualsiasi momento.

Si possono usare solo costanti di carattere

OK. Sono d'accordo che non si deve fare così.

Dimentica il mio lavoro manuale).

Andando avanti...

AlexSTAL:

zioVic ti ha dato un esempio di uso corretto (beh, o il mio pezzo di aiuto)

Come ho scritto sopra, usando l'esempiodi zioVic si ottengono anche eventi che non corrispondono all'azione.

kPVT:

Disegno di una linea di tendenza -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716 Invece diCHARTEVENT_OBJECT_CREATE.

.....

rimuovetelo premendo Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=Invece diCHARTEVENT_OBJECT_DELETE e poi CHARTEVENT_KEYDOWN

AlexSTAL:

Cosa stai facendo? Perché avete bisogno di una rappresentazione numerica?

È una lunga spiegazione e non ha importanza. Lasciamo perdere la mia numerazione.

La cosa principale è che sto cercando di dare un senso agli eventi, ma anche usando l'esempiodi zioVic non capisco l'incoerenza tra gli eventi generati e le azioni eseguite.

 
kPVT:

OK. Sono d'accordo che non si può fare.

Dimenticatevi del mio strizzacervelli).

Andando avanti...

Come ho scritto sopra, usando l'esempiodi zioVic otteniamo anche eventi che non corrispondono all'azione.

kPVT:


Aggiungilo all'inizializzazione:

   ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
   ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);

Andrà tutto bene:

Создание:
DS      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_CREATE, l=0 d=0.000000 s=M30 Horizontal Line 58241
DG      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=M30 Horizontal Line 58241
Удаление кл. Del:
EH      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=OBJECT_DELETE, l=0 d=0.000000 s=M30 Horizontal Line 58241
QD      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=
 

Alex grazie mille ha risolto il problema.

AlexSTAL:

Aggiungere all'inizializzazione:

....

Aggiunto al blocco esperto

void OnInit()
{
 ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
 ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

Ogni cosa è al suo posto.

Guardando l'aiuto, non c'è scritto da nessuna parte che questi due eventi devono essere "inizializzati" per avere tutti gli altri eventi corretti.

Li ho commentati e tutto funziona.

Si scopre che se Expert Advisor/indicatore non ha il blocco OnInit, si incasina con gli eventi.

Forse è l'idea, ma i programmatori di mql5 dovrebbero saperlo, per sicurezza.

 
Ho generato un Expert Advisor in Wizard, ma il tester genera un tester Core 1 fermato perché OnInit errore critico, qualcuno ha incontrato questo? Come si risolve? Dopo tutto, Wizard, OK, avrei fatto un errore lì ...
 
Europa:
Ho generato un Expert Advisor in Wizard, ma il tester genera un tester Core 1 fermato perché OnInit errore critico, qualcuno ha incontrato questo? Come si risolve? Dopo tutto, Wizard, avrei incasinato qualcosa lì...
Si prega di allegare il codice sorgente. E i parametri dei test.
 
uncleVic:
Allegare il codice sorgente risultante. E i parametri dei test.
File:
TheFirst.mq5  7 kb
 
Europa:

Non si è riprodotto.

Ho chiesto altri parametri di test. L'ho fatto:

Sia la versione che il bit rate di MT5.

Motivazione: