Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 16.09.11
Benutzerbild von jwah
jwah jwah ist offline
Neues Mitglied
 
Registriert seit: Sep 2011
Ort: Berlin
Beiträge: 5
jwah befindet sich auf einem aufstrebenden Ast
Standard BreakEven macht Trailing

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~