Ich habe mir hier mal einen EA zusammengebastelt der nur die Order schließen soll, bzw. den Stop Loss nachziehen soll.
Die Idee ist die Differenz des Hochs und Tiefs der vorherigen Bar mit 3 zu multiplizieren und den Stop Loss in diesem Abstand zum aktuellen Kurs nachzuziehen. (Idee ist von K. Tharp geklaut :P)
Natürlich bewegt sich der Stop nur in meine Richtung und nicht entgegen meines Kontos. Die Ordereröffnung sowie die Positionsgrößenbestimmung soll manuell erfolgen.
Im Strategietester des MT4 funktioniert dieser Stop sehr gut, (zufälliger Einstieg) allerdings stehe ich nun im "Livetest" ( Demokonto) vor 2 Problemen:
1. Wenn ich manuell eine Shortposition offen habe und den EA aktiviere so wird die Shortposition sofort geschlossen, der Stop bei einer Long Position funktioniert!
2. Ab und zu passiert es das der EA den Stop zu nah an den Markt legen will und ich bekomme eine Fehlermeldung. Gibt es eine Variable,Parameter oder ähnliches der mir den minimalen Abstand des Stops zum Markt anzeigt sodass ich diesen in meinen EA einbauen kann? Natürlich kann man für jeden Markt/ für jeden minimalen Abstand einen eigenen EA entwerfen aber eleganter wäre eine allgemeine Lösung.
So und hier mal der Code:
int start()
{
total = OrdersTotal();
if (total <0)
{
Print ("Fehler offene Order sind negativ");
return (-1);
}
while (total >= 0 )// Check for open Orders; Calculation Loop; Looks at every Order
{
double NewSL , Volatility ;
if (OrderSelect(total, SELECT_BY_POS, MODE_TRADES) == true) //select order
Volatility = High[1] - Low[1];
if (Volatility > 0) // Check if Volatility is positive and bigger than 0
//Long
if (OrderType()== OP_BUY) // check if selected Order is long position
{
NewSL = Bid - (3*Volatility); // 3 times volatility stop
if (NewSL > Bid ) Print("Check Stop Loss"); // Check if Stop Loss is lower than Bid price
if ( NewSL < Bid )
{
if (OrderStopLoss() < NewSL) //check if new StopLoss is closer to the market, just move Stop Loss if it's in the right direction
{
OrderModify(OrderTicket(),OrderOpenPrice(),NewSL,OrderTakeProfit(),0,Red); // Send New Stop Loss to Broker
return (0);
}
}
if (OrderStopLoss() >= Bid ) // If StopLoss didn't close the order
{
OrderClose(OrderTicket(),OrderLots(),Bid,20/*points of maximum slippage*/,Red);//Close Order
}
}
//Short
if (OrderType()==OP_SELL) // check if selected Order is short position
{
NewSL = Ask + (3*Volatility);
if (NewSL < Ask) Print("Check Stop Loss"); // Check if Stop Loss is above Ask price
if (NewSL > Ask)
{
if (OrderStopLoss() > NewSL) // only move Stop Loss downwards
{
OrderModify(OrderTicket(),OrderOpenPrice(),NewSL,OrderTakeProfit(),0,Red); // Send New Stop Loss to Broker
return (0);
}
}
if (OrderStopLoss() <= Ask) // If Stoploss didn't close the order
{
OrderClose(OrderTicket(),OrderLots(),Ask,20/*points of maximum slippage*/,Red);//Close Order
}
}
total--; // decrease expression
} // End of WhileLoop
Ich kann mir leider nicht erklären wo der Fehler liegt, da es auch im Strategietester wunderbar läuft. Ich hoffe ihr könnt mir weiterhelfen.
Hallo :)
Ich habe mir hier mal einen EA zusammengebastelt der nur die Order schließen soll, bzw. den Stop Loss nachziehen soll.
Die Idee ist die Differenz des Hochs und Tiefs der vorherigen Bar mit 3 zu multiplizieren und den Stop Loss in diesem Abstand zum aktuellen Kurs nachzuziehen. (Idee ist von K. Tharp geklaut :P)
Natürlich bewegt sich der Stop nur in meine Richtung und nicht entgegen meines Kontos. Die Ordereröffnung sowie die Positionsgrößenbestimmung soll manuell erfolgen.
Im Strategietester des MT4 funktioniert dieser Stop sehr gut, (zufälliger Einstieg) allerdings stehe ich nun im "Livetest" ( Demokonto) vor 2 Problemen:
1. Wenn ich manuell eine Shortposition offen habe und den EA aktiviere so wird die Shortposition sofort geschlossen, der Stop bei einer Long Position funktioniert!
2. Ab und zu passiert es das der EA den Stop zu nah an den Markt legen will und ich bekomme eine Fehlermeldung. Gibt es eine Variable,Parameter oder ähnliches der mir den minimalen Abstand des Stops zum Markt anzeigt sodass ich diesen in meinen EA einbauen kann? Natürlich kann man für jeden Markt/ für jeden minimalen Abstand einen eigenen EA entwerfen aber eleganter wäre eine allgemeine Lösung.
So und hier mal der Code:
int start() { total = OrdersTotal(); if (total <0) { Print ("Fehler offene Order sind negativ"); return (-1); } while (total >= 0 )// Check for open Orders; Calculation Loop; Looks at every Order { double NewSL , Volatility ; if (OrderSelect(total, SELECT_BY_POS, MODE_TRADES) == true) //select order Volatility = High[1] - Low[1]; if (Volatility > 0) // Check if Volatility is positive and bigger than 0 //Long if (OrderType()== OP_BUY) // check if selected Order is long position { NewSL = Bid - (3*Volatility); // 3 times volatility stop if (NewSL > Bid ) Print("Check Stop Loss"); // Check if Stop Loss is lower than Bid price if ( NewSL < Bid ) { if (OrderStopLoss() < NewSL) //check if new StopLoss is closer to the market, just move Stop Loss if it's in the right direction { OrderModify(OrderTicket(),OrderOpenPrice(),NewSL,OrderTakeProfit(),0,Red); // Send New Stop Loss to Broker return (0); } } if (OrderStopLoss() >= Bid ) // If StopLoss didn't close the order { OrderClose(OrderTicket(),OrderLots(),Bid,20/*points of maximum slippage*/,Red);//Close Order } } //Short if (OrderType()==OP_SELL) // check if selected Order is short position { NewSL = Ask + (3*Volatility); if (NewSL < Ask) Print("Check Stop Loss"); // Check if Stop Loss is above Ask price if (NewSL > Ask) { if (OrderStopLoss() > NewSL) // only move Stop Loss downwards { OrderModify(OrderTicket(),OrderOpenPrice(),NewSL,OrderTakeProfit(),0,Red); // Send New Stop Loss to Broker return (0); } } if (OrderStopLoss() <= Ask) // If Stoploss didn't close the order { OrderClose(OrderTicket(),OrderLots(),Ask,20/*points of maximum slippage*/,Red);//Close Order } } total--; // decrease expression } // End of WhileLoopIch kann mir leider nicht erklären wo der Fehler liegt, da es auch im Strategietester wunderbar läuft. Ich hoffe ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen
Mh47