Как правильно выставить безубыток у сделки в Buy? Сейчас у меня стоит такое условие:
if( Ask > OrderOpenPrice()-(Point*NoLoss) && NoLoss>0)
{
SL = Ask + (NoLoss*Point);
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Blue);
return(0);
}
Это потому, что у Вас СЛ завязан на цену аск, а должен быть завязан на цену открытия ордера. И должно быть условие, что если СЛ модифицирован на цену открытия + Point*NoLoss(в пунктах) - модификация более не происходит
Внес изменения. Теперь получаю 130ю ошибку
if( Bid > OrderOpenPrice()+(NoLoss*Point) && NoLoss>0 )
{
SL = OrderOpenPrice()+(NoLoss*Point);
if(OrderStopLoss()!= SL){
OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0);
}
return(0);
}
}
Внес изменения. Теперь получаю 130ю ошибку
if( Bid > OrderOpenPrice()+(NoLoss*Point) && NoLoss>0 )
{
SL = OrderOpenPrice()+(NoLoss*Point);
if(OrderStopLoss()!= SL){
OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0);
}
return(0);
}
}
Внес изменения. Теперь получаю 130ю ошибку
if( Bid > OrderOpenPrice()+(NoLoss*Point) && NoLoss>0 )
{
SL = OrderOpenPrice()+(NoLoss*Point);
if(OrderStopLoss()!= SL){
OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0);
}
return(0);
}
}
SL нужно нормализовать. И так лучше действительные числа не сравнивать. Почитайте как это делать в документации. Ссылка ниже.
https://www.mql5.com/ru/docs/basis/types/double
- www.mql5.com
SL нужно нормализовать. И так лучше действительные числа не сравнивать. Почитайте как это делать в документации. Ссылка ниже.
https://www.mql5.com/ru/docs/basis/types/double
посмотрел примеры.. как же всё-таки лучше сделать? Так?
if( Bid > OrderOpenPrice()+(NoLoss*Point) && NoLoss>0 )
{
SL = NormalizeDouble((OrderOpenPrice()+(NoLoss*Point)),Digits);
if(OrderStopLoss()<> SL){
OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0);
}
return(0);
}
}
как минимально допустимый уровень стоп-лосса прикрутить? он у меня 0 равен
посмотрел примеры.. как же всё-таки лучше сделать? Так?
if( Bid > OrderOpenPrice()+(NoLoss*Point) && NoLoss>0 )
{
SL = NormalizeDouble((OrderOpenPrice()+(NoLoss*Point)),Digits);
if(OrderStopLoss()<> SL){
OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0);
}
return(0);
}
}
как минимально допустимый уровень стоп-лосса прикрутить? он у меня 0 равен
<> - это вы откуда взяли? Не придумывайте.
https://www.mql5.com/ru/docs/basis/operations/relation
Ясно ведь приведено два примера сравнения вещественных чисел. Используйте функцию:
bool CompareDoubles(double number1,double number2) { if(NormalizeDouble(number1-number2,8)==0) return(true); else return(false); }
А условие сравнения пишите так:
if( !CompareDoubles( OrderStopLoss(), SL ) ) // Если стоп ордера != SL { OrderModify(...); // Модифицируем ордер }
Минимально допустимый уровень СЛ? Это как? Если Вы говорите о минимальном отступе от цены, то смотрите функцию SymbolInfoInteger(), идентификатор SYMBOL_TRADE_STOPS_LEVEL. Узнаете мин. допустимое расстояние от текущей цены (бид для ордеров на покупку) в пунктах. Умножаете это значение на поинт текущего символа, вычитаете от текущей цены бид. Это и будет мин. отступ от текущей цены для установки СЛ.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как правильно выставить безубыток у сделки в Buy? Сейчас у меня стоит такое условие:
if( Ask > OrderOpenPrice()-(Point*NoLoss) && NoLoss>0)
{
SL = Ask + (NoLoss*Point);
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Blue);
return(0);
}