Come ottenere la lunghezza di enum e item in MQL4/MQL5? - pagina 2

 
Alain Verleyen:
La lunghezza non è mai sconosciuta e questo argomento è solo il risultato di una cattiva progettazione.
Questo requisito proviene da un progetto AutoTester.
In molti indicatori/EA, i parametri di input contengono enum personalizzati, abbiamo bisogno di capire quale elemento (e relativo valore) in enum.
Quindi, non dire "cattivo design". Blah...blah...
 
Xiangdong Guo:
Questo requisito proviene da un progetto AutoTester.
In molti indicatori/EA, i parametri di input contengono enum personalizzati, abbiamo bisogno di capire quale elemento (e relativo valore) in enum.
Quindi, non dire "cattivo design". Blah...blah...
Certo che è un cattivo design. Ma non è un problema per me.
 
Marco vd Heijden:
Cosa intendi per "lunghezza di enum"?
enum fruit
  {
   APPLE=0,//APPLE
   BANANA=1,//BANANA
   GRAPE=2,//GRAPE
   ORANGE=3,//ORANGE
   CARROT=4,//CARROT
  };
  
sinput fruit type;//PICK A FRUIT 

Forse la carota non è un frutto... non ho ancora capito cosa intende Xiangdong Guo per 'lunghezza dell'enum'.

Il numero di lettere del nome di ogni stringa di opzioni?

Quante opzioni possibili?

Il valore numerico dell'opzione?

Non solo cattivo design, ma anche non molto chiaro su ciò che intende.

 
Marco vd Heijden:
Il numero di valori, quindi 5 nel vostro esempio di frutta.
 
Alain Verleyen:
Il numero di valori, quindi 5 nel tuo esempio di frutta.

Sono d'accordo che è statico, non può essere variabile, quindi sarà sempre un valore fisso conosciuto per iniziare.

Tuttavia se Xiangdong Guo sta testando degli indicatori che non ha progettato o scritto lui stesso, e vuole conoscere o rilevare automaticamente i parametri di input...

Non sono sicuro di come conoscere il numero di opzioni disponibili potrebbe aiutare, forse vuole fare test incrociati su tutte le opzioni disponibili e sta semplicemente cercando il numero di test da eseguire?

farei una scansione per le opzioni assunte per risolvere questi valori, una volta che si tenta di convertire fuori dai confini delle opzioni disponibili genererà non può convertire l'errore enum poiché non esiste.

 
Marco vd Heijden:

MT4/MT5 usano funzioni C++/C# per recuperare elementi da enum. Ma MetaQuotes non porta queste funzioni in MQL4/MQL5. Hum...hum...

enum DURATION_INTERVALS  // Enumeration of named constants
   {
    month=1,     // Interval of one month
    two_months,  // Two months
    quarter,     // Three months - quarter
    halfyear=6,  // Half a year
    year=12,     // Year - 12 months
   };

input DURATION_INTERVALS HistoryDuration = month;

 
Xiangdong Guo:

MT4/MT5 usano funzioni C++/C# per recuperare elementi da enum. Ma MetaQuotes non porta queste funzioni in MQL4/MQL5. Hum...hum...

Quale funzione? Qual è il problema? Perché vuoi fare un ciclo attraverso gli elementi dell'enum?
 
Alain Verleyen:
Quale funzione? Qual è il problema? Perché vuoi fare un ciclo attraverso gli elementi dell'enum?

Se qualcuno vuole/ha bisogno di fare qualcosa che non è possibile con MQL non significa necessariamente "cattivo design".

Per iniziare l'argomento: non è possibile fare quello che vuoi nella versione attuale di MQL.

L'unico modo è copiare tutti gli elementi in un array e fare il vostro ciclo usando quell'array. Ma è possibile farlo solo quando/se si può modificare il codice.

 
Andrey Barinov:

Se qualcuno vuole/ha bisogno di fare qualcosa che non è possibile con MQL non significa necessariamente "cattivo design".

Per iniziare l'argomento: non è possibile fare quello che vuoi nella versione attuale di MQL.

L'unico modo è copiare tutti gli elementi in un array e fare il vostro ciclo usando quell'array. Ma è fattibile solo quando/se si può modificare il codice.

Usare un enum al posto di un array è una cattiva progettazione. Non è così?

 
Alain Verleyen:

Usare un enum invece di un array è un cattivo design. Non lo è?

No, usare un array invece di un enum è una cattiva progettazione.

Esempio: Immaginate di avere un valore di stringa. E il compito è quello di scoprire se questa stringa è uguale/contiene in sé uno dei nomi degli elementi di enum (EnumToString()).

Come risolvereste questo?

Motivazione: