Fehler, Irrtümer, Fragen - Seite 2301
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
Für ein Textobjekt, das sich auf High[] befindet, muss der Ankerpunkt (Eigenschaft OBJPROP_ANCHOR) auf ANCHOR_LOWER (Ankerpunkt in der unteren Mitte) gesetzt werden.
Bei einem Textobjekt, das sich auf Low[] befindet, muss der Ankerpunkt (Eigenschaft OBJPROP_ANCHOR) auf ANCHOR_UPPER (Ankerpunkt in der oberen Mitte) gesetzt werden.
Oder ANCHOR_CENTER für beide Standorte, der Ankerpunkt wird zentriert.
Versuchen Sie es.
Dazu müssen jedoch ZWEI Objekte mit den Namen Hi und Lo (oberes und unteres Ende eines Zickzackkurses oder oberes und unteres Ende des aktuellen lokalen Aufwärts- oder Abwärtstrends) erstellt und beide mit den entsprechenden Werten von ANCHOR_LOWER und ANCHOR_UPPER an das Diagramm gebunden werden. Wäre es nicht einfacher, den oberen Teil des Zickzacks (irgendwie) an den vorher "gebundenen" unteren Teil zu binden? Ich habe in etwa Folgendes getan, indem ich der vorherigen Funktion eine Zeile hinzugefügt habe
ObjectSetInteger(0,Obj,OBJPROP_ANCHOR,ANCHOR_CENTER); und Einführung einer "Offset-Korrektur" in die Ausgabezeile if(tvT) ORT(kBtT,Low[kBtT]-2*_Point,DtT,LowClr); else ORT(kBtT,High[kBtT]+2*_Point,DtT,HighClr); //
Bislang scheint es zu funktionieren. Ich danke Ihnen!
Dazu müssen jedoch ZWEI Objekte mit den Namen Hi und Lo (oberes und unteres Ende des Zickzackkurses bzw. oberes und unteres Ende des aktuellen lokalen Aufwärts- oder Abwärtstrends) erstellt und beide mit den entsprechenden Werten von ANCHOR_LOWER und ANCHOR_UPPER an das Diagramm gebunden werden. Wäre es nicht einfacher, den oberen Teil des Zickzacks (irgendwie) an den vorher "gebundenen" unteren Teil zu binden? Ich habe in etwa Folgendes getan, indem ich der vorherigen Funktion eine Zeile hinzugefügt habe
ObjectSetInteger(0,Obj,OBJPROP_ANCHOR,ANCHOR_CENTER); und Einführung einer "Offset-Korrektur" in die Ausgabezeile if(tvT) ORT(kBtT,Low[kBtT]-2*_Point,DtT,LowClr); else ORT(kBtT,High[kBtT]+2*_Point,DtT,HighClr); //
Bis jetzt scheint es zu funktionieren. Ich danke Ihnen!
Was soll das bringen? Sie können die Anlage jederzeit ändern. Oder übersehe ich etwas? Sie ändern die Farbe. Ändern Sie also das Gestänge.
Nach dem Schließen des Debug-Viewer-Fensters, dem erneuten Kompilieren und dem Ausführen eines einzelnen Laufs im Tester ohne Visualisierung erhielt ich Folgendes
Ich konnte 20 Sekunden lang nichts tun. Die Schaltfläche Start war die ganze Zeit über ausgegraut.
Logbuch des Agenten.
Aus den Protokollen geht hervor, dass der Tester um 01:52 Uhr versucht hat, eine Verbindung zum Agenten herzustellen, der Agent (Server) selbst aber erst um 01:54 Uhr angehalten wurde. Daher die Unfähigkeit, sich zu verbinden und aufzuhängen. Es handelt sich um einen seit langem bestehenden Fehler, aber zumindest ist die Ursache jetzt klar.
Profilergebnisse zu historischen Daten
Der interne OrderSend benötigt ein Drittel der Zeit. Wie kommt es zu solch unangenehmen Ergebnissen?
Profilergebnisse zu historischen Daten
Der interne OrderSend benötigt ein Drittel der Zeit. Wie kommt es zu solch unangenehmen Ergebnissen?
In der Testversion befindet sich die gesamte Handelslogik hier und nicht auf dem Handelsserver.
In der Testversion befindet sich die gesamte Handelslogik hier und nicht auf dem Handelsserver.
Fast drei Millionen Ticks und nur 16K OrderSend. Aber diese Handelsaufträge benötigen ein Drittel der Zeit. Und bei jedem Tick gibt es Berechnungen im Expert Advisor.
Daher meine Frage. Könnten Sie den Code von OrderSend mit dem Profiler ausführen? An welcher Stelle gibt es ein solches Hindernis?
Ich gehe davon aus, dass es schneller geht, wenn Sie die Standardfunktion durch Ihre eigene ersetzen. Wahrscheinlich gibt es einige teure Prüfungen und Gesten in OrderSend. Wenn z.B. keine History-Funktionen und OnTrade* im Expert Advisor (+ Indikatoren) vorhanden sind, dann ist die Bildung der entsprechenden Datensätze/Ereignisse reine Zeitverschwendung.
Ich verstehe, dass ein Lauf für manche Menschen viele Minuten dauert. Aber es gibt Fälle wie oben - Einheiten von Sekunden, wenn man auf die Geschwindigkeit der Ausführung achtet. Und hier stellt sich heraus, dass ich Optimize drei Stunden lang starte, und davon ist eine Stunde OrderSend, dessen durchschnittliche Ausführungszeit 69 µs beträgt (siehe Screenshot):
Ich habe den Tester viele Male profiliert. Und ich weiß, wo der "Haken" ist. Dabei handelt es sich um finanzielle Berechnungen, die mehrere Normalisierungen der Ergebnisse auf die Anzahl der Ziffern der Einzahlungswährung beinhalten
Ich werde meine OrderSend schreiben und sie vergleichen.