Schließung von halben Parzellen. - Seite 6

 
Sie meinen, wenn ich "if(FirstTarget_Buy == Bid)" eingebe? (Offensichtlich nicht, da es nicht funktioniert.)
 
DomGilberto:
Sie meinen, wenn ich "if(FirstTarget_Buy == Bid)" schreibe? (Das geht natürlich nicht, da es nicht funktioniert.)

Oder etwas wie....

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   //  close the Order
   }

. . . unter Berücksichtigung der Probleme beim Vergleich von Doppelwerten ( Kann Preis != Preis ? )

Sie müssen auch an den Spread denken und daran, ob Ihr Ziel inklusive oder exklusive des Spreads ist.

 

(seufz) ok - Danke für deine Hilfe Raptor! Das wird langsam frustrierend. Ich schwöre, es muss nicht so zeitaufwendig sein... Die obige If-Anweisung wird nicht funktionieren.

Ich bin ehrlich gesagt mit meinem Latein am Ende...

Es werden mehrere Hälften geschlossen (die Hälfte einer Hälfte einer Hälfte usw.), wenn ich die obige "if"-Anweisung nicht einfüge (in diesem Fall passiert nichts) und die Schließreihenfolge einfach auf "Bid" setze - ich kann nicht herausfinden, wie es weiß, wann es diese Hälfte schließen soll...

Für weitere Vorschläge wäre ich sehr dankbar, vielen Dank für Ihre Hilfe!

 
DomGilberto:

(seufz) ok - Danke für deine Hilfe Raptor! Das wird langsam frustrierend. Ich schwöre, es muss nicht so zeitaufwendig sein... Die If-Anweisung oben wird nicht funktionieren.

Ich bin ehrlich gesagt mit meinem Latein am Ende...

Es werden mehrere Hälften geschlossen (die Hälfte einer Hälfte einer Hälfte usw.), wenn ich die obige "if"-Anweisung nicht einfüge (in diesem Fall passiert nichts) und die Schließreihenfolge einfach auf "Bid" setze - ich kann nicht herausfinden, wie es weiß, wann es diese Hälfte schließen soll...

Wenn Sie keine Preisbedingung angeben, die erfüllt sein muss, wird die halbe Order so schnell wie möglich geschlossen, Bid ist immer Bid und gilt für den Abschluss eines OP_BUY.

Die if-Anweisung wird funktionieren ... wenn sie nicht herausfindet, warum, fügen Sie ein Print() davor ... und danach ein.

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

Keine Sorge, es wird noch frustrierender, wenn Ihr Code so funktioniert, wie Sie es sich wünschen, und Sie ihn im Strategietester ausführen und feststellen, dass er ungefähr so gut ist wie ein Münzwurf.

 
Okay, danke! Können Sie mich auch darüber aufklären, warum ich den ST manchmal laufen lasse, ihn dann stoppe und nichts im Journal ausgedruckt wird...?

" wenn Ihr Code so funktioniert, wie Sie es sich wünschen, und Sie ihn im Strategietester laufen lassen und feststellen, dass er ungefähr so gut ist wie ein Münzwurf"

Ja, das kann ich mir nur vorstellen! Ich habe es tatsächlich geschafft, 6 Seiten (ich weiß nicht, wie viele Zeilen das sind) Code zu schreiben - ich füge diese entscheidenden Teile ein... einer davon schließt 50% bei 1:1 und bewegt sich auf Break-Even... ABER NOOOOOO die Schließung des Loses ist kontraintuitiv (soweit ich betroffen bin)
 
DomGilberto:
Okay, danke! Können Sie mich auch darüber aufklären, warum ich den ST manchmal laufen lasse, ihn dann stoppe und im Journal nichts ausgedruckt wird?

Es gibt zwei Registerkarten: diejenige, die Sie sich im Fenster des Strategietesters ansehen sollten, und diejenige, die Sie sich neben der Registerkarte "Experten" ansehen sollten. Am besten sehen Sie sich die Protokolldatei an, die unter tester\logs gespeichert ist.

 
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 10
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
   if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2)){
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }
Das ist perfekt - Der erste Zielkauf ist genau richtig. Die Anzahl der zu schließenden Lose ist genau richtig. Das alles wird auf einer schwebenden Order ausgedruckt - allerdings wird sie nicht zu diesem Preis geschlossen, obwohl ich sie korrekt berechnet habe? Ich wähle ihn aus, wenn es sich um einen "OP_BUY" handelt... Es tut mir leid, dass ich all diese Fragen stelle, aber ich verstehe nicht, warum das nicht funktioniert?
 
DomGilberto:
Das ist perfekt - das firsttarget_buy ist genau richtig. Die Anzahl der zu schließenden Lots ist genau richtig. Das alles wird auf einer Pending Order ausgedruckt - aber sie wird nicht zu diesem Preis geschlossen, obwohl ich sie richtig berechnet habe? Ich wähle ihn aus, wenn es ein "OP_BUY" ist... Es tut mir leid, dass ich all diese Fragen stelle, aber ich verstehe nicht, warum das nicht funktioniert?

Sie haben den Ausdruck vor dem if( . . . . nicht eingefügt.

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );   //  add this line too . . .

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

. . . woher wissen Sie sonst, dass Bid größer oder gleich FirstTarget_buy war? Wenn nicht, dann ist die if() nicht wahr und die Order ist nicht teilweise geschlossen . . . und wenn es immer noch eine Pending Order ist, dann ist es kein OP_BUY.

 
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Current Bid: 1.35972 FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000

Ich kann sehen, wenn das Bid gleich oder größer ist als "FirstTarget_buy"? Ich teste einen Trade, der bis zum 2:1 Reward Ratio Takeprofit Target läuft... So weiß ich, dass es 1:1 Reward geht - das ist, wo die Lose halbiert werden sollten... Alle Druckfunktionen drucken auf schwebende Aufträge (d.h. wenn es einen schwebenden Auftrag gibt und ich den Test stoppe, werden alle Drucke angezeigt - wenn ich jedoch den Test stoppe, nachdem einer der schwebenden Aufträge ausgelöst wurde, wird nichts in Bezug auf "Druck" im Journal ausgedruckt).

Ich kann nicht glauben, dass ich an dieser Sache hänge - das ist bisher die größte Herausforderung - aber ich habe das Gefühl, dass ich andere Dinge habe, die viel komplexer sind...

(Update: Ich gehe davon aus, dass ich Bid auf einer Tick-by-Tick-Basis überwachen muss, um den Preis durch und in meine "for"-Schleife zu ziehen?

Damit die "IF()"-Anweisung wahr ist, wird das Bid schließlich gleich meinem "FirstTarget_buy" sein?

 
DomGilberto:

Ich kann sehen, wenn das Bid gleich oder größer ist als "FirstTarget_buy"? Ich teste einen Trade, der bis zum 2:1 Reward Ratio Takeprofit Target läuft... So weiß ich, dass es 1:1 Reward geht - das ist, wo die Lose halbiert werden sollten... Alle Druckfunktionen drucken auf schwebende Aufträge (d.h. wenn es einen schwebenden Auftrag gibt und ich den Test stoppe, werden alle Drucke angezeigt - wenn ich den Test jedoch stoppe, nachdem einer der schwebenden Aufträge ausgelöst wurde, wird im Journal nichts in Bezug auf "Druck" ausgedruckt).

OK, jetzt machen Sie Fortschritte ... Sie müssen nur noch herausfinden, warum ein OP_BUY nicht Ihren Code auslöst, der alle Variablen auf dieselbe Weise ausdruckt wie eine schwebende Order... wenn Sie den Code posten wollen, werde ich ihn mir ansehen.
Grund der Beschwerde: