- Отложенный ордер EA
- Не правильно работает NormalizeDouble, как исправитЬ?
- Ищу индикатор (советник, скрипт)
Хочу чтобы советник автоматически определял явные уровни. Для этого мне нужно, чтобы анализ цен проходил без 5го знака. Например, 0.70797, 0.70798, 0.70794, 0.70799 - по сути это одна цена 0.7079. На данный момент решил при помощи StringSubstr. Но может есть другой, более логичный и правильный способ?
MathRound(), MathCeil(), MathFloor(). В какую сторону нужно, в такую и округляете.
NormalizeDouble(x,4)
Хочу чтобы советник автоматически определял явные уровни. Для этого мне нужно, чтобы анализ цен проходил без 5го знака. Например, 0.70797, 0.70798, 0.70794, 0.70799 - по сути это одна цена 0.7079. На данный момент решил при помощи StringSubstr. Но может есть другой, более логичный и правильный способ?
Как сделать, чтобы советник работал с частотой поступления 4-х разрядных котировок, когда на входе его 5-разрядные котировки.
MathRound(), MathCeil(), MathFloor() NormalizeDouble сюда вообще не подходят, так как они округляют. Например 0.70798 округляется до 0.708, а это уже другая цена. Должна быть 0,7079.
MathRound(), MathCeil(), MathFloor() NormalizeDouble сюда вообще не подходят, так как они округляют. Например 0.70798 округляется до 0.708, а это уже другая цена. Должна быть 0,7079.
Вы просто не умеете их готовить)) :
#define MATH_ROUND(anyValue, nPrecision) floor(double(anyValue) * double(pow(10.0, nPrecision)) + double(.51)) / double(pow(10.0, nPrecision)) #define FLOOR_ROUND(anyValue, nPrecision) floor(double(anyValue) * double(pow(10.0, nPrecision))) / double(pow(10.0, nPrecision)) void OnStart() { double fPrice = 0.79798; Alert("4-digits price to floor: ", FLOOR_ROUND(fPrice, Digits() - 1)); Alert("4-digits price to near value: ", MATH_ROUND(fPrice, Digits() - 1)); }
На выходе:
Alert: 4-digits price to near value: 0.798 Alert: 4-digits price to floor: 0.7979
Скопировал ваш пример, запустил и ничего не получилось. Вот что на выходе у меня:
4-digits price to near value: 0.8
4-digits price to floor: 0.79
Рассмотрел поэтапно и понял, что сначала значение умножается на возведение в степень, затем делится и это приводит к одному и тому же числу и затем мат функция действует как обычно. Может с возведением в степень что то не правильно?
Скопировал ваш пример, запустил и ничего не получилось. Вот что на выходе у меня:
4-digits price to near value: 0.8
4-digits price to floor: 0.79
Рассмотрел поэтапно и понял, что сначала значение умножается на возведение в степень, затем делится и это приводит к одному и тому же числу и затем мат функция действует как обычно. Может с возведением в степень что то не правильно?
Наверное, запускали на валюте с тремя знаками после запятой. Например, на USDJPY. Запустите на той валюте, у которой 5 знаков после запятой: USDCHF, EURUSD и т. п.
Или же вместо жесткого задания значения fPrice возьмите цену той валюты, на которой запустили. Например, Bid или Ask.Пока разбираюсь, но зачем вы используете скобки в Digits()? Я всегда делаю так например, Digits-1. Т. е. без скобок
В принципе без разницы. Хотя как-то Ренат говорил о том, что лучше все-таки использовать вызов функции. Не помню уже, почему.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования