Как получить значения уровней фибоначи ? - страница 2

 
Rafting:

 Проверку делал через алерт. вытягивал с начало sto_proc = -fibo_level_0 потом sto_proc = fibo_level_100

 (результат был правильным) ну и затем sto_proc = fibo_level_100 - fibo_level_0  результат выше (


В принтах используй перевод в строку до указанной точности

Alert("Фибо 23=", DoubleToString(fibo_level_23, _Digits), "    sto_proc=", DoubleToString(sto_proc, _Digits) ............ и  далее
 

 

Видимо какая то проблема с получаемыми значениями цен. Как можно поставить округление до n знака после запятой ?

 
Предыдущий пост не увидел )
 
Вопрос созрел, т.е ошибка происходит при команде Alert ? Или ошибка при самом расчете ? И нужно в самих значениях прописать DoubleToString и _Digits ?
 
Rafting:
Вопрос созрел, т.е ошибка происходит при команде Alert ? Или ошибка при самом расчете ? И нужно в самих значениях прописать DoubleToString и _Digits ?

В самих расчётах надо использовать NormalizeDouble(), а в принтах, комментах и алертах DoubleToString()

Но злоупотреблять нормализацией не надо. Чаще всего она не нужна.

Например писать открытие ордера по NormalizeDouble(Bid) абсолютная бессмыслица. Цена Bid приходит с сервера уже нормализованная. Другое дело открывая отложенный ордер по цене Bid+step*_Point ... тут при умножении и сложении могут оказаться лишние знаки после запятой.


 
void init()
  {
//---
   distSL = NormalizeDouble(SL*Point, Digits);
   distTP = NormalizeDouble(TP*Point, Digits);
   if(Digits == 3 || Digits == 5)
   {
     slippage *= 10;
   }
//---
   
  }
У меня в init стоит выше указанный текст. Если я туда вставлю нормализацию для значений max_fractal и min_fractal - это решит проблему ?
 
Rafting:
У меня в init стоит выше указанный текст. Если я туда вставлю нормализацию для значений max_fractal и min_fractal - это решит проблему ?
Ну ты хоть чуток-то своей головой подумай... Нельзя-же весь код написать по подсказкам.
 

Еще раз приветствую !

Прошу объяснить где я допускаю ошибку при математическом вычислении уровня фибо.

Советник вычисляет правильно НО, если я считаю в ручную получаются другие цифры:

          fibo_level_0 = max_fractal;
          fibo_level_100 = min_fractal;
          sto_proc = NormalizeDouble((fibo_level_100 - fibo_level_0), Digits);
          fibo_level_23 = NormalizeDouble((fibo_level_0 + (sto_proc*0.236)), Digits);
          fibo_level_61 = fibo_level_0 + (sto_proc*0.618);
          fibo_level_161 = fibo_level_0 + (sto_proc*1.618); 
          Alert("Ниcходящий тренд","     sto_proc=",sto_proc,"     fibo_level_0=",fibo_level_0,"    fibo_level_100=",fibo_level_100, "    fibo_level_23=",fibo_level_23);

 Alert выводит правильные значения: Ниcходящий тренд     sto_proc=-0.0107     fibo_level_0=0.7565    fibo_level_100=0.7458    fibo_level_23=0.754

Сверял значения с графиком, все правильно. Но начинаю считать руками получаются другие значения:

 fibo_level_23 = NormalizeDouble((fibo_level_0 + (sto_proc*0.236)), Digits); подставляю значения fibo_level_23 = (0,7565 + (0,0107*0.236) = 0,7565 + 0,0026 = 0,7591

Как получается значение  fibo_level_23=0.754 ? Что я ни так считаю ?

 

https://www.mql5.com/en/blogs/post/662291

Note5 

 
Rafting:

Еще раз приветствую !

Прошу объяснить где я допускаю ошибку при математическом вычислении уровня фибо.

Советник вычисляет правильно НО, если я считаю в ручную получаются другие цифры:

 Alert выводит правильные значения: Ниcходящий тренд     sto_proc=-0.0107     fibo_level_0=0.7565    fibo_level_100=0.7458    fibo_level_23=0.754

Сверял значения с графиком, все правильно. Но начинаю считать руками получаются другие значения:

 fibo_level_23 = NormalizeDouble((fibo_level_0 + (sto_proc*0.236)), Digits); подставляю значения fibo_level_23 = (0,7565 + (0,0107*0.236) = 0,7565 + 0,0026 = 0,7591

Как получается значение  fibo_level_23=0.754 ? Что я ни так считаю ?

Сложение при ручном счёте вместо вычитания, как в программе, вот и всё.
Причина обращения: