1分钟图形下计算30分钟ATR的程序

2014-12-17 11:32
程序化
  1. 新建用户函数TransMinsData,返回值为数值型,代码如下:
Params

        NumericSeries Price(1);

        Numeric nMinSet(5);

        Numeric MinsAgo(2);

Vars

        NumericSeries barCnt;

        NumericSeries MinData;

        Numeric i;

        Numeric j;

        Numeric nIndex(0);

Begin

        If(IntPart(Minute%nMinSet)==0)

        {

                barCnt = 1;

        }Else

        {

                barCnt = barCnt[1] + 1;

        }

        MinData = Price;

                

        If(MinsAgo == 0)

        {

                return MinData;

        }Else

        {

                For i = 1 To MinsAgo

                {

                        If( i == 1)

                        {        

                                j = 0;

                        }Else

                        {

                                j = j + BarCnt[j];                                

                        }

                        If (j > CurrentBar ) Return InvalidNumeric;

                        nIndex = nIndex + BarCnt[j];

                }

                Return MinData[nIndex];

        }

End
  1. 新建技术指标,命名为My30MinsATR,代码如下:
Params

        Numeric Length(10);

Vars

        NumericSeries MyClose;

        NumericSeries MyHigh;

        NumericSeries MyLow;

        Numeric AvgTrueHigh;

        Numeric AvgTrueLow;

        Numeric SumValue(0);

        Numeric Value1;

        Numeric i;

Begin

        MyClose = DataConvert(Close,"min",30,"Close");

        MyHigh = DataConvert(High,"min",30,"High");

    MyLow = DataConvert(Low,"min",30,"Low");



        For i = Length-1 DownTo 0

        {

                Value1 = Max(TransMinsData(MyClose,30,i+1),TransMinData(MyHigh,30,i));

                SumValue = SumValue + Value1;

        }

        AvgTrueHigh = SumValue/Length;

        

        SumValue = 0;

        For i = Length-1 DownTo 0

        {

                Value1 = Min(TransMinsData(MyClose,30,i+1),TransMinData(MyLow,30,i));                

                SumValue = SumValue + Value1;

        }

        AvgTrueLow = SumValue/Length;



        PlotNumeric("My30MinATR",AvgTrueHigh-AvgTrueLow);

End
  1. 在使用时需根据参数设置合适数量的分钟线,另外,该函数因为用到了循环语句,如果周期参数设置太大,计算时会比较慢。
    程序化交易, TradeBlazer, 跨周期,

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