Probleme beim Schließen, bitte helfen - Seite 3

 

Hallo an alle
Mit der Hilfe von allen hat sich das Symptom geändert.
Die Anweisung ....if(OrderSelect(index, SELECT_BY_TICKET) wurde geändert in..SELECT_BY_POS. Der Code ist weit davon entfernt, korrekt zu sein. Das Programm verkauft und schließt dann sofort nach einem Pip. Das Ergebnis zeigt, dass es keinen SL oder TP gibt. Also habe ich zur Kontrolle in OrderSend den SL und TP (500) pro Stück eingegeben. Keine Änderung. Alle Ausführungen liegen innerhalb von 1 oder 2 Pips. Das wird jetzt interessant. Ich bin mir noch nicht sicher, warum! Auf einen 4-Stunden-Balken kommen über tausend Ausführungen.
Ich werde recherchieren, aber jede Hilfe wird willkommen sein.

 

Hallo Ais
ich habe gerade gepostet und festgestellt, dass du vor mir gepostet hast. Was hast du vor?

 

Hallo nochmal
Ich versuche, das Programm zum besseren Verständnis der Logik etwas umzugestalten
Ich möchte, dass das Programm Ihnen gefällt

 
Ais wrote >>

Hallo nochmal
Ich versuche, das Programm zum besseren Verständnis der Logik etwas umzugestalten
Ich möchte, dass das Programm Ihnen gefällt

Hallo Ais
Du bist so nett. Ich danke dir. Deine Zeit ist kostbar. Ich bin sicher, dass die Umgestaltung dir gefallen wird.
Ich habe einen Teil des Problems gelöst, seit meinem letzten Beitrag. Das Programm lässt sich schließen, aber nicht so, wie ich es möchte.
Der Schlüssel zum Problem des Schließens war die Tatsache, dass ich die ATR nicht richtig initialisiert habe.
Ich zeige Ihnen das Vorher und das Nachher für die Schließung der Sell-Position.

Dann....if (OrderClosePrice() >= OrderOpenPrice() + (ATR*2)
Jetzt.....if (OrderClosePrice() >= OrderOpenPrice() + (40*Point)...Damit wird die Verkaufsposition geschlossen

So hatte ich mir die Funktionsweise des Programms nicht vorgestellt. Aber zu Testzwecken habe ich den neuen Code eingefügt.
Damit ist bewiesen, dass das Problem bei der ATR liegt. Es muss daran liegen, dass ich die ATR nicht richtig initialisiert habe.
Um weiter zu testen, habe ich versucht, die iATR einzufügen, anstatt zu versuchen, eine neue Variable namens ATR zu erstellen.
Ich zeige Ihnen, wie ich versucht habe, es zu codieren.

if (OrderClosePrice() >= OrderOpenPrice() + ((iATR(NULL,0,20,1)*2)*Point)

Auch dies hat nicht funktioniert.
Ich danke Ihnen nochmals.
Ich freue mich darauf, von Ihnen zu hören.
 

Hallo Ais
danke für den Vorschlag. Die Idee, 365 (jährlich) im Vergleich zu my_method zu verwenden, ist gut gewählt. Testzwecke mit kürzerem Zeitrahmen
sollten nur der Einfachheit halber erfolgen.
Ich habe so viel mehr zu lernen. Ich habe endlich herausgefunden, wie ich die ATR einfügen kann, aber ich kann sie nicht multiplizieren. Es folgt ein Beispiel:

Im Moment ist das, was ich habe......if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1))) // =Harter Stop
Das funktioniert zwar, ist aber nicht das, was ich will.
Ich arbeite auf ...................if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1) )*2 ) hin,
Dies funktioniert nicht. Ich hoffe, dass es Ihnen und anderen verdeutlicht, was ich im Sinn habe. Die iATR wird mit 2 multipliziert.
Irgendwelche Vorschläge für dieses Problem? Sobald dies gelöst ist, könnte ich die ATR für Einstiegspositionen ebenfalls halbieren.

Es gab noch einen anderen Weg, den ich versucht habe, der aber nicht funktioniert hat...if(OrderClose - OrderOpenPrice - (iATR(NULL,0,20,1)*2)) <= 0)

Ich danke Ihnen nochmals für Ihre Zeit. Ich bin sicher, dass es viele gibt, die an Ihre Tür klopfen, um Weisheit zu erlangen.
Zum Wohl
 

Hallo Huckleberry,
Ich habe nur noch die Eröffnungsfunktion.
Und ich versuche gerade, die Logik der Gewinnfeststellung zu verstehen.
Stops und Takes fehlen in deiner OrderSend(), das ist OK, aber der Befehl zum Schließen läuft nur im Verlustfall.
Und ich würde gerne deine Meinung zur Verständlichkeit des neuen Programmstils wissen, https://www.mql5.com/en/forum/124521/page2.
Bye for now,
:)

 

Hallo Ais
Vielen Dank für Ihre Antwort.
Lassen Sie mich den Grund für das Fehlen von StopLoss und TakeProfit erklären.
Dadurch, dass SL und TP nicht in den OrderSend eingefügt werden, befindet sich der SL an einer anderen Stelle, nämlich unter dem Ausdruck....

if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1)))

Obwohl dies funktioniert, ist es nicht genau der richtige SL. Das Beispiel ist in meinem letzten Beitrag aufgeführt....

if (OrderClose >= OrderOpenPrice + (iATR(NULL,0,20,1))*2)

Die Verschiebung der... iATR im obigen Ausdruck kann sich von einem Takt zum nächsten ändern. Wenn ich den OrderSend mit SL und TP verwende, kann ich die Verschiebung nicht ausnutzen.

Jede Funktion funktioniert zu diesem Zeitpunkt, nur dass ich lernen muss, wie man die Funktionen zu optimieren.
Vielen Dank für Ihre Beobachtung und Ihre Frage.
Vielen Dank

 

Es ist OK, ohne SL und TP zu arbeiten.
Aber wir brauchen immer noch die Bedingung, die Order im Falle eines Gewinns zu schließen.
Bitte schauen Sie sich die erneuerte Funktion "iSignalClose" an,
https://www.mql5.com/en/forum/124521/page2.
Jetzt ist es natürlich die Bedingung des virtuellen SL.
Aber wir brauchen immer noch die Bedingung des virtuellen TP.
Ich warte auf Ihre Antwort.
:)

 

Ich habe für virtuelle TP das Gleiche mit SL-Bedingung eingefügt, aber mit einem anderen Faktor.
In Zukunft wird es einfach und bequem sein, diese Parameter zu optimieren.

Um zu optimieren, deklarieren Sie gewünschte Parameter als "extern".
Beispiel:


////////////////////////////////////////////////////////////////////<         3>
// < 1.1. Data : Input >                                          //<          >
//                                                                //<          >
// < 1.1. Input             7 =       4 i       3 d       - s   > //<          >
// <      1. Strategy       4 =       2 i       2 d       - s  /> //<          >
// <      2. Trading        3 =       2 i       1 d       - s  /> //<          >
// </1.1. Input             7 =       4 i       3 d       - s   > //<          >
//                                                                //<          >
// <      1. Strategy 4 >=========================================//<          >
                    int       iBasePeriod       = 20            ; //<          >
                    int       iBaseBar          = 1             ; //<          >
extern              double    dFactorTP         = 2.0           ; //<          >
extern              double    dFactorSL         = 2.0           ; //<          >
// </     1. Strategy 4 >=========================================//<          >
//                                                                //<          >
// <      2. Trading 3 >==========================================//<          >
                    int       iSlippage         = 1             ; //<          >
                    int       iMagic            = 0             ; //<          >
                    double    dLots             = 0.1           ; //<          >
// </     2. Trading 3 >==========================================//<          >
//                                                                //<          >
//                                                                //<          >
//                                                                //<          >
// </1.1. Data : Input >                                          //<          >
     

Nach der Optimierung werden die ursprünglichen Parameterwerte durch die optimierten ersetzt und die "extern"-Deklarationen gelöscht.

Optimierungsbeispiel für "A System: Championship 2008 Final Edit", auch bekannt als "ACB6", https://www.mql5.com/en/forum/112633/page7#276861:
Dateien:
1e.txt  46 kb
1r.txt  49 kb