跨周期求MACD值的问题

2014-12-17 11:22
程序化

日线中调用周线MACD数据的代码。

  1. 新建用户函数WeekXAverage,返回值为数值型,代码如下:
//------------------------------------------------------------------------

// 简称: WeekXAverage

// 名称: 日线转化周线的指数平均

// 类别: 用户函数

// 类型: 用户函数

// 输出: 数值型

//------------------------------------------------------------------------



Params

        NumericSeries Price(10);

        Numeric Length(10);

Vars

        NumericSeries WeeksNo;

        NumericSeries WeekDays;

        BoolSeries FirstWeek(True);

        Numeric sFcactor;

        NumericSeries XAvgValue;

Begin

        If(CurrentBar == 0)

        {

                FirstWeek = True;

        }Else

        {

                FirstWeek = FirstWeek[1];

                If(FirstWeek &&  Weekday==1)

                {

                        FirstWeek = False;

                }

        }

        

        WeeksNo = IntPart(DateDiff(19700105,Date)/7);

        If(WeeksNo!=WeeksNo[1])

        {

                WeekDays = 1;

        }Else

        {

                WeekDays = WeekDays[1] + 1;

        }



        sFcactor = 2 / ( Length + 1 );

        if (FirstWeek)

        {

                XAvgValue = Price;

        }else

        {

                XAvgValue = XAvgValue[WeekDays] + sFcactor * ( Price - XAvgValue[WeekDays] ) ;

        }        

    Return XAvgValue;

End



//------------------------------------------------------------------------

// 编译版本        GS2004.06.12

// 用户版本        2008/04/08 20:23

// 版权所有        nopain

// 更改声明        TradeBlazer Software保留对TradeBlazer平台

//                        每一版本的TrabeBlazer公式修改和重写的权利

//------------------------------------------------------------------------
  1. 新建技术指标WeekMACD,代码如下:
//------------------------------------------------------------------------

// 简称: WeekMACD

// 名称: 周线MACD

// 类别: 技术指标

// 类型: 其它类

// 输出:

//------------------------------------------------------------------------



Params

        Numeric FastLength(12);

        Numeric SlowLength(26);

        Numeric MACDLength(9);

Vars

        NumericSeries MACDValue; 

        Numeric AvgMACD;

        Numeric MACDDiff;

Begin

        MACDValue = WeekXAverage( Close, FastLength ) - WeekXAverage( Close, SlowLength ) ;        

        AvgMACD = WeekXAverage(MACDValue,MACDLength);

        MACDDiff = MACDValue - AvgMACD;

        PlotNumeric("MACD",MACDValue);

        PlotNumeric("MACDAvg",AvgMACD); 

        If (MACDDiff >= 0)        

                PlotNumeric("MACDDiff",MACDDiff,Red); 

        Else

                PlotNumeric("MACDDiff",MACDDiff,Green); 

        PlotNumeric("零线",0);          

End



//------------------------------------------------------------------------

// 编译版本        GS2004.06.12

// 用户版本        2008/04/08 20:20

// 版权所有        nopain

// 更改声明        TradeBlazer Software保留对TradeBlazer平台

//                        每一版本的TrabeBlazer公式修改和重写的权利

//------------------------------------------------------------------------
  1. 您可以建一个周线图,插入标准的MACD指标,然后新建一个日线图,插入WeekMACD指标。

为了让两个图的数据完全相等,周线的数据应该要大于120,日线的数据应该要大于(120*5=600)。否则会出现精度误差,这是因为指数平均的最大回溯周期大概是在120左右
程序化交易, TradeBlazer, 跨周期

点击切换 到互动模式(当前为阅读模式)