- Ошибки, баги, вопросы
- Как рассчитать объем сделки для покрытия серии убыточных сделок
- Частичное закрытие ордера
На нашёл функции для математического округления в mql5. Есть конечно NormalizeDouble но это не округление вообще, а просто откидывание цифр. Может есть у кого нибудь отдельно функция для вычисления, буду весьма признателен.
Выделенное - ложное утверждение.
Если нужно округление до ближайшего целого числа то вот пример:
//| MathRound.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property description "MathRound: Округляет число до ближайшего целого"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
double price=1.01560;
for(int i=0;i<10;i++)
{
Print(DoubleToString(price,5),", MathRound: ",MathRound(price));
price+=1.9;
}
}
//+------------------------------------------------------------------+
И результат:
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 2.91560, MathRound: 3.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 4.81560, MathRound: 5.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 6.71560, MathRound: 7.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 8.61560, MathRound: 9.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 10.51560, MathRound: 11.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 12.41560, MathRound: 12.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 14.31560, MathRound: 14.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 16.21560, MathRound: 16.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1) 18.11560, MathRound: 18.0
Плохо искали.
MathRound
искал хорошо - это округление до целого числа, а мне надо до опр.знака после запятой :)
искал хорошо - это округление до целого числа, а мне надо до опр.знака после запятой :)
Тогда ответ выше. Нормализация не "просто откидывание цифр".
к сожалению оно округляет допустим 161.4345 до 161.43. Я думаю суть вы поймёте.
Вам для чего: для печати во вкладку "Эксперты" или для нормализации цен TakeProfit и StopLoss?
Нужно что бы 161.4345 округлилось до 161.44.
к сожалению оно округляет допустим 161.4345 до 161.43. Я думаю суть вы поймёте.
Нужно что бы 161.4345 округлилось до 161.44.
Если округлять по правилам (алгебра, 5-й класс), то 161.4345 округляется с точность до второго знака до 161.43
А там только одно правило прописано? Вообще их несколько...
Округление к большему (округление к +∞, округление вверх, англ. ceiling — досл. «потолок») — если обнуляемые знаки не равны нулю, предшествующий знак увеличивают на единицу, если число положительное, или сохраняют, если число отрицательное.
В Math.mqh есть перегрузка функции округления до заданного числа знаков после запятой.
void OnStart()
{
//---
Print(M_PI);
for(int digits=0; digits<10; digits++)
{
Print(digits,": ",MathRound(M_PI,digits));
}
}
TestRound (EURUSD,H1) 0: 3.0
TestRound (EURUSD,H1) 1: 3.1
TestRound (EURUSD,H1) 2: 3.14
TestRound (EURUSD,H1) 3: 3.142
TestRound (EURUSD,H1) 4: 3.1416
TestRound (EURUSD,H1) 5: 3.14159
TestRound (EURUSD,H1) 6: 3.141593
TestRound (EURUSD,H1) 7: 3.1415927
TestRound (EURUSD,H1) 8: 3.14159265
TestRound (EURUSD,H1) 9: 3.141592654
TestRound (EURUSD,H1) 10: 3.1415926536
А там только одно правило прописано? Вообще их несколько...
Округление к большему (округление к +∞, округление вверх, англ. ceiling — досл. «потолок») — если обнуляемые знаки не равны нулю, предшествующий знак увеличивают на единицу, если число положительное, или сохраняют, если число отрицательное.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования