Problem bei TP
Guten Morgen,
ich versuche mir das Programmieren gerade selbst bei zu bringen und der Übungs EA läuft zumindest schon mal. Wenn ich den TP mt festen Größen laufen lasse, dann wird er auch so gesetzt wie es sein soll aber ich versuche im Moment den TP so einzustellen dass er als CRV gesetzt wird. Zum Beispiel SL unter bestimmte Kerze und TP als CRV 3 setzten. double entry=NormalizeDouble(Ask,_Digits); double sl = KerzeStopp1; double tp = KerzeStopp1 * Profit; orderTicket=OrderSend(_Symbol,OP_BUY,Lots,entry,Sl ippage,sl,tp,Commentary,Magic); Der SL wird da gesetzt wo er hin soll aber beim TP kommt wirres Zeug raus... Woran kann das liegen? |
Hallo,
du must wenn du SL oder TP berechnest NormalizeDouble() verwenden, weil es sonst sein kann, dass die Zahl zu viele Kommastellen hat. ---Leopold--- |
double entry=NormalizeDouble(Ask,_Digits);
double sl =NormalizeDouble(entry - KerzeStopp1 * Point,_Digits); double tp =NormalizeDouble(entry + KerzeStopp1 * Point,_Digits) * Profit; orderTicket=OrderSend(_Symbol,OP_BUY,Lots,entry,Sl ippage,sl,tp,Commentary,Magic); Jetzt bekomme ich nur noch die Fehlermeldung Order Send Error 130. |
Code:
double entry=NormalizeDouble(Ask,_Digits); ---Leopold--- |
if(checkGD()=="sell" && checkKerzen() == "sell" && checkADX() == "sell" && checkOBV() == "sell")
{ double entry=NormalizeDouble(Bid,_Digits); double sl =NormalizeDouble((entry + KerzeStopp2) * Point,_Digits); double tp =NormalizeDouble((entry - (KerzeStopp2 * Profit)) * Point,_Digits); orderTicket=OrderSend(_Symbol,OP_SELL,Lots,entry,S lippage,sl,tp,Commentary,Magic); } else if(checkGD()=="buy" && checkKerzen() == "buy" && checkADX() == "buy" && checkOBV() == "buy") { double entry=NormalizeDouble(Ask,_Digits); double sl =NormalizeDouble((entry - KerzeStopp1) * Point,_Digits); double tp =NormalizeDouble((entry + (KerzeStopp1 * Profit)) * Point,_Digits); orderTicket=OrderSend(_Symbol,OP_BUY,Lots,entry,Sl ippage,sl,tp,Commentary,Magic); Wenn ich es so schreibe, dann bekomme ich bei Short Positionen Error 130 // TP hae ich bei 2 und bei Long Positionen Error 4107 // Invalid TakeProfit for OrderSend funktion Ich bin mit dem wenigen Latein wo ich habe am Ende |
Welchen Wert haben die Variablen KerzeStopp1 und Profit?
---Leopold--- |
KerzeStopp1 = iLow(_Symbol,0,StoppKerze); // StoppKerze drittletzte Kerze
input double Profit=2.0; // Profit als CRV |
Wenn ich s so schreibe, dann läuft es ohne Probleme aber ich möchte halt nicht immer einen feste Größe als SL und TP.
if(checkGD()=="sell" && checkKerzen() == "sell" && checkADX() == "sell" && checkOBV() == "sell") { double entry=NormalizeDouble(Bid,_Digits); double sl = NormalizeDouble(entry + Stop * _Point,_Digits); double tp = NormalizeDouble(entry - Profit * _Point,_Digits); orderTicket=OrderSend(_Symbol,OP_SELL,Lots,entry,S lippage,sl,tp,Commentary,Magic); } else if(checkGD()=="buy" && checkKerzen() == "buy" && checkADX() == "buy" && checkOBV() == "buy") { double entry=NormalizeDouble(Ask,_Digits); double sl = NormalizeDouble(entry - Stop * _Point,_Digits); double tp = NormalizeDouble(entry + Profit * _Point,_Digits); orderTicket=OrderSend(_Symbol,OP_BUY,Lots,entry,Sl ippage,sl,tp,Commentary,Magic); |
KerzeStopp2 ist wahrscheinlich iHigh(...) oder?
|
Da hast du das Problem, überleg dir mal was du da ausrechnest!
Rechne es mal im kopf durch, das kann nicht gehn. ---Leopold--- |
Zitat:
|
OK und jetzt rechnest du das mal nach!
---Leopold--- |
Ich steh im Augenblick total auf dem Schlauch:confused:
|
dann gehn wir das mal durch:
double tp =NormalizeDouble((entry - (KerzeStopp2 * Profit)) * Point,_Digits); beispielwerte: entry = 12000 KerzeStopp2 = 12500 Profit = 2 dein Take Profit wäre dann: 12000 - (12500 * 2) = -13000 ---Leopold--- |
Hi Tull,
dein Fehler liegt hier: TP soll immer höher als entry sein (wenn Buy). tp=entry+iLow*Multiplikator*Point; 1. Fehler: iLow erfordert nicht "*Point", weil es ist nicht Punkten. 2. Fehler: iLow von einige Kerze kann niedriger als entry sein. Gruß Bobs |
Hallo,
mein Beispiel war aber von der Sell Order. Außerdem ist es mir darum gegengen, dass er darüber nachdenkt was genau er da ausrechnet. ---Leopold--- |
Guten Morgen,
also soweit ist es mir das jetzt klar aber wenn ich einen TP gröer als 1 eingebe, dann macht er keine Short und wenn TP kleiner als 1, dann macht er keine Longs. Wenn ich TP von 2 eingebe, dann verdoppelt er mir als TP nur das Low der der Kerze. Zum Beispiel Entry 12.000 Low 11.500 TP 23.000 ??? und dass passiert immer, egal wie ich es schreibe. Ich vermute dass ich irgendwo anders einen Fehler eingebaut haben muss |
// Stop Loss
extern int Stoploss=100;// //Take Profit extern int Takeprofit=0;// //Stop Loss double B_SL=NormalizeDouble(M_CB-Stoploss*_Point,_Digits);//einfacher Buy SL, der bei Open Buy gesendet werden soll. double S_SL=NormalizeDouble(M_CA+Stoploss*_Point,_Digits) ;//einfacher Sell SL, der bei Open Sell gesendet werden soll. if(Stoploss==0){//SL auf 0 stellen, um irgendwelche Missverständnisse zu vermeiden B_SL=0; S_SL=0;} //------------------------------------------------------------------------------------------------------------- //SLs genauso groß wie Minstoplevels machen, wenn sie kleiner sind: double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL); if(B_SL<MSL)B_SL=MSL; if(S_SL<MSL)S_SL=MSL; //------------------------------------------------------------------------------------------------------------- //Take Profit double B_TP=NormalizeDouble(M_CB+Takeprofit*_Point,_Digit s);//einfacher Buy TP, der bei Open Buy gesendet werden soll. double S_TP=NormalizeDouble(M_CA-Takeprofit*_Point,_Digits);//einfacher Sell TP, der bei Open Sell gesendet werden soll. if(Takeprofit==0){//TP auf 0 stellen, um irgendwelche Missverständnisse zu vermeiden B_TP=0; S_TP=0;} |
Was genau soll mit "Profit" multipliziert werden??
Ich denke mal nicht der StopLoss Kurs, sondern das Risiko. ---Leopold--- |
@MA-EA: Das aktuelle Problem liegt da wo anders denke ich.
---Leopold--- |
Ja, das ist wieder das Ergebnis der ungenauen Beschreibung, was der EA machen soll und was er bereits macht.
Also, besser wäre es, das o.g. nochmals klar zu definieren. traderdoc |
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:20 Uhr. |
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum