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
Ist es wohl okay, wenn ich den Code nochmal im englischsprachigen Forum poste und frage, ob jemand einen Fehler findet?
Also ctrade tptrade würde ich mal im allgemeinen teil schreiben
es reicht aber die ctrade einmal reinzunehmen, quasi
ctrade. Trade im allgemeinen teil
das symbolinfo double würde ich mit
Aus der ontick übergeben
weiters ticket niemals mit tick abkürzen, das führt zu verwirrung
Dann hast du beim schliessen die deviation mit -1, da gehört ein realer wert hin, also 10 für 1 pip, 20 für 2 weil es sind ja immer points. Ich hab das bei mir in einer variable namens slip im globalen bereich, weil die benötigst du auch fürs order setzen
Den position type musst du als POSITION_BUY schreben und nicht als 0 und 1, das kennt mql5 nicht immer
den indicator brauchst du nicht in der void, lass den copy buffer in der ontick und übergeb die werte ind die funktion, part mächtig code und funkt
Postitiom volume einmal auslesen
double volume = xxx
dann sparst du dir die viele Schreiberei
und geb das in den debugger , oder wird dir print aus damit du siehst was genau nicht geht
Ist es wohl okay, wenn ich den Code nochmal im englischsprachigen Forum poste und frage, ob jemand einen Fehler findet?
Klar kannst Du, aber hast Du mal den Debugger versucht? Mit ihm kann man genau solche Fehler finden, warum bestimmte Dinge nicht so passieren wie gedacht.
Das liegt doch an der Schleife und den if in ihr. Übrigens hast Du nicht angegeben was nicht passiert bzw. was anders passiert als Du es willst!!
Kann es sein, dass Deine Ifs da falsch aufgestellt sind? Das sagt Dir aber der Debugger!
Klar kannst Du, aber hast Du mal den Debugger versucht? Mit ihm kann man genau solche Fehler finden, warum bestimmte Dinge nicht so passieren wie gedacht.
Das liegt doch an der Schleife und den if in ihr. Übrigens hast Du nicht angegeben was nicht passiert bzw. was anders passiert als Du es willst!!
Kann es sein, dass Deine Ifs da falsch aufgestellt sind? Das sagt Dir aber der Debugger!
Werde aus dem Debugger in diesem Fall leider nicht schlau :-(
Ich will, dass der Code prüft, ob Positionen offen sind und wenn der Kurs ein Vielfaches der ATR(14) über/unter (je nachdem ob Buy-/Sellposition) einen Teil der Position schließt.
Er soll auch noch prüfen, ob die Position ihr ursprüngliches Volumen hat.
Nur dann soll er einen Teil der Position schließen. Der Teil wird durch den Input TPDivisor bestimmt. Der geschlossene Teil der Position soll dann 1/TPDivisor sein.
Habe den Code nochmal angepasst und in den Hauptquellcode getan, wo dann CTrade schon als trade initialisiert ist.
Leider ohne Erfolg.
Ich will, dass der Code prüft, ob Positionen offen sind und wenn der Kurs ein Vielfaches der ATR(14) über/unter (je nachdem ob Buy-/Sellposition) einen Teil der Position schließt.
Er soll auch noch prüfen, ob die Position ihr ursprüngliches Volumen hat.
Nur dann soll er einen Teil der Position schließen. Der Teil wird durch den Input TPDivisor bestimmt. Der geschlossene Teil der Position soll dann 1/TPDivisor sein.
Habe den Code nochmal angepasst und in den Hauptquellcode getan, wo dann CTrade schon als trade initialisiert ist.
Leider ohne Erfolg.
Naja, all das, was Du willst und nicht funktioniert, könnte Dir der Debugger zeigen!
Er würde Dir auch helfen Deine Fehler zu erkennen, was mir auf Grund der gezeigten Funktion schwer fällt bzw. unmöglich ist.
Ich selber würde mir meine eigene Logik, wenn sie nicht tut, was sie soll auch so prüfen.
Ich wüsste zB. nicht, weil ich das immer wieder durcheinander bringe, ob ArraySetAsSeries() da richtig ist - also frage ich den Debugger ...
Außerdem Du machst überhaupt keine Fehlerabfragen...
Naja, all das, was Du willst und nicht funktioniert, könnte Dir der Debugger zeigen!
Er würde Dir auch helfen Deine Fehler zu erkennen, was mir auf Grund der gezeigten Funktion schwer fällt bzw. unmöglich ist.
Ich selber würde mir meine eigene Logik, wenn sie nicht tut, was sie soll auch so prüfen.
Ich wüsste zB. nicht, weil ich das immer wieder durcheinander bringe, ob ArraySetAsSeries() da richtig ist - also frage ich den Debugger ...
Außerdem Du machst überhaupt keine Fehlerabfragen...
Das kann der Debugger? Ich dachte er kann nur Anzeigen welchen Wert eine Variable an einer Bestimmten Stelle des Code-Durchlaufs hat.
Gibt es da ein Tutorial zu?
Habe nur dieses gefunden: https://www.mql5.com/de/articles/654 und daraus werde ich irgendwie nicht schlau.
Was mir da so aufgefallen ist: (leider gibt es hier keine Zeilennummern auf die ich mich beziehen kann)
1. CTrade TPTrade;
Das ist eine Programmbremse sondergleichen. das gehört entweder mit static definiert(eher Sonderfall) oder in den globalen Teil des Programms.
2. Eine Variablenbezeichnung tick für Ticket ist eher 'patschert' weil ein Tick was anderes ist als ein Ticket.
3. Die Definition double ATRArray1[]; und anschließendes ArraySetAsSeries(ATRArray1,true); gehört auch in den allgemeinen Programmteil
4. Die Unterscheidung von Buy und Sell würde ich mit einer switch-Anweisung machen. und POSITION_TYPE mit den vordefinierten Werten, nicht mit 0 und 1
5. if(UseTP1==true) grausliche formulierung if(UseTP1) ist besser.
6. Die Abfrage PositionsTotal()>0 erscheint mit überflüssig, da in der for-Schleife impliziert.
Hier der umgeschriebene Code, so könnte ich mir das vorstellen. Ist nicht getestet!
Als Basis zum weiterarbeiten.Ganz vielen Herzlichen Dank Leute!
Ihr habt mir viel weiterhgeholfen.
Der letztendlich Fehler lag darin, dass man anscheinend güfullte Orders über HistoryOrderSelect(ticket) und nicht über OrderSelect(ticket) aufrufen muss.
Hier ist nun, der Vollständigkeit halber, der funktionierende Code. Er muss natürlich noch geschwindigkeitstechnisch optimiert werden.
Sieht doch schon viel besser aus ;)
Und das mit dem Optimieren wird schon.