![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
in un EA aggirando la necessità di valori di input per ogni indicatore.
L'alternativa nel suo backtester è di modificare manualmente ogni indicatore
con un buffer di segnale.
Prova questo un po' diretto ma l'unico approccio possibile finora.
Uscite:
Elementi ENUM:
Count=3
0 x1=-10
1 x2=0
2 x3=11
È importante specificare valori ragionevoli per i parametristart estop, perché il ciclo dal minimo al massimo valore intero (che è usato di default quando i parametri sono saltati) viene eseguito troppo lentamente tenendo conto che le funzioni stringa sono usate all'interno.
bool AddEnum(ENUMTYPE enumIn) {
enumIn = 0;
//iterate through enum and add as combo box
for(int i = 0; i<sizeof(enumIn); i++, enumIn++) {
m_list.AddItem(EnumToString(enumIn),i);
PrintFormat("adding %i = %s", i, EnumToString(enumIn));
}
return(0);
}
Ho aggiunto questo alla classe CComboBox, in modo da poter passare qualsiasi tipo ENUM, e lo aggiungerebbe come casella combinata.
Ma puoi cambiarlo per fare ciò di cui hai bisogno.
Il problema è che se non passate un ENUM e passate qualcosa come un doppio o un float, potreste mandare in crash la vostra app.
Non credo che ci sia un modo per controllare il datatype passato.
bool AddEnum(ENUMTYPE enumIn) {
enumIn = 0;
//iterate through enum and add as combo box
for(int i = 0; i<sizeof(enumIn); i++, enumIn++) {
m_list.AddItem(EnumToString(enumIn),i);
PrintFormat("adding %i = %s", i, EnumToString(enumIn));
}
return(0);
}
Ho aggiunto questo alla classe CComboBox, in modo da poter passare qualsiasi tipo di ENUM, e l'avrebbe aggiunto come casella combinata.
Ma puoi cambiarlo per fare ciò di cui hai bisogno.
Il problema è che se non passate un ENUM e passate qualcosa come un doppio o un float, potreste mandare in crash la vostra app.
Non credo che ci sia un modo per controllare il tipo di dati passato.
Sì, lo fa, oops. L'ho appena notato.
Si dà il caso che quando l'ho fatto, l'ENUM che stavo usando in realtà aveva 4 proprietà:\
enum Combolist1{item1, item2, item3, item4, item5};
for(int i = 0; GetLastError()==0; i++) {Per esempio, c'è una definizione enum:
enum ENUM_FRUIT {APPLE, BANANA, GRAPE};
Poi, voglio usarlo in un ciclo:
FRUIT_FIRST=APPLE, FRUIT_LAST=GRAPE};
for (ENUM_FRUIT i = APPLE; i <= FRUIT_LAST; ++i) {
Print(EnumToString(i));
}
#define FRUIT_FIRST APPLE
#define FRUIT_LAST GRAPE
for (ENUM_FRUIT i = APPLE; i <= FRUIT_LAST; ++i) {
Print(EnumToString(i));
}
PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6,
PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1,
PERIOD_H2, PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12,
PERIOD_D1, PERIOD_W1, PERIOD_MN1};
ENUM_TIMEFRAMES next(ENUM_TIMEFRAMES curr){
for(int i=0; gcPeriods[i] != curr; ++i){}
return gcPeriods[i+1];
}
Cattiva progettazione di cosa
significa che il numero di membri del negozio in enum?
So che questa conversazione è abbastanza vecchia, ma ecco un modo semplice per riempire un array di qualsiasi tipo enum.
Sto solo aggiungendo la mia soluzione per le generazioni future su come ho risolto questo.
Quindi il problema è conoscere il numero di voci nell' enum dinamicamente con la possibilità di aggiungere o rimuovere valori enum. Ho bisogno di saperlo per creare array di dimensioni fisse con valori enum come indice dell'array. Quello che tendo a fare è aggiungere un valore riservato alla fine dell'enum che viene usato solo come valore di lunghezza. Ecco un esempio.
Questo è bello e facile perché non avete bisogno di essere fissati all'ultima voce ovunque comeoppure potete aggiungere più voci alla fine dell'enum e l'array e il ciclo funzioneranno ancora.