Как сделать чтобы при срабатывании Стопа Трала закрывались все позиции находящиеся в рынке.
Я что то сам пока не понимаю как это можно реализовать ?
У меня в Эксперте есть вот такой КОД трала (подпрограмма):
int TrailAllOrders()
{
int a, tot;
tot = CreateTicketArray(OP_BUY, Magic);
for(a = 0; a < tot; a++)
TrailingStop(Ticket[a]);
tot = CreateTicketArray(OP_SELL, Magic);
for(a = 0; a < tot; a++)
TrailingStop(Ticket[a]);
}
void TrailingStop(int ticket)
{
int res;
OrderSelect(ticket, SELECT_BY_TICKET);
if(OrderType() == OP_BUY)
if(TrailWhileMinus == true || Bid-OrderOpenPrice()>Point*Trail) //не тралим, пока не можем достичь безубытка первым переносом стопа
if(Bid - OrderStopLoss() > Trail*Point)
{
res = OrderModify(OrderTicket(), 0, Bid - Trail*Point, OrderTakeProfit(), 0);
if(res<0)
Alert("Ошибка модификации Трала: ", Error(GetLastError()));
}
if(OrderType() == OP_SELL)
if(TrailWhileMinus == true || OrderOpenPrice()-Ask>Point*Trail) //не тралим, пока не можем достичь безубытка первым переносом стопа
if(OrderStopLoss() - Ask > Trail*Point)
{
res = OrderModify(OrderTicket(), 0, Ask + Trail*Point, OrderTakeProfit(), 0);
if(res<0)
Alert("Ошибка модификации Трала: ", Error(GetLastError()));
}
}
int CreateTicketArray(int dir, int SysID)
{
int totall = OrdersTotal(), x, c=0;
if (totall <= 0) return (0);
for(x = 0;x < totall; x++)
{
OrderSelect(x, SELECT_BY_POS);
if ((OrderType()==dir) && (OrderMagicNumber()==SysID))
{
Ticket[c] = OrderTicket();
c++;
}
}
return (c);
}
Как сделать чтобы при срабатывании Стопа Трала закрывались все позиции находящиеся в рынке.
Я что то сам пока не понимаю как это можно реализовать ?
код с точки зрения оптимизации не оптимальный!
логично оббегать в цикле открытые ордера один раз !
накладные расходы на двойной пробег по селам потом по баям
затем снова 2 пробега по обоим направлениям итого 4 цикла!
хотя все можно заюзать в одном
тут над логикой бы поработать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
У меня в Эксперте есть вот такой КОД трала (подпрограмма):
int TrailAllOrders()
{
int a, tot;
tot = CreateTicketArray(OP_BUY, Magic);
for(a = 0; a < tot; a++)
TrailingStop(Ticket[a]);
tot = CreateTicketArray(OP_SELL, Magic);
for(a = 0; a < tot; a++)
TrailingStop(Ticket[a]);
}
void TrailingStop(int ticket)
{
int res;
OrderSelect(ticket, SELECT_BY_TICKET);
if(OrderType() == OP_BUY)
if(TrailWhileMinus == true || Bid-OrderOpenPrice()>Point*Trail) //не тралим, пока не можем достичь безубытка первым переносом стопа
if(Bid - OrderStopLoss() > Trail*Point)
{
res = OrderModify(OrderTicket(), 0, Bid - Trail*Point, OrderTakeProfit(), 0);
if(res<0)
Alert("Ошибка модификации Трала: ", Error(GetLastError()));
}
if(OrderType() == OP_SELL)
if(TrailWhileMinus == true || OrderOpenPrice()-Ask>Point*Trail) //не тралим, пока не можем достичь безубытка первым переносом стопа
if(OrderStopLoss() - Ask > Trail*Point)
{
res = OrderModify(OrderTicket(), 0, Ask + Trail*Point, OrderTakeProfit(), 0);
if(res<0)
Alert("Ошибка модификации Трала: ", Error(GetLastError()));
}
}
int CreateTicketArray(int dir, int SysID)
{
int totall = OrdersTotal(), x, c=0;
if (totall <= 0) return (0);
for(x = 0;x < totall; x++)
{
OrderSelect(x, SELECT_BY_POS);
if ((OrderType()==dir) && (OrderMagicNumber()==SysID))
{
Ticket[c] = OrderTicket();
c++;
}
}
return (c);
}
Как сделать чтобы при срабатывании Стопа Трала закрывались все позиции находящиеся в рынке.
Я что то сам пока не понимаю как это можно реализовать ?