При StopLoss_=0 срабатывает верхнее условие - попытка модификации TakeProfit. Ошибка в том, что Вы отнимаете от ЦЕНЫ ОТКРЫТИЯ - при этом уровень TakeProfit может оказаться ВЫШЕ ТЕКУЩЕЙ ЦЕНЫ, а это ошибка.
В Вашем случае нужно отнимать от ТЕКУЩЕЙ ЦЕНЫ (m_position.PriceCurrent).
Может быть недопустимо близко к текущей цене. Как это проверить?
У меня нет доступа к бирже, поэтому или сами или работайте на форексных инструментах. Извините.
Добавлено: введите ещё одну проверку - для позиции Sell новый TakeProfit (расчётное значение) не должен быть ВЫШЕ или РАВЕН текущему TakeProfit позиции.
У меня нет доступа к бирже, поэтому или сами или работайте на форексных инструментах. Извините.
Добавлено: введите ещё одну проверку - для позиции Sell новый TakeProfit (расчётное значение) не должен быть ВЫШЕ или РАВЕН текущему TakeProfit позиции.
Vladimir Karputov: ...введите ещё одну проверку - для позиции Sell новый TakeProfit (расчётное значение) не должен быть ВЫШЕ или РАВЕН текущему TakeProfit позиции.
Не подходит, модифицирую по ATR Какие ещё проверки можно сделать для данной ошибки? Все возможные. В мт4 есть STOPLEVEL, а здесь что?
//+------------------------------------------------------------------+//| Print CTrade result |//+------------------------------------------------------------------+void PrintResult(CTrade &trade,CSymbolInfo &symbol,CPositionInfo &position)
{
Print("Code of request result: "+IntegerToString(trade.ResultRetcode()));
Print("code of request result as a string: "+trade.ResultRetcodeDescription());
Print("Deal ticket: "+IntegerToString(trade.ResultDeal()));
Print("Order ticket: "+IntegerToString(trade.ResultOrder()));
Print("Volume of deal or order: "+DoubleToString(trade.ResultVolume(),2));
Print("Price, confirmed by broker: "+DoubleToString(trade.ResultPrice(),symbol.Digits()));
Print("Current bid price: "+DoubleToString(symbol.Bid(),symbol.Digits())+" (the requote): "+DoubleToString(trade.ResultBid(),symbol.Digits()));
Print("Current ask price: "+DoubleToString(symbol.Ask(),symbol.Digits())+" (the requote): "+DoubleToString(trade.ResultAsk(),symbol.Digits()));
Print("Broker comment: "+trade.ResultComment());
Print("Price of position opening: "+DoubleToString(position.PriceOpen(),symbol.Digits()));
Print("Price of position's Stop Loss: "+DoubleToString(position.StopLoss(),symbol.Digits()));
Print("Price of position's Take Profit: "+DoubleToString(position.TakeProfit(),symbol.Digits()));
Print("Current price by position: "+DoubleToString(position.PriceCurrent(),symbol.Digits()));
DebugBreak();
}
Также нужно обновлять цену объекта класса CSymbolInfo непосредственно перед модификацией.
Здравствуйте. Получаю ошибку если StopLoss_=0
failed modify #2 sell 3.00 Si-9.18 sl: 0, tp: 62749 -> sl: 0, tp: 62774 [Invalid stops]
Ошибочная логика написания программы.
При StopLoss_=0 срабатывает верхнее условие - попытка модификации TakeProfit. Ошибка в том, что Вы отнимаете от ЦЕНЫ ОТКРЫТИЯ - при этом уровень TakeProfit может оказаться ВЫШЕ ТЕКУЩЕЙ ЦЕНЫ, а это ошибка.
В Вашем случае нужно отнимать от ТЕКУЩЕЙ ЦЕНЫ (m_position.PriceCurrent).
Была открыта позиция sell, активировался selllimit, мне нужно перенести tp относительно новой цены позиции, а не относительно текущей цены.
Какую проверку нужно сделать чтобы не пытаться модифицировать на недопустимую цену?
Была открыта позиция sell, активировался selllimit, мне нужно перенести tp относительно новой цены позиции, а не относительно текущей цены.
Какую проверку нужно сделать чтобы не пытаться модифицировать на недопустимую цену?
Проверка:
if(m_position.PriceOpen()-ExtTakeProfit<m_position.PriceCurrent() { m_trade.PositionModify(m_position.Ticket(), m_position.StopLoss(), m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit) ); ...Проверка:
Спасибо, но ошибка осталась.
Может быть недопустимо близко к текущей цене. Как это проверить?
Спасибо, но ошибка осталась.
Может быть недопустимо близко к текущей цене. Как это проверить?
У меня нет доступа к бирже, поэтому или сами или работайте на форексных инструментах. Извините.
Добавлено: введите ещё одну проверку - для позиции Sell новый TakeProfit (расчётное значение) не должен быть ВЫШЕ или РАВЕН текущему TakeProfit позиции.
У меня нет доступа к бирже, поэтому или сами или работайте на форексных инструментах. Извините.
Добавлено: введите ещё одну проверку - для позиции Sell новый TakeProfit (расчётное значение) не должен быть ВЫШЕ или РАВЕН текущему TakeProfit позиции.
Наверно, цене открытия (POSITON_PRICE_OPEN) ?
Наверно, цене открытия (POSITON_PRICE_OPEN) ?
Этот вариант был выше. Смотрите сообщения выше. Вы ответили в середине беседы.
Не подходит, модифицирую по ATR Какие ещё проверки можно сделать для данной ошибки? Все возможные. В мт4 есть STOPLEVEL, а здесь что?
Не подходит, модифицирую по ATR Какие ещё проверки можно сделать для данной ошибки? Все возможные. В мт4 есть STOPLEVEL, а здесь что?
На бирже я не подскажу, тут уж Вы сами. Я не имею доступа к реал бирже.
Добавлено: всегда при ошибке распечатывайте как можно больше информации: Bid, Ask, Last, PriceCurrent, PriceOpen, TakeProfit (текущий и расчётный) ...
Добавлено, добавлено.
Универсальная функция - вызывается после любой торговой операции
Также нужно обновлять цену объекта класса CSymbolInfo непосредственно перед модификацией.
Что в параметры передавать?