Отложенный ордер не отрывается по цене 101.69 но при этом - отрывается по цене 101.70 или 101.68 ( в цем прикол волшебной цифры 101.69)
2019.11.13 10:10:07.995 OpenLimit (AFLT,M30) AFLT Ask Last - 104.500000 OpenPrice - 101.850000 TP - 105.600000
2019.11.13 10:10:07.995 OpenLimit (AFLT,M30) CTrade::OrderSend: buy limit 5.00 AFLT at 101.85 tp: 105.60 [invalid price]
тоже не дает
Случайно 0,02
Ну вот и докопались до истины ))
На будущее.
Функция переводит пункты в цену инструмента с учетом шага цены
//+------------------------------------------------------------------+ //| Expert Points to price function | //+------------------------------------------------------------------+ double PointsToPrice(const long a_points) { step_price = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE); double a_price = (double(a_points) * Point() ) / step_price; if(a_points < 0) { a_price = MathFloor(a_price) * step_price; } else { a_price = MathCeil(a_price) * step_price; } return(NormalizeDouble(a_price, Digits())); }
Добавлено
В этом разделе есть топик "В помощь начинающим", Вам, Юрий, очень рекомендую с ним ознакомится...
Может это ENUM_SYMBOL_INFO_DOUBLE SYMBOL_TRADE_TICK_SIZE - Минимальное изменение цены
2019.11.13 16:56:55.309 OpenLimit (AFLT,M15) CTrade::OrderSend: buy limit 5.00 AFLT at 101.35 tp:
105.10 [invalid price]
2019.11.13 16:56:55.309 OpenLimit (AFLT,M15) AFLT Ask Last -104.000000 O-101.350000
TP-105.100000
0.020000
На будущее.
Функция переводит пункты в цену инструмента с учетом шага цены
Добавлено
В этом разделе есть топик "В помощь начинающим", Вам, Юрий, очень рекомендую с ним ознакомится...
Спасибо большое! помогли.
Мне удобней передавать цену открытия
double CorrectPrice( const string Symb, const double Price ) { const double TickSize = MathMax(SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE), SymbolInfoDouble(Symb, SYMBOL_POINT)); return(NormalizeDouble(((int)(Price / TickSize + 0.1)) * TickSize, (int)SymbolInfoInteger(Symb, SYMBOL_DIGITS))); }
Теперь все ок.
При чем тут цена открытия?
Суммировать константу - просто сиюминутная подгонка
out_price = Цена открытия +(-) PointsToPrice(Пункты, на сколько Вы хотите увеличить или уменьшить цену)
Добавлено
Фнкцию PointsToPrice() можно использовать где угодно и когда угодно....
Т.е В любых советниках!
Добавлено
Еще одно важное замечание
Оперировать в советнике нужно не ценами, а пунктами, потому как
восприятие цены может быть ошибочно, (большие цифры до и после запятой)
А если оперировать пунктами, то никогда не ошибешься + подходит для различный инструментов
(не нужно каждый раз компелить советник под новый инструмент)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
2019.11.13 09:46:07.987 OpenLimit (AFLT,M5) AFLT Ask Last -104.340000 O-101.690000 TP-105.440000
2019.11.13 09:46:07.987 OpenLimit (AFLT,M5) CTrade::OrderSend: buy limit 5.00 AFLT at 101.69 tp: 105.44 [invalid price]
при этом пробую открыть отложку BUY LIMIT руками , отрывает но по цене 101.70 или 101.68 т е терминал по цене 101.69 отказывается принимать отложенный ордер
но я вычисляю уровень внутри алгоритма ( как положено нормализую) - каким образом вычисленный уровень привести к цене 101.70 или 101.68 ?
Друзья , поясните проблему , есть какой то шаг цены ? как его вычислять - до открытия ордера
т е это не
SYMBOL_TRADE_STOPS_LEVEL
Минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров
int
SYMBOL_TRADE_FREEZE_LEVEL
Дистанция заморозки торговых операций (в пунктах)
int
т к отрывать BUY LIMIT дает по 101.70 и по101.68 но при этом не дает по 101.69 - текущая цена акции 104.34
SYMBOL_LAST