Ciao a tutti,
ecco il codice che ho scritto. Mi dà un problema però.
Infatti se compro a 10.00000 e il prezzo sale a 10.00110 e ho un breakeven di 5 pips, il prezzo di stop loss diventa giustamente 10.00060, e ok. Ma se il prezzo riscende, anche il prezzo dello stoploss scende, e invece dovrebbe restare fermo!
La condizione che ho usato è:
- Codice: Seleziona tutto
if(OrderStopLoss()<=OrderOpenPrice())
con l'idea che se lo stoploss già impostato è maggiore di quello che andrebbe a mettere non deve modificarlo. Dove sbaglio? ecco il codice completo.
Grazie a tutti!
- Codice: Seleziona tutto
for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++)
{
if (OrderSelect(l_pos_12, SELECT_BY_POS))
{
if (OrderMagicNumber() == MAGIC_NUMBER)
{
if (OrderType() == OP_BUY && OrderOpenPrice() + BREAKEVEN * poin <= Bid)
{
if(OrderStopLoss()<=OrderOpenPrice())
{
//se non è ancora mai stato impostato lo stop loss
if(OrderStopLoss()<=Bid - BREAKEVEN * poin)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid - BREAKEVEN * poin ,OrderTakeProfit(),0,Blue);
}
}
else
{
//se lo stop loss è stato impostato precedentemente
if(OrderStopLoss()<=Bid - BREAKEVEN * poin)
OrderModify(OrderTicket(),OrderOpenPrice(),Bid - BREAKEVEN * poin ,OrderTakeProfit(),0,Blue);
}
}
if (OrderType() == OP_SELL && OrderOpenPrice() - BREAKEVEN * poin >= Ask)
{
if(OrderStopLoss()>=OrderOpenPrice())
{
//se non è ancora mai stato impostato lo stop loss
if(OrderStopLoss()>=Ask + BREAKEVEN * poin)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BREAKEVEN * poin,OrderTakeProfit(),0,Blue);
}
}
else
{
//se lo stop loss è stato impostato precedentemente
if(OrderStopLoss()>=Ask + BREAKEVEN * poin)
OrderModify(OrderTicket(),OrderOpenPrice(),Ask + BREAKEVEN * poin ,OrderTakeProfit(),0,Blue);
}
}
if (OrderType() == OP_BUY && OrderOpenPrice() - STOP_LOSS * poin >= Bid) OrderClose(OrderTicket(), LOTS, Bid, 2, Blue);
if (OrderType() == OP_SELL && OrderOpenPrice() + STOP_LOSS * poin <= Ask) OrderClose(OrderTicket(), LOTS, Ask, 2, Blue);
}
}
}