Diskussion zum Artikel "Cross-Plattform Expert Advisor: Die Klassen CExpertAdvisor und CExpertAdvisors Classes" - Seite 2
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
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
Wie kann ich diese Fehler beheben? Das Programm ist auf der Grundlage Ihres Beispiels entworfen.
In der Funktion OnDeinit() habe ich nur experts.OnDeinit().
In OnInit() nur experts.OnTick();
Und in der Signalfunktion erstelle ich einfach benutzerdefinierte Indikatorobjekte wie in Ihren Beispielen.
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
Wie kann ich diese Fehler beheben? Das Programm ist auf der Grundlage Ihres Beispiels entworfen.
In der Funktion OnDeinit() habe ich nur experts.OnDeinit().
In OnInit() nur experts.OnTick();
Und in der Signalfunktion erstelle ich nur benutzerdefinierte Indikatorobjekte wie in Ihren Beispielen.
Das ist ok, mein Fehler
Ich möchte einen weiteren möglichen Fehler melden, wenn Sie nichts dagegen haben.
Die Anzahl der offenen Aufträge wurde nicht zurückgegeben. Ich begann zu prüfen und entdeckte, dass das Problem mit OrdersBase und dem Sortiermodus zusammenhängt.
Ich musste den folgenden Code hinzufügen:
Ich weiß nicht, warum er nicht mit dem richtigen Sortiermodus initialisiert wird oder ich ihn zusätzlich initialisieren muss... keine Ahnung.
Ich möchte einen weiteren möglichen Fehler melden, wenn Sie nichts dagegen haben.
Die Anzahl der offenen Aufträge wurde nicht zurückgegeben. Ich begann zu prüfen und entdeckte, dass das Problem mit OrdersBase und dem Sortiermodus zusammenhängt.
Ich musste den folgenden Code hinzufügen:
Ich weiß nicht, warum er nicht mit dem richtigen Sortiermodus initialisiert wird oder ich ihn zusätzlich initialisieren muss... keine Ahnung.
Der COrdersBase-Konstruktor hat den folgenden Code:
Am Anfang sortiert er sein internes Objekt-Array, wenn es noch nicht sortiert ist, aber ich bin mir sicher, dass Sie sich dessen bereits bewusst sind.
Es kann unsortiert werden, wenn andere Elemente hinzugefügt werden, ohne NewOrder() zu verwenden (z. B. Add()).
Ich kann das Problem, das Sie haben, nicht replizieren. Meine Ergebnisse werden während des gesamten Tests immer sortiert zurückgegeben. Versuchen Sie, den Zeitpunkt zu finden, an dem das Array in Ihrem Test zum ersten Mal unsortiert wird. Dies könnte einen Hinweis auf die Ursache des Problems liefern.
Hallo,
ich werde Ihnen Bescheid geben, wenn ich wieder mit dem Problem konfrontiert werde.
Ich habe eine weitere Frage. Wie bekomme ich die aktuelle Experteninstanz, die das Signalmodul aufruft?
Nehmen wir an, ich habe eine Signalklasse, die eine Funktion zur Überprüfung früherer Auftragsergebnisse hat. Ich habe mehrere Experteninstanzen. Wie erhalte ich also die aktuellen Expertenaufträge, die die Signalprüfungsfunktionen aufrufen?
Oder gibt es vielleicht eine andere geeignete Lösung. Können Sie mir bitte eine Idee oder ein Stück Code dafür mitteilen.
Mein Ziel ist es, ein Signal zu erstellen, das je nach vorherigem Auftrag/Positionsergebnis unterschiedlich funktioniert.
Dafür gibt es viele Möglichkeiten, die von Programmierer zu Programmierer variieren können. Standardmäßig agieren die Instanzen der Experten unabhängig voneinander. Sie können es so implementieren, dass die Instanzen dieselben Informationen teilen können.
Wenn Sie die von den einzelnen Experten eröffneten Geschäfte unterscheiden wollen, können Sie damit beginnen, jeder Instanz eine eindeutige magische Nummer zuzuweisen. Ich kann Ihnen nicht weiterhelfen, wenn Sie mir nicht Ihren Code zeigen.
Enrico,
Mein Code ist vollständig auf Ihre letzten Beispiele basiert.
Ich habe nur eine globale Definition CExpertAdvisors Experten;
In OnInit() initialisiere ich das Geld/Stopps/Signal-Modul und füge sie dann für jede Experteninstanz hinzu.
In OnTick() habe ich nur experts.OnTick()
Und ich habe meine eigene Signalklasse mit Calculate(), LongCondition(), ShortCondition() und anderen. Dieses Signal wird für jede Experteninstanz hinzugefügt.
Jetzt möchte ich nur, dass die Logik des Signals von jeder spezifischen Experteninstanz des letzten Auftrags-/Positionsergebnisses abhängt. Es hat nichts mit der magischen Zahl zu tun (btw, alle meine Experteninstanzen haben unterschiedliche magische Zahlen). In den vom Signal aufgerufenen Funktionen Calculate(), LongCondition(), ShortCondition() habe ich keine Magie oder andere Details, die mir helfen können, die Experteninstanz zu identifizieren und ihre Aufträge zu finden.
Was den Code betrifft, lassen Sie es Calculate() Funktion wie diese sein:
Ich hoffe, Sie verstehen das. Gibt es eine Möglichkeit, dies ohne Änderungen an Ihrem Bibliothekscode zu implementieren?
Hallo Enrico,
ich versuche immer noch, eine Möglichkeit zu finden, zu erkennen, welche Experteninstanz die Signalprüfungsfunktionen aufruft. Wie kann ich das machen? Irgendein Tipp bitte?
Eine weitere Frage. Wie initialisiere ich einen Experten, der mit mehreren Paaren gehandelt werden soll? In CExpertAdvisorBase::Init() muss ich einen Symbolnamen angeben.
Wie erstelle ich einen MM-Typ auf der Grundlage der Ergebnisse früherer Aufträge? Das ist so unflexibel...