ich habe einen Code für ein BreakEven, den ich nutzen wollte.
Er verkauft alle eingestellten pip (hier als beispiel 10 pip) eine eingestellte Menge Lots und setzt den SL für die Restposition neu fest (auch einstellbar, hier im Beispiel 10 pip, also break even!!)
Leider macht der einen Trailing BE, also nach weiteren 10 pip macht er den nächsten Verkauf und setzt wiederum nen neuen SL.
Den Verkauf kann ich unterbinden, indem ich die mindest Lots über den Order Lot setze (0,1 Lot gekauft, minLot 1)
Was er aber trotzdem macht.... er trailt.... und setzt den SL noch mal um 10 pip weiter. Ich will nur einmal den Stop auf +-0
Vielleicht kann jemand den Fehler finden.
Test BreakEven.ex4
break even.JPG
und hier der Code
Code:
double lots = 0;
double takeprofit = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == ~OrderId~)
{
if (OrderType() == OP_BUY && Ask - OrderOpenPrice() > ~BreakEvenPoint~*PipValue*Point && (OrderStopLoss() < Ask-(~BreakEvenPoint~+~TrailingGap~)*PipValue*Point))
{
lots = (OrderLots() * ~BreakEvenRisk~) / 100;
lots = NormalizeDouble(lots, NDigits);
if (lots < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value
lots = MarketInfo(Symbol(), MODE_MINLOT);
takeprofit = Ask+~NewTakeProfit~*PipValue*Point;
if (~NewTakeProfit~ == 0) takeprofit = OrderTakeProfit();
bool ret1 = OrderModify(OrderTicket(), OrderOpenPrice(), Ask-~TrailingGap~*PipValue*Point, takeprofit, OrderExpiration(), ~Color~);
if (ret1 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
else if (OrderLots() >= ~MinLot~)
{
ret1 = OrderClose(OrderTicket(), lots, OrderClosePrice(), ~Slippage~, ~Color~);
if (ret1 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
if (OrderType() == OP_SELL && OrderOpenPrice() - Bid > ~BreakEvenPoint~*PipValue*Point && (OrderStopLoss() > Bid+(~BreakEvenPoint~+~TrailingGap~)*PipValue*Point))
{
lots = (OrderLots() * ~BreakEvenRisk~) / 100;
lots = NormalizeDouble(lots, NDigits);
if (lots < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value
lots = MarketInfo(Symbol(), MODE_MINLOT);
takeprofit = Bid-~NewTakeProfit~*PipValue*Point;
if (~NewTakeProfit~ == 0) takeprofit = OrderTakeProfit();
bool ret2 = OrderModify(OrderTicket(), OrderOpenPrice(), Bid+~TrailingGap~*PipValue*Point, takeprofit, OrderExpiration(), ~Color~);
if (ret2 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
else if (OrderLots() >= ~MinLot~)
{
ret2 = OrderClose(OrderTicket(), lots, OrderClosePrice(), ~Slippage~, ~Color~);
if (ret2 == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
}
}
else
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
~next~