Schließung von halben Parzellen. - Seite 13

 
Tut mir leid, aber ich verstehe nicht, wie mir das überhaupt helfen soll. Es spielt keine Rolle, was in der for-Schleife und der aufgerufenen Leere passiert. Es geht darum, was ich zuerst in der "int start()" aufrufe, oder?

Wie ich oben eingefügt habe, wenn ich die Hälfte der Bestellung, unabhängig davon, was die OrderTicket() ist, ANY offen "OP_BUY" wird wieder und wieder aufgerufen werden?

Ich muss einen Weg finden, den Code so zu schreiben, dass er innerhalb von "in start()" und dem obigen Code NICHT jedes Mal "OP_BUY" aufruft, NACHDEM er bereits eine Hälfte geschlossen hat?
 
DomGilberto:
Tut mir leid, aber ich verstehe nicht, wie mir das überhaupt helfen soll. Es spielt keine Rolle, was in der for-Schleife passiert und welche Lücke aufgerufen wird. Es geht darum, was ich zuerst in "int start()" aufrufe, oder?

Wie ich oben eingefügt habe, wenn ich die Hälfte der Bestellung, unabhängig davon, was die OrderTicket() ist, ANY offen "OP_BUY" wird wieder und wieder aufgerufen werden?

Ich muss einen Weg finden, den Code so zu schreiben, dass er innerhalb von "in start()" und dem obigen Code NICHT jedes Mal "OP_BUY" aufruft, NACHDEM er bereits eine Hälfte geschlossen hat?

Die aufgerufene Leere ist nur eine Funktion, die von start() aus aufgerufen wird. Es ist genau dasselbe, als ob der Code direkt in start() stünde.

Pseudo-Code:

Suche nach OP_BUYs

wenn gefunden - ist der TP bei BE ?

wenn TP nicht bei BE ist und Bid >= erstes Ziel, TP auf BE verschieben und die Hälfte der Order schließen

wenn TP an BE ist, nichts tun

 

YES!!! Vielen Dank RaptorUK!

Tut mir leid, ich bin nicht so dumm, wie ich mich gebe, wissen Sie ;) - Manchmal müssen mir Dinge einfach noch einmal erklärt werden, wenn ich neu in etwas bin...

Ich habe gemerkt, dass mir das jeder schon vor Seiten gesagt hat - ich entschuldige mich dafür, dass ich es nicht aufgeschnappt oder verstanden habe!


RICHTIG! Wir haben es endlich geschafft, die Hälfte geschlossen zu bekommen, die Gewinnschwelle zu erreichen und die kontinuierliche Schließung der Hälften zum gleichen Preis zu stoppen :D! Es ist also so ziemlich genau richtig!!!

Alles, was ich jetzt tun werde, ist im Wesentlichen kopieren und fügen Sie diese für meine anderen Ausgänge und ändern Sie ein paar Regeln und hay presto! Bobs your uncle = es ist erledigt :)

Ich werde alles hier veröffentlichen, damit andere es auch nutzen können, wenn sie es wünschen - schließlich habe ich es mit viel Geduld von anderen nicht nur programmiert, sondern auch verstanden :)

 
Das ist seltsam - manchmal, wenn ich einen Backtest mache, funktioniert der halbe Schlusskurs @ 1:1 nicht, aber wenn ich dann einen kürzeren Backtest mache, funktioniert es? Seltsam... liegt das daran, dass der Strategie-Tester Mist ist, oder habe ich einen Fehler im Code?
 
Oh und was würde man vorschlagen, zu tun, wenn der Preis nicht das erste Ziel von 1:1 erreicht, ABER der Stoploss ist GRÖSSER als der Eintrag....? Wie würde ich eine Regel um das dann erstellen....
 
DomGilberto:
Oh, und was würde man vorschlagen zu tun, wenn der Kurs das erste Ziel von 1:1 nicht erreicht, ABER der StopLoss ist GRÖSSER als der Entry....? Wie würde ich in diesem Fall eine Regel erstellen....


Wann ändern Sie auf Break-Even?

wenn das Ziel nicht erreicht wird, wird der Handel mit OrderStopLoss() geschlossen

 
deVries:


Wann modifizieren Sie auf Breakeven?

wenn das Ziel nicht erreicht wird, wird der Handel mit OrderStopLoss() geschlossen


Ich schließe die Hälfte der Position mit OrderClose() und wenn das Ergebnis true ist, rufe ich das Breakeven-Void auf, um den Stoploss auf Break Even zu verschieben? Auf diese Weise wird der Rest der offenen Position in Lots nicht ständig geschlossen, denn wenn die Position auf Break-Even verschoben wurde, dann habe ich geschrieben, dass diese Position nicht mehr geschlossen wird, bis sie ihren festen Take-Profit-Kurs von 1:2 erreicht.

Einige Trades werden jedoch gleich dem Einstiegskurs oder über den Break Even hinausgehen, BEVOR der Trade das erste Ziel erreicht hat, was NICHT die halbe Schließung auslöst...

Außerdem funktioniert bei einigen Trades der halbe Ausstieg und die anschließende Bewegung zum Break Even perfekt.... bei einigen Trades, bei denen es funktionieren sollte, tut es gar nichts. Könnte das an schlechten Daten und einem Fehler im Strategietester liegen, oder gibt es eine Unstimmigkeit in meinem Code?

Oh, und ich bekomme immer noch OrderModify 1 - verdammt ärgerlich...

 

Wie identifizieren Sie den Auftrag, nachdem Sie ihn teilweise geschlossen haben, um dann den SL so zu ändern, dass er kostendeckend ist? Sie wissen, dass Sie die ursprüngliche Ticketnummer nicht verwenden können, oder? Wenn Sie einen Auftrag teilweise schließen, wird die ursprüngliche Ticketnummer geschlossen. Der verbleibende Teil erhält eine neue Ticketnummer. Eine Möglichkeit, dies herauszufinden, ist die Abfrage der OrderOpenTime() vor dem Teilabschluss. Nachdem Sie einen Auftrag teilweise geschlossen haben, erhält der verbleibende Teil eine neue Ticketnummer, aber die OrderOpenTime() ist die gleiche wie vorher.

Sie können diese OrderOpenTime() auch verwenden, um sie zu identifizieren und zu verhindern, dass sie immer wieder geschlossen wird.

Alternativ können Sie ihn auch ändern, bevor Sie ihn teilweise schließen. Der verbleibende Teil Ihrer Order wird den geänderten SL oder TP beibehalten.

Hier ist ein Test. Eröffnet bei 0,09, teilweise geschlossen bei 0,07, übrig bleiben 0,02

Beachten Sie, dass sich die Ticketnummer ändert, die Eröffnungszeit aber gleich bleibt:

23:42:48 2013.08.01 11:28 SDCMegaTrend EURUSD,M1: open #14 buy 0.09 EURUSD at 1.3240 sl: 1.3037 tp: 1.3737 ok
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: close #14 buy 0.07 EURUSD at 1.3240 sl: 1.3037 tp: 1.3737 at price 1.3253
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alert: Ticket 14 OrderOpenTime before part close: 1375356521
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alert: Ticket 15 OrderOpenTime: 1375356521
23:42:48 2013.08.01 12:45 SDCMegaTrend EURUSD,M1: close #15 buy 0.02 EURUSD at 1.3240 sl: 1.3037 tp: 1.3737 at price 1.3242

 
SDC:

Wie identifizieren Sie den Auftrag, nachdem Sie ihn teilweise geschlossen haben, um dann den SL so zu ändern, dass er kostendeckend ist? Sie wissen, dass Sie die ursprüngliche Ticketnummer nicht verwenden können, oder? Wenn Sie einen Auftrag teilweise schließen, wird die ursprüngliche Ticketnummer geschlossen. Der verbleibende Teil erhält eine neue Ticketnummer. Eine Möglichkeit, dies herauszufinden, ist die Abfrage der OrderOpenTime() vor dem Teilabschluss. Nachdem Sie einen Auftrag teilweise geschlossen haben, erhält der verbleibende Teil eine neue Ticketnummer, aber die OrderOpenTime() ist die gleiche wie vorher.

Sie können diese OrderOpenTime() auch verwenden, um sie zu identifizieren und zu verhindern, dass sie immer wieder geschlossen wird.

Alternativ können Sie ihn auch ändern, bevor Sie ihn teilweise schließen. Der verbleibende Teil Ihrer Order wird den geänderten SL oder TP beibehalten.

Hier ist ein Test. Eröffnet bei 0,09, teilweise geschlossen bei 0,07, übrig bleiben 0,02

Beachten Sie, dass sich die Ticketnummer ändert, die Eröffnungszeit aber gleich bleibt:

23:42:48 2013.08.01 11:28 SDCMegaTrend EURUSD,M1: open #14 buy 0.09 EURUSD at 1.3240 sl: 1.3037 tp: 1.3737 ok
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: close #14 buy 0.07 EURUSD at 1.3240 sl: 1.3037 tp: 1.3737 at price 1.3253
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alert: Ticket 14 OrderOpenTime before part close: 1375356521
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alert: Ticket 15 OrderOpenTime: 1375356521
23:42:48 2013.08.01 12:45 SDCMegaTrend EURUSD,M1: close #15 buy 0.02 EURUSD at 1.3240 sl: 1.3037 tp: 1.3737 at price 1.3242


Ah - Super, vielen Dank. Ich hatte OrderOpenTime() völlig vergessen - das ist eine großartige Möglichkeit, das zu tun! Danke für den Tipp - ich werde das jetzt ausprobieren.

Nach meinem letzten Beitrag habe ich es geschafft, dass es jetzt viel reibungsloser läuft - der OrderModify-Fehler 1 taucht jetzt nur noch selten auf. Es scheint jetzt reibungsloser zu funktionieren.

Das einzige Problem ist, ist, dass, wenn ich einen Handel, wo der Stop-Loss ist >= als OrderEntry() - (vorausgesetzt, wir sprechen über eine lange), dann wird es nicht schließen die Hälfte der Bestellung, weil die wichtigsten Kriterien für die Schließung der Hälfte, wurde nicht erfüllt.

Dieser Code, der hier steht, leitet die Schließung der Hälfte der Lots ein und stoppt die kontinuierliche Schließung der Hälften zum gleichen Preis (es ist nicht das Einzige, was in "in start()" steht, ich habe es nur übersichtlicher gemacht):



   

int start()
{

   if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
      {
      if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
         {
         CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }
      
      if(OrderType()==OP_SELL && OrderOpenPrice() < OrderStopLoss())
         {
         CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }   
      } 
}
Wie würde ich die OrderOpenTime()-Funktion einbinden, um eine bessere Kontrolle zu haben und sicherzustellen, dass jeder Trade seine halben Lots im Verhältnis 1:1 schließt, OHNE etwas zu verpassen, wenn der Stop >= OrderOpen() ist?
 

Es gibt mehrere Möglichkeiten, wie Sie sicherstellen können, dass jeder Auftrag teilweise geschlossen wird. Meine Lieblingsmethode ist, den TP um einen Pip zu ändern, wenn ich ihn teilweise geschlossen habe.

So brauche ich zum Beispiel einen TP von 100 Pips, also eröffne ich die Order mit einem TP von 99 Pips. Ich weiß, dass meine Order bei 40 Pips teilweise geschlossen wird, bevor der Take Profit erreicht ist. Wenn das passiert, ändere ich den TP auf 100 Pips. Daher muss jede Order, die einen Gewinn >= 40 Pips und einen TP < 100 Pips hat, teilweise geschlossen werden. Jede Order mit einem TP > 99 Pips wurde bereits teilweise geschlossen. Wenn Sie so vorgehen, macht es keinen Unterschied, wie hoch der SL ist. Vergewissern Sie sich nur, dass Sie alle Preisdoppelungen der Order normalisieren, bevor Sie Berechnungen dazu durchführen.