代码之家  ›  专栏  ›  技术社区  ›  Salexes

如何自动计算MQL4中昨天/前一天的fibonnacci水平?

  •  -1
  • Salexes  · 技术社区  · 7 年前

    这是我目前的状态:

     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;
    

    我现在不确定如何计算不同的水平:

    2 回复  |  直到 7 年前
        1
  •  2
  •   user3666197    7 年前

    所有必要的Fibo级别都可以手动添加为一个数组-据我所知,这是最简单的方法。然后简单地在这样的数组上循环
    +值为 ( high + array[i] / 100 * range )
    fibo以下的值- ( low - array[i] / 100 * range )

    array[] = { 23.6, 38.2, .. } (只有正值才足够)

        2
  •  2
  •   rgunning    7 年前

    斐波那契层次需要一个方向,因此在上面的代码中,您要么希望使用前一条的开和关值进行交换,要么将方向强加给高和低。这将让您知道以何种方式绘制延伸和回溯。

    question 。此函数假设 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;   
    }