Mal ein kleines Beispiel:
(Davon ausgehend, das du immer nur 2 Orders offen hast...)
Code:
int orderTicket1 = 0;
int orderTicket2 = 0;
// Order eröffnen...
// ...
// ...
void OnTick()
{
...
if(orderTicket1)
updateSL(orderTicket1);
if(orderTicket2)
updateSL(orderTicket2);
if(OrderSelect(orderTicket2,SELECT_BY_TICKET,MODE_HISTORY))
{
if(OrderSelect(orderTicket1,SELECT_BY_TICKET))
{
if(OrderType() == OP_BUY)
OrderClose(orderTicket1,OrderLots(),Bid,3);
else
OrderClose(orderTicket1,OrderLots(),Ask,3);
}
}
...
}
void updateSL(int ticket)
{
ResetLastError();
if(OrderSelect(ticket,SELECT_BY_TICKET))
{
if(OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > Trail_Target *100 * Point)
{
if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
Print("Error setting Buy trailing stop: ", GetLastError());
}
}
}
else if(OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > Trail_Target *100 * Point)
{
if(OrderStopLoss() > Ask + TSL || OrderStopLoss() == 0)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSL, OrderTakeProfit(), Blue))
Print("Error setting Sell trailing stop: ", GetLastError());
}
}
}
}
}
"OrderClose(...)" ist hier nur im Beispiel. Kannst hier auch deine "CloseAllOrders()" aufrufen, wobei bei 2 Positionen ja
eh nur eine übrig bleibt und geschlossen werden muss.