如何在 MQL4 中自动计算 yesterday/prev 天的斐波那契水平?

How to automatically calculate fibonnacci levels from yesterday/prev day in MQL4?

如何计算 yesterday/previous 天的斐波纳奇水平。

这是我目前的进度:

 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

所有必要的斐波纳奇位均可以手动添加为数组 - 据我所知,这是最简单的方法。然后简单地遍历这样的数组和
+值为 ( high + array[i] / 100 * range )
低于 fibo 的值 - ( low - array[i] / 100 * range ),
其中
array[] = { 23.6, 38.2, .. }(只有正值就够了)

Fibonacci Levels 需要一个方向,所以在您上面的代码中,您将想要交换使用前一个柱的开盘价和收盘价,或者将一个方向强加到高点和低点。这将让您知道绘制扩展和回溯的方式。

这是我之前为此编写的函数 。此函数假设 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;   
}