Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;
AUTOPRICE=MathFloor(Averab)*Point;
Print("FLOAT "+" askP="+askP+" bidP="+bidP+" Averab="+DoubleToString(Averab,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE,10));
double AUTOPRICE2;
double askP2=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
double bidP2=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab2=((askP2+bidP2))/2.0;
AUTOPRICE2=MathFloor(Averab2)*Point;
Print("DOUBLE "+" askP2="+askP2+" bidP2="+bidP2+" Averab2="+DoubleToString(Averab2,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE2,10));
спред:2
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE askP2=105143 bidP2=105141 Averab2=105142.0000000000 AUTOPRICE=1.0514200000
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT askP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE=1.0514199734
спред:3
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.0514200000
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734
спред:4
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE askP2=105145 bidP2=105141 Averab2=105143.0000000000 AUTOPRICE=1.0514200000
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT askP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE=1.0514299870
спред:5
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: FLOAT askP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30: DOUBLE askP2=105145 bidP2=105141 Averab2=105143.0000000000 AUTOPRICE=1.0514200000
Результат правильный. Averab2 < 105143.
Результат правильный. Averab2 < 105143.
почему? ведь там Averab2=105143.0000000000
почему? ведь там Averab2=105143.0000000000
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Double vs FLOAT - непонятная ошибка MathFloor
fxsaber, 2017.02.26 08:27
Распринтовка double-числа - ни о чем. Если хочется распечатать истинное значение double, нужно посмотреть его байты.
почему? ведь там Averab2=105143.0000000000
я Вас понял. Спасибо, но это что касается распринтовки.
но и реальное значение внутри кода такое же как после распринтовки. я не однократно это проверял,
я понимаю,
что double 1 = 1.000000000000000000000000112123515;
и так далее.
:-( ладно, главное что проблема решена с float
потому что https://www.mql5.com/ru/docs/math/mathfloor
105143
после MathFloor(105143) = 105142
даже если 105143.00000000000000000000001
но я кажется понял о чем ВЫ говорите.
хотя нет
почему же тогда MathFloor(105143) = 105142 не могу понять... (если только там не 105143, а 105142,999999999999999999999999)
почему же тогда ...
почему же тогда MathFloor(105143) = 105142 не могу понять... (если только там не 105143, а 105142,999999999999999999999999)
void OnStart()
{
double Price1 = 105143;
double Price2 = Price1 - 1e-11;
Print(TOSTRING(Price1) + TOSTRING(MathFloor(Price1)) +
TOSTRING(Price2) + TOSTRING(MathFloor(Price2)) +
TOSTRING(Price1 > Price2));
}
Не надо распринтовку double-чисел воспринимать буквально. Переход на float - еще больше подводных камней.