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

 

Собственно вопрос в названии темы. Требуется сначало его выводить объектом на график или можно сразу рассчитать  значения ?  

 
Можно посчитать. От уровня 0 до уровня 100 это 100%. Соответственно от уровня 0 + 50% этого расстояния и аналогично все остальные уровни.
 

Мысль понял, не могу пока сообразить как написать.

Допустим;

level_0  = 0,7147

level_100 = 0,7502 

Тогда 100proc = level_100 - level_0 (0.0355) 

Тогда 23,6proc = (100proc*23.6)/100 

и.т.д ? 

 
Rafting:

Мысль понял, не могу пока сообразить как написать.

Допустим;

level_0  = 0,7147

level_100 = 0,7502 

Тогда 100proc = level_100 - level_0 (0.0355) 

Тогда 23,6proc = (100proc*23.6)/100 

и.т.д ? 

Тогда:

Уровень 23,6 будет 0.7147 + 0.0355*0.236

Уровень 161.8 будет 0.7147 + 0.0355*1.618

 
Для восходящего графика нулевой уровень будет с низу а сотый в верху, для нисходящего наоборот. Возникает вопрос как лучше и правильней описать ? Использовать отрицательные величины ?
 
Rafting:
Для восходящего графика нулевой уровень будет с низу а сотый в верху, для нисходящего наоборот. Возникает вопрос как лучше и правильней описать ? Использовать отрицательные величины ?

А что мешает?

Переверни свои тестовые значения

Допустим;

level_0 = 0,7502

level_100  = 0,7147

Тогда 100proc = level_100 - level_0 (-0.0355) 

и уровень 161.8 будет 0.7502 + (-0.0355*1.618)
 
       if(time_fractal_min < time_fractal_max)
       {
          fibo_level_0 = min_fractal;
          fibo_level_100 = max_fractal;        
       }
       if(time_fractal_min > time_fractal_max)
       {
          fibo_level_0 = max_fractal;
          fibo_level_100 = min_fractal;  
       }
       sto_proc = fibo_level_100-fibo_level_0;
       fibo_level_23 = fibo_level_0 + (sto_proc*0.236);
       fibo_level_38 = fibo_level_0 + (sto_proc*0.382);
       fibo_level_50 = fibo_level_0 + (sto_proc*0.5);
       fibo_level_61 = fibo_level_0 + (sto_proc*0.618);
       fibo_level_161 = fibo_level_0 + (sto_proc*1.618);
       Alert("Фибо 23=",fibo_level_23, "    sto_proc=",sto_proc, "   max_fractal=",max_fractal,"   min_fractal=",min_fractal, "   time_fractal_max=",time_fractal_max,"   time_fractal_min=",time_fractal_min);

Не могу понять в чем дело. Делаю проверку, смотрю какие данные вытаскивает.  Получается что значения fibo_level_0 и fibo_level_100 вытаскивает правильно а вот расчет sto_proc делает не верно . В чем дело ?

 

 

А как в таком варианте учесть восходящий и нисходящий тренд ? Прописывать для одного тренда +(fibo_level_0*0.236) а для другого -(fibo_level_0*0.236) ? Или как то по другому можно ? Интересуют варианты где меньше кода.(почему кстати расчет sto_proc неверный ?)

 
Rafting:

А как в таком варианте учесть восходящий и нисходящий тренд ? Прописывать для одного тренда +(fibo_level_0*0.236) а для другого -(fibo_level_0*0.236) ? Или как то по другому можно ? Интересуют варианты где меньше кода.(почему кстати расчет sto_proc неверный ?)

Это я ошибся, позор на мои седины, извиняюсь.

Приведите выписку с журнала, строки алерта.

А может там ошибка где-то выше по коду вообще. 

 
Rafting:

Не могу понять в чем дело. Делаю проверку, смотрю какие данные вытаскивает.  Получается что значения fibo_level_0 и fibo_level_100 вытаскивает правильно а вот расчет sto_proc делает не верно . В чем дело ?

 

А как проверял что правильно? Не может-же быть чтобы калькулятор ошибся.
 
void start()
  {
   if(New_Time==Time[0]) return;  // Определяем новый бар
   {
     New_Time=Time[0];
//--- //Определяем минимальный и максимальный фракталы для FIbo чисел
      double fractal_d = 0.0, fractal_u = 0.0, min_fractal = 0.0, max_fractal = 0.0, new_min_fractal, new_max_fractal;
      for(int i=3; i<=bars; i++)
      {
        fractal_d = iFractals(NULL, 0, MODE_LOWER, i);
        if(fractal_d > 0)
        {
         if(min_fractal == 0.0)
         {
          min_fractal = iLow(NULL, 0, i); 
          time_fractal_min = iTime(NULL, 0, i);  
         }
         if(min_fractal > 0)
         {
          new_min_fractal = iLow(NULL, 0, i);
          new_time_fractal_min = iTime(NULL, 0, i);
          if(new_min_fractal < min_fractal)
          {
           min_fractal = new_min_fractal; 
           time_fractal_min = new_time_fractal_min;
          }
         }
        }
       }
       for(int i=3; i<=bars; i++) 
       {
        fractal_u = iFractals(NULL, 0, MODE_UPPER, i);
        if(fractal_u > 0)
        {
         if(max_fractal == 0.0)
         {
          max_fractal = iHigh(NULL, 0, i);
          time_fractal_max = iTime(NULL, 0, i);
         }
         if(max_fractal > 0)
         {
          new_max_fractal = iHigh(NULL, 0, i);
          new_time_fractal_max = iTime(NULL, 0, i);
          if(new_max_fractal > max_fractal)
          {
           max_fractal = new_max_fractal;
           time_fractal_max = new_time_fractal_max;      
          }
         }
        }
       }
       if(time_fractal_min < time_fractal_max)
       {
          fibo_level_0 = min_fractal;
          fibo_level_100 = max_fractal;        
       }
       if(time_fractal_min > time_fractal_max)
       {
          fibo_level_0 = max_fractal;
          fibo_level_100 = min_fractal;  
       }
       sto_proc = fibo_level_100 - fibo_level_0;
       fibo_level_23 = fibo_level_0 + (sto_proc*0.236);
       fibo_level_38 = fibo_level_0 + (sto_proc*0.382);
       fibo_level_50 = fibo_level_0 + (sto_proc*0.5);
       fibo_level_61 = fibo_level_0 + (sto_proc*0.618);
       fibo_level_161 = fibo_level_0 + (sto_proc*1.618);
       Alert("Фибо 23=",fibo_level_23, "    sto_proc=",sto_proc, "   max_fractal=",max_fractal,"   min_fractal=",min_fractal, "   time_fractal_max=",time_fractal_max,"   time_fractal_min=",time_fractal_min);
       
  } 
 }

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

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