Diskussion zum Artikel "Das MQL5-Kochbuch: Implementierung eines Assoziativen Arrays oder eines Lexikons für raschen Datenzugriff" - Seite 3
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich habe beschlossen, diese Klasse in meinem EA als Container von Strategien der Form (StrategyGUID, Strategy) zu verwenden, wobei StrategyGUID ein Bezeichner vom Typ ulong ist; Strategy ist eine Strategie, die auf der Grundlage einer Klasse mit Vererbung von CObject erstellt wurde.
Dementsprechend deklariere ich die notwendigen Variablen, einschließlich CDictionary StrategyBook - das Buch der aktiven Strategien; ich erstelle die notwendigen Strategien Strategy01, Strategy02, die in der Funktion OnInit() des EA verschiedene Parameter initiieren, einschließlich der Zuweisung von eindeutigen GUIDs. Ganz am Ende von OnInit() beschließe ich, die Strategien im StrategyBook zu speichern, indem ich den Code
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
Und dann erhalte ich den Fehler "StrategyXX - parameter conversion not allowed" in beiden Zeilen.
Basierend auf meiner Erfahrung mit C#, ist alles richtig gemacht. Aber in MQL5 bekomme ich diesen Fehler.
Worauf kann das zurückzuführen sein?
Ich beschloss, diese Klasse in meinem EA als Container für Strategien der Form (StrategyGUID, Strategy) zu verwenden, wobei StrategyGUID ein Bezeichner vom Typ ulong ist; Strategy ist eine Strategie, die auf der Grundlage einer Klasse mit Vererbung von CObject erstellt wurde.
Dementsprechend deklariere ich die notwendigen Variablen, einschließlich CDictionary StrategyBook - das Buch der aktiven Strategien; ich erstelle die notwendigen Strategien Strategy01, Strategy02, die in der Funktion OnInit() des EA verschiedene Parameter initiieren, einschließlich der Zuweisung von eindeutigen GUIDs. Ganz am Ende von OnInit() beschließe ich, die Strategien im StrategyBook zu speichern, indem ich den Code
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
Und dann erhalte ich den Fehler "StrategyXX - parameter conversion not allowed" in beiden Zeilen.
Basierend auf meiner Erfahrung mit C#, ist alles richtig gemacht. Aber in MQL5 bekomme ich diesen Fehler.
Worauf kann das zurückzuführen sein?
Es kann mehrere Gründe geben. Höchstwahrscheinlich handelt es sich entweder um eine Typinkompatibilität oder um eine falsche Arbeit mit Zeigern. Auch können wir die Besonderheiten der Arbeit mit Template-Methoden nicht ausschließen (sie haben auch ihre eigenen Nuancen).
Im Allgemeinen ist es besser, eine fertige Trading-Engine zu verwenden, das spart eine Menge Zeit und Nerven: https://www.mql5.com/de/articles/2166.
Ja, dafür habe ich mich schließlich entschieden.
Neuer Artikel MQL5 Kochbuch: Implementieren eines assoziativen Arrays oder eines Dictionarys für schnellen Datenzugriff wurde veröffentlicht:
Autor: Vasiliy Sokolov
Vielen Dank für die Mühe, aber ich kann keines der Codebeispiele zum Laufen bringen.
Es scheint Dictionary dict; sollte CDictionary dict sein ;
Wie wäre es mit einem einfachen funktionierenden Beispiel?
Bei dem neuen MT4 (Build 1080, 12. Mai 2017) treten diese Fehler beim Kompilieren auf und verhindern die Ausführung:
'm_array' - Strukturen, die Objekte enthalten, sind nicht erlaubt Dictionary.mqh 303 25
Hallo,
Wie bereits von einer anderen Person erwähnt, gibt es kein kompilierbares Beispiel.
Nur eine Datei mit Kommentaren auf Russisch.
Ich bin dankbar, dass ich die Bibliothek von Vasiliy erfolgreich nutzen kann. Sie ist eine echte Hilfe!
Ich erinnere mich, dass ich auch einige Compilerfehler hatte und sie beheben konnte. Allerdings kann ich nicht genau sagen, welche das waren und was ich gemacht habe.
Und da mich die Formatierung von MQL5-Code extrem nervt und ich immer alles in ein modernes C++-Format umformatiere (richtige Einrückung, Vermeidung unnötiger Klammern, kein Kommentar-Wirrwarr usw.), kann ich nicht sagen, was die wirkliche Änderung im Code war. Ich kann mich nur daran erinnern, dass die Änderungen gering waren.
Für den Fall, dass Sie die richtig formatierte Bibliothek verwenden möchten, hier ist sie:
(Beachten Sie, dass ich Tabulatoren verwende, so dass die Formatierung hier kaputt aussieht, aber im MetaEditor ist sie es nicht!)
Ich glaube, ich habe einen Fehler gefunden, wenn ich ein Element lösche und versuche, zum letzten Element zu gelangen:
Fehler in der CDictionary.mqh wird sein:
Ungültiger Zeigerzugriff in 'Dictionary.mqh' (463,9)
Kann dies jemand bestätigen? Hat jemand eine Idee, wie man das beheben kann?