Некорректная цена выставления ордера

 
Приветствую всех!
Новичок, извините если вопрос слишком простой. 
Советник выставляет ордера отталкиваясь от среднего значения (аск+бид)/2. Но получаются не всегда корректные значения.
Например шаг цены 10. Аск 200 бид 190, наша цена (200+190)/2=195. Т.к. шаг цены 10, то выдает ошибку.
Как ее избежать, что бы советник всегда выставлял корректную цену, при любом допустимом шаге цены (10, 5, 1, 0,1).
МТ5, фортс.
 
Rama77:
Приветствую всех!
Новичок, извините если вопрос слишком простой. 
Советник выставляет ордера отталкиваясь от среднего значения (аск+бид)/2. Но получаются не всегда корректные значения.
Например шаг цены 10. Аск 200 бид 190, наша цена (200+190)/2=195. Т.к. шаг цены 10, то выдает ошибку.
Как ее избежать, что бы советник всегда выставлял корректную цену, при любом допустимом шаге цены (10, 5, 1, 0,1).
МТ5, фортс.

Перед отправкой торгового приказа используйте нормализацию цены (метод NormalizePrice торгового класса CSymbolInfo)

 
Vladimir Karputov:

Перед отправкой торгового приказа используйте нормализацию цены (метод NormalizePrice торгового класса CSymbolInfo)

Спасибо! А какой алгоритм нормализации? Цену 195 из примера, как преобразует?

 
Rama77:

Спасибо! А какой алгоритм нормализации? Цену 195 из примера, как преобразует?

CSymbolInfo - это торговый класс, который идёт в стандартной поставке с терминалом.

Открываете редактор MetaEditor -> MQL5 -> Include -> Trade -> SymbolInfo.mqh. Смотрите реализацию.

Или второй вариант (более быстрый) - просто пишите пример и проверяете :)

 
Rama77:
Приветствую всех!
Новичок, извините если вопрос слишком простой. 
Советник выставляет ордера отталкиваясь от среднего значения (аск+бид)/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
Файлы:
 
Спасибо большое за подробный ответ!