Как автоматически рассчитать уровни Фибоначчи вчера/предыдущего дня в MQL4?

как рассчитать уровни Фибоначчи со вчерашнего/предыдущего дня.

Вот как далеко я сейчас:

 int shift   = iBarShift( NULL, PERIOD_D1, Time[0] ) + 1;   // yesterday
 HiPrice     = iHigh(     NULL, PERIOD_D1, shift);
 LoPrice     = iLow (     NULL, PERIOD_D1, shift);
 StartTime   = iTime(     NULL, PERIOD_D1, shift);

 if ( TimeDayOfWeek( StartTime ) == 0    /* Sunday */ )
 {                                       // Add fridays high and low
      HiPrice = MathMax( HiPrice, iHigh( NULL, PERIOD_D1, shift + 1 ) );
      LoPrice = MathMin( LoPrice, iLow(  NULL, PERIOD_D1, shift + 1 ) );
 }
 Range = HiPrice - LoPrice;

Я думаю, что теперь у меня должны быть все значения, необходимые для его расчета.

Я не уверен, как мне теперь рассчитать различные уровни:
23,6 38,2 50,0 61,8 76,4 и -23,6 -38,2 -50,0 -61,8 -76,4 -100


person Salexes    schedule 19.07.2017    source источник
comment
Вау, спасибо за -2, не знаю, почему за него проголосовали, но ладно.   -  person Salexes    schedule 19.07.2017


Ответы (2)


Все необходимые Фибо-уровни можно добавить вручную в виде массива - насколько я знаю, это самый простой способ. Затем просто выполните цикл по такому массиву, и
+значения будут ( high + array[i] / 100 * range ),
значения ниже фибы - ( low - array[i] / 100 * range ),
где
array[] = { 23.6, 38.2, .. } (достаточно только положительных значений)

person Daniel Kniaz    schedule 19.07.2017

Уровням Фибоначчи нужно направление, поэтому в приведенном выше коде вы либо захотите переключиться на использование значений открытия и закрытия предыдущего бара, либо наложите направление на максимум и минимум. Это позволит вам узнать, как рисовать расширения и откаты.

Вот функция, которую я написал ранее для этого вопроса. Эта функция предполагает, что price1 находится в более ранней точке времени, чем price2, затем вычисляет направление и уровни, возвращая структуру FibLevel.

struct FibLevel {
    double retrace38;
    double retrace50;
    double retrace61;
    double extension61;
    double extension100;
    double extension138;
    double extension161;
};

void FibLevel(double price1, double price2,FibLevel &fiblevel)
{
    double range = MathAbs(price1-price2);
    fiblevel.retrace38   =(price1<price2)?price2-range*0.382:price1+range*0.382;
    fiblevel.retrace50   =(price1<price2)?price2-range*0.500:price1+range*0.500;
    fiblevel.retrace61   =(price1<price2)?price2-range*0.618:price1+range*0.618;
    fiblevel.extension61 =(price1<price2)?price2+range*0.618:price1-range*0.618;
    fiblevel.extension100=(price1<price2)?price2+range      :price1-range;
    fiblevel.extension138=(price1<price2)?price2+range*1.382:price1-range*1.382;
    fiblevel.extension161=(price1<price2)?price2+range*1.618:price1-range*1.618;   
}
person rgunning    schedule 19.07.2017