Не знаю как там в 5ке, но в 4ке типы преобразую так.
PPP2 = int( PPP1 );
Не уверен что с ценой так можно поступать. Может не в типе дело, а в значении price_to_sell ? Выведите её в Журнал перед отправкой запроса. Проверьте что отправляете
trade.price = MathCeil(price/ticksize)*ticksize;
Здравствуйте!
Пишу робота, все нормально на нефти отрабатывается.
Но вот на РТС пишет ivalid price , 10015 ошибка.
Создаю лимитку, цену указываю так:
trade.price = NormalizeDouble(price_to_sell,_Digits); // цена
Но ордер Sell Stop не открывается.
Вот дамп
- SellStop не выполнен - код ошибки:4756
- retcode - 10015
- Digits-0
- Bid- 105080.0
- pr-104983.0
- sl-105132.0
- tp-104498.0
Цель: сделать советника работоспособным под разные инструменты.
Прошу помощи.
Добрый день!
ВСЕ ЦЕНЫ, включая RTS, имеют тип double
Класс CTrade не имеет поля "price"
Чтобы внятно ответить на Ваш вопрос, нужен код,
без него, будут не правильные рекомендации и советы.
bool BuyLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0, const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment=""); bool SellLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0, const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
Если Вы используете приведённый выше код класса CTrade
BuyLimit и SellLimit, то видно, что price имеет тип double, равно как и другие команды
И ещё...
Для торговли на ФОРТС, я не рекомендую Вам использовать торговый
класс CTrade используйте OrderSend или OrderSendAsync
Или напишите свой класс с использованием этих функций.
Я использую такой вариант
LOTSTEP = (int)MathAbs(MathLog10(MarketInfo(_Symbol, MODE_LOTSTEP)));
и потом нормализую лот в соответствии с этим.
lot = NormalizeDouble(lots, LOTSTEP);
Я использую такой вариант
и потом нормализую лот в соответствии с этим.
Не вводите человека в заблуждение (он пишет на MQL5)
И какие отличия mql4 от mql5 в этом варианте?
В mql5 нет десятичного логарифма? или нет MarketInfo()
А вот что не понял, так это разговор о цене, а не о размере лота.
Извиняюсь.
И какие отличия mql4 от mql5 в этом варианте?
В mql5 нет десятичного логарифма? или нет MarketInfo()
А вот что не понял, так это разговор о цене, а не о размере лота.
Извиняюсь.
В 5 нет MODE_LOTSTEP и MarketInfo
Решается это просто и работает на ВСЕХ инструментах!
Цена выставления ордера рассчитывается так:
Цена выставления ордера = текущая цена( или какая-то ) +(-) Цена( N пунктов)
Тогда:
double order_price; double current_price; double delta_price; order_price = current_price + delta_price; //delta_price может быть отрицательной //Допустим, Вы хотите выставить ордер на 5 пунктов меньше текущей цены, //тогда: delta_price = PointsToPrice (-5); //Если увеличить на 10 пунктов, то delta_price = PointsToPrice (10); //--- Размер тика double step_size = SymbolInfoDouble( _Symbol, SYMBOL_TRADE_TICK_SIZE ); //+------------------------------------------------------------------+ //| Expert Points to price function | //+------------------------------------------------------------------+ double PointsToPrice( const long a_points ) { double a_price = ( double( a_points ) * _Point ) / step_size; if ( a_points < 0 ) { a_price = MathFloor( a_price ) * step_size; } else { a_price = MathCeil( a_price ) * step_size; } return( NormalizeDouble( a_price, _Digits ) ); }
Спасибо большое!
Ошибка оказалась в том, что я не учитывал размер тика.
Последний выше пример достаточно универсален, спасибо!
Пока искал решение, пришел к классу https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfonormalizeprice
Меньше кода задействовано будет;)
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
Пишу робота, все нормально на нефти отрабатывается.
Но вот на РТС пишет ivalid price , 10015 ошибка.
Создаю лимитку, цену указываю так:
Но ордер Sell Stop не открывается.
Вот дамп
Цель: сделать советника работоспособным под разные инструменты.
Прошу помощи.