Verwende doch eine Schrittweite (step):
(Kaufposition nicht geprüft..):
.. double Step = _Point*20.0; .. if ( OrderClosePrice() > OrderStopLoss()+Step ) { if( !OrderModify( ..,OrderStopLoss()+Step, .. ) ) { // error... } }
oder von TP:
.. double Step = _Point*20.0, Dist = _Point*200.0; .. if ( OrderTakeProfit() - Dist > OrderStopLoss()+Step ) { if( !OrderModify( ..,OrderStopLoss()+Step, .. ) ) { // error... }
Verwende doch eine Schrittweite (step):
(Kaufposition nicht geprüft..):
oder von TP:
@Carl SchreiberVerstehe deinen Vorschlag folgendermaßen:
Wenn der "Kurs" mehr als 20 Points über dem SL liegt -> SL erhöhen
Oder was willst du mit dem !OrderModyfiy ausdrücken? So etwa:
if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true && OrderCloseTime()==0 && OrderClosePrice() > OrderStopLoss()+Step) { OrderModify( OrderTicket(),OrderOpenPrice(),OrderStopLoss()+Step,OrderTakeProfit(),0,Yellow) if( !OrderModify( OrderTicket(),OrderOpenPrice(),OrderStopLoss()+Step,OrderTakeProfit(),0,Yellow) ) {GetLastError();Print("SL konnte nicht nachgesetzt werden")}
Wenn 200 Punkte unter dem jetigen Takeprofit kleiner ist als 20 Punkte über dem StoppLoss -> TP erhöhen
// if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true && OrderCloseTime()==0 && (OrderTakeProfit() - Dist < OrderStopLoss()+Step )) { OrderModify( OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit+Step(),0,Yellow) if( !OrderModify( OrderTicket(), OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit()+Step,0,Yellow) ) {GetLastError(); Print("TP2 konnte nicht gesetzt werden")}
Ist das So richtig?
Für Short Orders würde dass dann in etwa So aussehen
if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true && OrderCloseTime()==0 && (OrderClosePrice() < OrderStopLoss()-Step)) { OrderModify( OrderTicket(),OrderOpenPrice(),OrderStopLoss()-Step,OrderTakeProfit(),0,Yellow) if( !OrderModify( OrderTicket(),OrderOpenPrice(),OrderStopLoss()-Step,OrderTakeProfit(),0,Yellow) ) {GetLastError();Print("SL konnte nicht nachgesetzt werden")} } if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true && OrderCloseTime()==0 && (OrderTakeProfit() + Dist > OrderStopLoss()-Step )) { OrderModify( OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit-Step(),0,Yellow) if( !OrderModify( OrderTicket(), OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit()-Step,0,Yellow) ) {GetLastError(); Print("TP2 konnte nicht gesetzt werden")} }
Aber noch Viel Wichtiger (zur anfangsfrage):
Es geht darum->Warum funktioniert dieser Code nicht:
bool siglong = OrderClosePrice()>= (OrderOpenPrice() + (OrderTakeProfit()-OrderOpenPrice()))*0.90; bool sigshort = OrderClosePrice()<= (OrderOpenPrice() - (OrderOpenPrice()-OrderTakeProfit()))*0.90;
Aber noch Viel Wichtiger (zur anfangsfrage):
Es geht darum->Warum funktioniert dieser Code nicht:
Du kannst kein Rechenergebniss( double) einem bool zuweisen.
https://docs.mql4.com/trading/ordercloseprice
https://docs.mql4.com/basis/types/integer/boolconst
Gruß

- docs.mql4.com
Du kannst kein Rechenergebniss( double) einem bool zuweisen.
https://docs.mql4.com/trading/ordercloseprice
https://docs.mql4.com/basis/types/integer/boolconst
Gruß
Was kann ich stattdessen machen um diese Grenze klarzustellen ? (Das ganze etwa direkt inder BedingungsKlammer ohne deklaration nennen?)
Andere Sache: das Signal wird nun doch erkannt (Ask anstatt OrderClosePrice), aber es werden unendlich viele TPs direkt hintereinander gesetzt... Was tun?
bool siglong = (OrderTakeProfit()-OrderOpenPrice())*0.95 <= Ask - OrderOpenPrice(), if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true && OrderCloseTime()==0) { if (siglong=false){Comment("KeinSig");return;} else if (siglong=true){ if (OrderTakeProfit()>0.1000) { //Klarstellen, vorher ein TP da war TP_Setzen = OrderModify( OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit()+StepLongTP,0,Yellow); //StepLongTP beträgt in diesem Fall 210*_Points }}}
Andere Sache: das Signal wird nun doch erkannt (Ask anstatt OrderClosePrice), aber es werden unendlich viele TPs direkt hintereinander gesetzt... Was tun?
Falsch , du hast aus der Rechenoperation ( XXX XXX + XXX XXX)
einen Vergleich gemacht ( XXX XXX <= XXX XXX )
Das Ergebniss kannst du einem bool zuweisen. Es kommt ja immer ein true oder false raus.
Dir fehlen Grundlagen ..... -> nochmal C++ Videos reinziehn ...Wetter passt :-)
Noch was ...um Programmfehler zu finden nutzt man den Debugger.
Jeden neuen Fehler im Forum zu ergründen geht auf dauer schief.
Also los, breakpoint vor der Funktion die Ärger macht setzen und dann Schritt für Schritt in JEDE Variable schauen .
Dann siehst du warum er zu viel OrderModifys macht.
Gruß

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
der Obere Abschnitt ist die erstellung der Orders SL's & TP's fürs erste
Der Untere Abschnitt behandelt das eigentliche Problem:
Mein Problem ist, dass direkt alle Takeprofits im millisekundentakt eingesetzt werden & Das Signal nicht richtig als der Wertebereich erkannt wird als der er geschrieben wurde.
++ Extra, Da die SL geschichte hier auch nicht zu klappen scheint: Hat vllt jemand nh idee Wie ich den SL um X% unter dem Alten TP setzen kann
Also erstmal hier der ungefähre voraufbau: (darunter dann das kurze Problemabteil)