Не работает трейлинг-стоп. Т.е. вверх работает, а вниз нет. - страница 2

 
Так попробуй:
if (OrderType()==OP_SELL) 
{ 
if (TrailingStop>0)
{
if (OrderOpenPrice()-Ask<=(TrailingStop+Pips)*Point) 
{ 
if (OrderStopLoss()>Ask+Point*TrailingStop||OrderStopLoss()==0)
{ 
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE);
return(0); 
}
}
}
}

if (OrderType()==OP_BUY)
{
if (TrailingStop>0) 
{
if (Bid-OrderOpenPrice()>=(TrailingStop+Pips)*Point) 
{
if (OrderStopLoss()<(Bid-Point*TrailingStop)) 
{ 
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE);
return(0);
}
}
}
}
 
Roger писал (а) >>
Так попробуй:

Результат практически идентичный с моим. Но у вас код красивее. :)))

Только вопрос: почему у селла есть такая строчка:

if (OrderStopLoss()>Ask+Point*TrailingStop||OrderStopLoss()==0)

А у бая:

if (OrderStopLoss()<(Bid-Point*TrailingStop))

Т.е. мы так обходим условие, что СЛ может быть всегда меньше:

if (OrderStopLoss()>Ask+Point*TrailingStop

?

Ну да ладно, потом разберёмся...

А вот кто что посоветует:

Если команда бай

Если открытых ордеров < 1

Открыть ордер №1 лот такой-то

Выставить отложенный ордер №2 лот такой-то

...

Сработал отложенный ордер №2

Выставить отложенный ордер №3 лот вот-такой-то

...

Сработал отложенный ордер №3

Выставить отложенный ордер №4 лот вот-такой-сякой-то {Закрыть ордер №1}

...

Сработал отложенный ордер № N лот такой-пересякой-такой-то {Закрыть ордер № N-2}

Т.е. чтобы всегда были открытые только два последних ордера?

Я уже дошла до Array, до определения каждого лота отдельной строкой...

Прямо мужской шовинизм какой-то... :)))

 
У меня этот код работает нормально. На селле, если первоначально стопа нет, то условие, что стоп меньше чего бы там ни было всегда истинно.
Попробуй еще так, потом скажешь какой код ошибки дает:
if (OrderType()==OP_SELL) 
{ 
if (TrailingStop>0)
{
if (OrderOpenPrice()-Ask<=(TrailingStop+Pips)*Point) 
{ 
if (OrderStopLoss()>Ask+Point*TrailingStop||OrderStopLoss()==0)
{ 
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE))
Print("ErrorSell - ",GetLastError());
return(0); 
}
}
}
}

if (OrderType()==OP_BUY)
{
if (TrailingStop>0) 
{
if (Bid-OrderOpenPrice()>=(TrailingStop+Pips)*Point) 
{
if (OrderStopLoss()<(Bid-Point*TrailingStop)) 
{ 
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE))
Print("ErrorBuy - ",GetLastError());
return(0);
}
}
}
}
 
Roger писал (а) >>
У меня этот код работает нормально. На селле, если первоначально стопа нет, то условие, что стоп меньше чего бы там ни было всегда истинно.
Попробуй еще так, потом скажешь какой код ошибки дает:

Почему-то начал выставляться СЛ... Сам... Где это срабатывает -- ума не приложу!!!

 
Скажите, какой смысл "форматировать" изначально неформатированный текст? Ручками лень поработать? Ленивые никогда ничего не получат...
 
stringo писал (а) >>
Скажите, какой смысл "форматировать" изначально неформатированный текст? Ручками лень поработать? Ленивые никогда ничего не получат...

Это кому камешек?

 

 Приветствую!

помогите пожалуйста вкрутить трал к советнику(Combo Right-Решетова)

выдаёт такие ошибки при компилировании:

'TrailingPositions' - function is not defined 

Файл прикрепляю

заранее благодарен))

Файлы: