Скачать MetaTrader 5

деление целого числа на целое число не дает double

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ищешь единомышленников? На форуме их много!
Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:28 

формула расчета РСИ в соотношении:

double ras4et(double rsil=0)
 {
 double rsilnew=0;
 if (rsil>88)rsilnew=100+(rsil-88)*(50/12); 
 if (rsil>70 && rsil<=88)rsilnew=50+(rsil-70)*(50/18); 
 if (rsil>50 && rsil<=70)rsilnew=0+(rsil-50)*(50/20); 
 
 if (rsil>30 && rsil<=50)rsilnew=0-(rsil-30)*(50/20); 
 if (rsil>12 && rsil<=30)rsilnew=-50-(rsil-12)*(50/18); 
 if (rsil>0  && rsil<=12)rsilnew=-100-(rsil)*(50/12); 
 
 return(rsilnew);
 }

вот что выводит терминал:

2011.01.14 22:28:38 Exp-IndexIND v3 EURUSD,Daily: rsi1=58.02482798 ras4et=16.04965596
2011.01.14 22:28:36 Exp-IndexIND v3 EURUSD,Daily: rsi1=58.05909623 ras4et=16.11819246


разберем пример

РСИ = 58.0248


по нашей формуле: Х=0+(58.0248-50)*(50/20)=20.062


А у нас показывает терминал 16.0496


Решение нашлось:


 if (rsil>88)rsilnew=100+(rsil-88)*(50/12);

 if (rsil>70 && rsil<=88)rsilnew=50+(rsil-70)*(50.0/18.0);
 if (rsil>50 && rsil<=70)rsilnew=0+(rsil-50)*(50.0/20.0);

 if (rsil>30 && rsil<=50)rsilnew=0-(rsil-30)*(50.0/20.0);
 if (rsil>12 && rsil<=30)rsilnew=-50-(rsil-12)*(50.0/18.0);
 if (rsil>0  && rsil<=12)rsilnew=-100-(rsil)*(50.0/12.0);


Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:30  
Если эта ошибка исправлена - подскажите как обновить компилятор, билд получается у терминала 229 а у компилятора 227
Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:43  

хм странно в мт5 то же самое покавзывает

2011.01.14 22:47:19 234 (EURUSD,H1) 57.70=15.40000000000001

где я ошибся?
o_o
Модератор
23724
o_o 2011.01.14 22:47  

вот что выводит терминал:

а где сама строка вывода Print?

Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:49  

я проерял даже на примере:


Print ("rsi1="+"57.57"+" raset="+raset(57.57));

получил

2011.01.14 22:53:23 Exp-IndexIND v3 EURUSD,Daily: rsi1=57.57 raset=15.14000000

Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:50  

может надо перевести в стринг?


нет то же самое


2011.01.14 22:54:15 Exp-IndexIND v3 EURUSD,Daily: rsi1=57.57 raset=15.1400

o_o
Модератор
23724
o_o 2011.01.14 22:53  

Вставьте Принт в саму функцию.

и отследите где шагает

o_o
Модератор
23724
o_o 2011.01.14 22:55  

всё понял

у вас

50/18 - это получается целое число

=2


rsi1=57.57 raset=15.14000000

(57,57-50)*2 = 15,14

Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:57  

нашел где лагает:

Print ("rsi1="+"57.57"+" raset="+DoubleToStr((50/20),4));

2011.01.14 23:00:34 Exp-IndexIND v3 EURUSD,Daily: rsi1=57.57 raset=2.0000

Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:58  
он мне при делении 50 на 20 вернул = 2
Vladislav Andruschenko
92077
Vladislav Andruschenko 2011.01.14 22:59  

а почему он вернул целое число?

все отлично добавил .0 n.t. 50.0 поделил на 20.0 и все заработало

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий