您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

请老师帮忙把文华跨周期引用模型改为TB公式 [开拓者 TB]

  • 咨询内容: nopain老师,我之前一直使用文华的年费服务,考虑到TB在历史回测方面的优势,决定转向TB。我想把文华的跨周期引用模型转换成TB模型(1分钟周期K线图中引用30分钟周期的DMI指标),但由于刚刚学习TB语言,对TB不了解,请老师帮忙修改,谢谢。
    1、文华模型
    (1)引用模型
    TR:=SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),14);
    HD:=HIGH-REF(HIGH,1);
    LD:=REF(LOW,1)-LOW;
    DMP:=SUM(IFELSE(HD>0&&HD>LD,HD,0),14);
    DMM:=SUM(IFELSE(LD>0&&LD>HD,LD,0),14);
    PDI1:=DMP*100/TR;
    MDI1:=DMM*100/TR;
    ADX1:=MA(ABS(MDI1-PDI1)/(MDI1+PDI1)*100,6);
    (2)主模型
    #IMPORT[,MIN30,MYDHL33] AS VAR
    PDI:=VAR.PDI1;
    MDI:=VAR.MDI1;
    ADX:=VAR.ADX1;
    ADX>25&&ADX>REF(ADX,1)&&NOT(R3)&&DI>MDI&&DI>REF(PDI,1)&&MDI<REF(MDI,1),BK;//CCI上穿100,做多
    .....
    AUTOFILTER;

    2、通过学习TB帖子,
    http://bbs.tb18.net/forum.php?mo ... ge%3D1&tid=1996,
    我编写了一个TB函数和一个TB公式,具体如下:
    (1)TransMinsDatab 函数
    //------------------------------------------------------------------------
    // 简称: TransMinsDatab
    // 名称: TransMinsDatab
    // 类别: 用户函数
    // 类型: 用户函数
    // 输出: 数值型
    //------------------------------------------------------------------------
    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

    (2)根据文华代码直接编译过来的TB公式(名称为ADX66)
    //------------------------------------------------------------------------
    // 简称: ADX66
    // 名称: ADX66
    // 类别: 公式应用
    // 类型: 用户应用
    //------------------------------------------------------------------------
    Params
    Numeric Length(14);
    Numeric ADXLength(6);
    Numeric Lots(1);
    Vars
    Numeric MyOpen;
    NumericSeries MyHigh;
    NumericSeries MyLow;
    NumericSeries MyClose;
    Numeric MyOpen1;
    NumericSeries MyHigh1;
    NumericSeries MyLow1;
    NumericSeries MyClose1;
    Numeric TR;
    Numeric HD;
    Numeric LD;
    Numeric DMP;
    Numeric DMM;
    NumericSeries PDI;
    NumericSeries MDI;
    Numeric i;
    NumericSeries CY;
    Numeric Value1;
    Numeric SumValue(0);
    NumericSeries ADX;
    Begin
    MyOpen1=DataConvert(Open,"min",30,"Open");
    MyHigh1=DataConvert(High,"min",30,"High");
    MyLow1=DataConvert(Low,"min",30,"Low");
    MyClose1=DataConvert(Close,"min",30,"Close");
    //ADX
    TR=Summation(MAX(MAX((MyHigh1-MyLow1),ABS(MyHigh1-MyClose1[1])),ABS(MyLow1-MyClose1[1])),Length);
    HD=MyHigh1-MyHigh1[1];
    LD=MyLow1[1]-MyLow1;
    DMP=Summation(IIF(HD>0&&HD>LD,HD,0),Length);
    DMM=Summation(IIF(LD>0&&LD>HD,LD,0),Length);
    PDI=DMP*100/TR;
    MDI=DMM*100/TR;
    CY=(ABS(MDI-PDI)/(MDI+PDI))*100;
    For i=ADXLength-1 DownTo 0
    {
    Value1=TransMinsDatab(CY,30,i);
    SumValue=SumValue+Value1;
    }
    ADX=SumValue/ADXLength;
    PlotNumeric("DI",PDI);
    PlotNumeric("MDI",MDI);
    PlotNumeric("ADX",ADX);
    If(ADX>25&&ADX>ADX[1]&&PDI>MDI&&PDI>PDI[1]&&MDI<MDI[1])
    {
    Buy(Lots,OPEN);
    }  
    End


    在超级图标插入ADX公式,好多地方显示ADX=-1.#J,无法显示正常的ADX值;PDI和MDI也显示异常(显示为零)。
    请TB老师帮忙修改,谢谢。其中,值得注意是 ADX、PDI和MDI需要定义成有序列的回溯参数,才能用于回溯。
    此外,我也注意到TB论坛里有关于DMI的参考模型
    http://bbs.tb18.net/forum.php?mo ... 7&highlight=DMI ,
    由于DirMovement函数的设置返回值为布尔型,我不知道怎么用于跨周期引用的公式。如果老师无法修改我直接从文华编译的TB公式,那就请帮忙以TB帖子的DMI参考模型为基础,直接改为我想要的跨周期引用公式。再次表示感谢。

     

  • TB技术人员: 不好意思,刚才文华模型中主模型中“ADX>25&&ADX>REF(ADX,1)&&NOT(R3)&& PDI>MDI&& PDI>REF(PDI,1)&& MDI<REF(MDI,1)BK;//CCI上穿100,做多” 在网页中显示有问题。

     

  • TB客服: 不好意思,刚才文华模型中主模型中“ADX>25&&ADX>REF(ADX,1)&&NOT(R3)&& PDI>MDI&& PDI>REF(PDI,1)&& MDI<REF(MDI,1),BK;” 在网页中显示有问题,
    应该为“ADX>25&&ADX>REF(ADX,1)&&NOT(R3)&& PDI>MDI&& PDI>REF(PDI,1)&& MDI<REF(MDI,1),BK;”。同时,ADX66公式中的”PlotNumeric("PDI",PDI);“在网页中显示出问题,应该为”PlotNumeric("PDI",PDI);“。

     

  • 网友回复: 顶起,请TB老师帮忙解答,谢谢!

     

  • 网友回复: 再次请TB老师抽空指导修改,非常感谢。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容