А зачем там вот это if(OrderType()<=OP_SELL, а потом вот это if(OrderType()==OP_BUY)??? Как бы что-то лишнее...
Ну и return(0); - тоже лишнее.
И вообще, закрытие и модификация ордеров должны быть оформлены отдельными циклами, а ещё лучше - отдельными функциями.
Спасибо! Попробую.
Vitalie Postolache:
А зачем там вот это if(OrderType()<=OP_SELL, а потом вот это if(OrderType()==OP_BUY)??? Как бы что-то лишнее...
Ну и return(0); - тоже лишнее.
И вообще, закрытие и модификация ордеров должны быть оформлены отдельными циклами, а ещё лучше - отдельными функциями.
Написал так, но увы трал не срабатывает, что я мог еще упустить?
Filya1212:
for(int t=0;t<OrdersTotal();t++)
{
int res=OrderSelect(t, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderType() == OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
{
int res=OrderSelect(t, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderType() == OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
else
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
Artem Ashikhmin:
Спасибо большое, сработало!
Рекомендую применить этот код трала, а свой удалить:
extern int StartTrailing = 0;
extern int Trailing = 0;
//-----------------------------+
int i;
//-----------------------------+
void start() {
//-----------------------------+
double buy_last_price = -1;
double sell_last_price = -1;
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice();}
if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice();}
}
//TrailingStart//
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if (Trailing>0 && (Bid-buy_last_price)>=StartTrailing*Point && OrderType()==OP_BUY
&& NormalizeDouble(Bid-(Trailing +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
&& NormalizeDouble(Bid-Trailing *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
int modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing *Point,Digits), OrderTakeProfit(), 0, Blue);
if (Trailing>0 && (sell_last_price-Ask)>=StartTrailing*Point && OrderType()==OP_SELL
&& (NormalizeDouble(Ask+(Trailing +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
&& NormalizeDouble(Ask+Trailing *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing *Point,Digits), OrderTakeProfit(), 0, Red);
} //TrailingEnd//
extern int Trailing = 0;
//-----------------------------+
int i;
//-----------------------------+
void start() {
//-----------------------------+
double buy_last_price = -1;
double sell_last_price = -1;
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice();}
if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice();}
}
//TrailingStart//
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if (Trailing>0 && (Bid-buy_last_price)>=StartTrailing*Point && OrderType()==OP_BUY
&& NormalizeDouble(Bid-(Trailing +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
&& NormalizeDouble(Bid-Trailing *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
int modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing *Point,Digits), OrderTakeProfit(), 0, Blue);
if (Trailing>0 && (sell_last_price-Ask)>=StartTrailing*Point && OrderType()==OP_SELL
&& (NormalizeDouble(Ask+(Trailing +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
&& NormalizeDouble(Ask+Trailing *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing *Point,Digits), OrderTakeProfit(), 0, Red);
} //TrailingEnd//
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго времени суток!
При написании советника столкнулся с такой проблемой:
Открыто несколько позиций, но трелинг стоп двигает стоп лосс только по одной позиции, возможно ли использовать трейлинг для всех позиций одновременно, если да, то как?
Заранее спасибо!