Discussione sull’articolo "MQL5 Cookbook: Implementazione di un array associativo o di un dizionario per l'accesso rapido ai dati" - pagina 3
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
Ho deciso di utilizzare questa classe nel mio EA come contenitore di strategie della forma (StrategyGUID, Strategy), dove StrategyGUID è un identificatore di tipo ulong; Strategy è una strategia creata sulla base di una classe con eredità da CObject.
Di conseguenza, dichiaro le variabili necessarie, tra cui il CDictionary StrategyBook - il libro delle strategie attive; creo le strategie necessarie Strategy01, Strategy02, che nella funzione OnInit() dell'EA inizializzano vari parametri, tra cui l'assegnazione di GUID univoci. Alla fine di OnInit() decido di salvare le strategie nello StrategyBook richiamando il codice
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
E poi ottengo l'errore "StrategyXX - parameter conversion not allowed" su entrambe le righe.
In base alla mia esperienza con C#, tutto è stato fatto correttamente. Ma in MQL5 ottengo questo errore.
A cosa può essere collegato?
Ho deciso di utilizzare questa classe nel mio EA come contenitore di strategie della forma (StrategyGUID, Strategy), dove StrategyGUID è un identificatore di tipo ulong; Strategy è una strategia creata sulla base di una classe con eredità da CObject.
Di conseguenza, dichiaro le variabili necessarie, tra cui il CDictionary StrategyBook - il libro delle strategie attive; creo le strategie necessarie Strategy01, Strategy02, che nella funzione OnInit() dell'EA inizializzano vari parametri, tra cui l'assegnazione di GUID univoci. Alla fine di OnInit() decido di salvare le strategie nello StrategyBook richiamando il codice
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
E poi ottengo l'errore "StrategyXX - parameter conversion not allowed" su entrambe le righe.
In base alla mia esperienza con C#, tutto è stato fatto correttamente. Ma in MQL5 ottengo questo errore.
A cosa può essere collegato?
Le ragioni possono essere diverse. Molto probabilmente si tratta di un'incompatibilità di tipo o di un lavoro non corretto con i puntatori. Inoltre, non possiamo escludere le peculiarità del lavoro con i metodi template (anch'essi hanno le loro sfumature).
In generale, è meglio utilizzare un motore di trading già pronto, che vi farà risparmiare molto tempo e nervi: https://www.mql5.com/it/articles/2166.
Sì, è quello che alla fine ho deciso di fare.
Nuovo articolo MQL5 Cookbook: Implementazione di un array associativo o di un dizionario per l'accesso rapido ai dati è stato pubblicato:
Autore: Vasiliy Sokolov
Grazie per l'impegno, ma non riesco a far funzionare nessuno degli esempi di codice.
Sembra che Dictionary dict; dovrebbe essere CDictionary dict;
Che ne dite di un semplice esempio funzionante?
Per quanto riguarda la nuova MT4 (Build 1080, 12 maggio 2017), questi errori si verificano durante la compilazione e impediscono l'esecuzione:
'm_array' - le strutture contenenti oggetti non sono consentite Dictionary.mqh 303 25
Salve,
Come già detto da un'altra persona, non esiste un esempio compilabile.
Solo un file con commenti in russo.
Sto usando con successo la libreria di Vasiliy. È un vero aiuto!
Ricordo che anch'io ho avuto alcuni errori di compilazione e sono riuscito a risolverli. Tuttavia, non posso dire quali fossero e cosa avessi fatto.
Inoltre, poiché sono estremamente infastidito dalla formattazione del codice MQL5 e riformatto sempre tutto in un moderno formato C++ (indentazione corretta, evitare parentesi inutili, nessun commento di disturbo e così via), è impossibile per me dire quale sia stato il vero cambiamento nel codice. Ricordo solo che i cambiamenti erano piccoli.
Nel caso vogliate usare la libreria formattata correttamente, eccola qui:
(Si noti che sto usando le tabulazioni, quindi la formattazione sembra interrotta qui, ma nel MetaEditor non lo è).
Credo di aver trovato un bug quando si elimina un elemento e si cerca di arrivare all'ultimo elemento:
L'errore nel CDictionary.mqh sarà:
Accessoal puntatore non valido in 'Dictionary.mqh' (463,9)
Qualcuno può confermare questo problema? Qualche idea su come risolvere il problema?