Приветствую всех!
Новичок, извините если вопрос слишком простой.
Советник выставляет ордера отталкиваясь от среднего значения (аск+бид)/2. Но получаются не всегда корректные значения.
Например шаг цены 10. Аск 200 бид 190, наша цена (200+190)/2=195. Т.к. шаг цены 10, то выдает ошибку.
Как ее избежать, что бы советник всегда выставлял корректную цену, при любом допустимом шаге цены (10, 5, 1, 0,1).
МТ5, фортс.
Перед отправкой торгового приказа используйте нормализацию цены (метод NormalizePrice торгового класса CSymbolInfo)
Перед отправкой торгового приказа используйте нормализацию цены (метод NormalizePrice торгового класса CSymbolInfo)
Спасибо! А какой алгоритм нормализации? Цену 195 из примера, как преобразует?
Спасибо! А какой алгоритм нормализации? Цену 195 из примера, как преобразует?
CSymbolInfo - это торговый класс, который идёт в стандартной поставке с терминалом.
Открываете редактор MetaEditor -> MQL5 -> Include -> Trade -> SymbolInfo.mqh. Смотрите реализацию.
Или второй вариант (более быстрый) - просто пишите пример и проверяете :)
Приветствую всех!
Новичок, извините если вопрос слишком простой.
Советник выставляет ордера отталкиваясь от среднего значения (аск+бид)/2. Но получаются не всегда корректные значения.
Например шаг цены 10. Аск 200 бид 190, наша цена (200+190)/2=195. Т.к. шаг цены 10, то выдает ошибку.
Как ее избежать, что бы советник всегда выставлял корректную цену, при любом допустимом шаге цены (10, 5, 1, 0,1).
МТ5, фортс.
На каком инструменте проверяете? Этот символ есть на MetaQuotes-Demo? Иначе я не смогу проверить.
Сам нашёл быстрее.
Символ RST-9.18.
Код:
//+------------------------------------------------------------------+ //| NormalizePrice.mq5 | //| Copyright © 2018, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2018, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" #property script_show_inputs #include <Trade\SymbolInfo.mqh> CSymbolInfo m_symbol; // symbol info object //--- input parameters input double InpPriceUP = 200; input double InpPriceDOWN= 190; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- if(!m_symbol.Name(Symbol())) // sets symbol name return; Print("Medium price: ",DoubleToString(m_symbol.NormalizePrice((InpPriceUP+InpPriceDOWN)/2.0),m_symbol.Digits())); } //+------------------------------------------------------------------+
Результат:
NormalizePrice (RTS-9.18,M1) Medium price: 200
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Новичок, извините если вопрос слишком простой.
Советник выставляет ордера отталкиваясь от среднего значения (аск+бид)/2. Но получаются не всегда корректные значения.
Например шаг цены 10. Аск 200 бид 190, наша цена (200+190)/2=195. Т.к. шаг цены 10, то выдает ошибку.
Как ее избежать, что бы советник всегда выставлял корректную цену, при любом допустимом шаге цены (10, 5, 1, 0,1).
МТ5, фортс.