Andrey Dik:
Банальное NormalizeDouble (), очевидно, не подойдет, если к примеру имеем символ что то типа такого:
Как рассчитать SL и TP для такого символа с правильной нормализацией? Всё что приходит мне на ум не выглядит надежным.
//+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ //| Приведение значения к точности одного тика | //+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ double NP(double fValue, double fTickSize) { if (fTickSize == 0.0) return 0.0; return MathRound(fValue / fTickSize) * fTickSize; }
NormalizeDouble(MathRound(value/tick_size)*tick_size,_Digits));
Ihor Herasko:
Alexander Bereznyak:
Спасибо!
и, концентрат, так сказать, будет выглядеть так:
//--- input parameters input int TP = 1; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int digits = (int)SymbolInfoInteger (Symbol (), SYMBOL_DIGITS); double tickSize = SymbolInfoDouble (Symbol (), SYMBOL_TRADE_TICK_SIZE); Print ("----------"); Print ("digits :", digits); Print ("tickSize:", tickSize); MqlTick tick; SymbolInfoTick (Symbol (), tick); Print (DoubleToString (tick.ask, digits)); Print (DoubleToString (NP (tick.ask + TP * tickSize, tickSize, digits), digits)); } //+------------------------------------------------------------------+ double NP(double value, double tickSize, int digits) { if (tickSize == 0.0) return 0.0; return NormalizeDouble (MathRound (value / tickSize) * tickSize, digits); }
Есть ещё ришка c шагом 10, например. Для неё пришлось добавить
if (dTickSize > 1) value = ((int )value) / ((int )dTickSize) * ((int )dTickSize);

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Банальное NormalizeDouble (), очевидно, не подойдет, если к примеру имеем символ что то типа такого:
Как рассчитать SL и TP для такого символа с правильной нормализацией? Всё что приходит мне на ум не выглядит надежным.
Кстати, в подобных случаях спред терминал показывает неадекватно, так как в этом примере спред 1.