-1

我如何计算昨天/前一天的斐波那契水平。

这是我目前的距离:

 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

4

2 回答 2

2

所有必要的斐波那契水平都可以手动添加为数组 - 据我所知,这是最简单的方法。然后简单地遍历这样的数组,+
values 是 fibo - 以下的值, 其中(只有正值就足够了)( high + array[i] / 100 * range )
( low - array[i] / 100 * range )

array[] = { 23.6, 38.2, .. }

于 2017-07-19T13:52:37.383 回答
2

斐波那契水平线需要一个方向,因此在上面的代码中,您要么想要交换使用前一根柱的开盘价和收盘价,要么将方向强加到高点和低点。这将使您知道绘制扩展和回撤的方式。

这是我之前为这个问题编写的函数。此函数假定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;   
}
于 2017-07-19T16:14:39.317 回答