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

缠中说禅TB版 [开拓者 TB]

  • 咨询内容: 本帖最后由 binzhiyao 于 2015-8-9 15:28 编辑

    本人最近在学习 缠论 ,在学习的过程中尝试量化.
    以下是源码, 希望熟悉缠论的朋友可以指教.
    本人QQ:110951948 请多多指教

    网络状况好的时候再补上图

    -------------------------K线(显示的时候需要设置成柱状)-------------------------
    Params
            NumericSeries s_czsc_high;
            NumericSeries s_czsc_low;
            NumericSeries s_direction;
            NumericSeries s_status;

            //包含
            NumericRef czsc_high;                //当前K线高点
            NumericRef czsc_low;                //当前K线低点
            //分型
            NumericRef direction;                //当前K线方向
            NumericRef status;                        //当前K线状态(0.表示延续方向 1.表示K线转变方向)
           
    Begin
            If(s_czsc_high>0 or s_czsc_low>0){                                                                                                                                        //存在缠中说禅K线的
                    If((s_czsc_high>High and s_czsc_low<Low) or (High>s_czsc_high and Low<s_czsc_low)){                                //是否存在包含关系
                            If(s_direction>0){                                                                                                                                                        //依据上一根K线方向确定当前K线方向
                                    direction=1; status=0;
                                    czsc_high=Max(s_czsc_high,High); czsc_low=Max(s_czsc_low,Low);                                                        //更新最高点和最低点
                            }
                            Else If(s_direction<0){
                                    direction=-1; status=0;
                                    czsc_high=Min(s_czsc_high,High); czsc_low=Min(s_czsc_low,Low);
                            }
                    }
                    Else{                                                                                                                                                                                        //不存在包含关系
                            If(s_direction>0){                                                                                                                                                         //依据上一根K线方向确定当前K线方向
                                    If(High<s_czsc_high){                                                                                                                                        //是否发生转向
                                            direction=-1; status=1;
                                            czsc_high=High; czsc_low=Low;
                                    }Else{
                                            direction=1; status=0;
                                            czsc_high=Max(s_czsc_high,High); czsc_low=Max(s_czsc_low,Low);
                                    }
                            }
                            Else If(s_direction<0){
                                    If(Low>s_czsc_low){
                                            direction=1;status=1;
                                            czsc_high=High; czsc_low=Low;
                                    }Else{
                                            direction=-1; status=0;
                                            czsc_high=Min(s_czsc_high,High); czsc_low=Min(s_czsc_low,Low);
                                    }
                            }
                    }       
            }
            Else{
                    If((High>High[1] and Low<Low[1]) or (High[1]>High and Low[1]<Low)){                                                                //当不存在缠中说禅K线时用K线高低点作为依据判断存在包含关系
                            If(High[1]>High[2]){                                                                                                                                                //判断方向
                                    direction=1; status=0;
                                    czsc_high=Max(High[1],High); czsc_low=Max(Low[1],Low);
                            }
                            Else If(Low[1]<Low[2]){
                                    direction=-1; status=0;
                                    czsc_high=Min(High[1],High); czsc_low=Min(Low[1],Low);
                            }
                    }Else{
                            If(High[2]<High[1]){
                                    If(High[1]>High){
                                            direction=-1; status=1;
                                            czsc_high=High; czsc_low=Low;
                                    }Else{
                                            direction=1; status=0;
                                            czsc_high=Max(High[1],High); czsc_low=Max(Low[1],Low);
                                    }
                            }
                            Else If(Low[2]>Low[1]){
                                    If(Low[1]<Low){
                                            direction=1; status=1;
                                            czsc_high=High; czsc_low=Low;
                                    }Else{
                                            direction=-1; status=0;
                                            czsc_high=Min(High[1],High); czsc_low=Min(Low[1],Low);
                                    }
                            }
                    }
            }

            If(czsc_low>0 or czsc_high>0){
                    PlotNumeric("czsc",czsc_low,czsc_high);                                                                                                                        //输出缠中说禅K线
                    Commentary("("+Text(direction)+","+Text(status)+")");
            }       
            Return True;
    End


    -------------------------笔-------------------------
    Params
            NumericSeries s_czsc_high;
            NumericSeries s_czsc_low;
            NumericSeries s_direction;
            NumericSeries s_status;
            NumericSeries s_pen;                                                                                                //11 表示底        10 表示上行        -11表示顶        -10表示下行
           
            NumericRef pen;
    Vars
            Numeric i(0);
    Begin
            If(s_status==0){                                                                                                        //如果还没开始则延续状态
                    pen = s_direction*10;
            }
            Else{
                    While(i<50){If(s_pen==11 or s_pen==-11){break;}i=i+1;}        //回溯50个缠中说禅笔,直至符合条件中断(50可根据周期自定义)
                    If(s_pen==10 or s_pen==-10){                                                                //如果回溯50个仍没符合条件的则延续状态
                            If(s_direction>0){
                                    pen = s_direction*10+s_status;
                                    PlotString("l","|",s_czsc_low);
                            }
                            else{
                                    pen = s_direction*10-s_status;
                                    PlotString("u","|",s_czsc_high);
                            }
                    }
                    Else{
                            If(i<3){                                                                                                        //i为相隔的bar数,相隔的Kbar数不符合笔的要求则维持原来状态
                                    pen = s_direction[1]*10;       
                            }
                            Else{
                                    If(s_direction==1 and s_pen==11){                                        //同方向转变状态的,则比较哪个更低或更高,留下更低的或更高的或保持状态
                                            If(s_czsc_low[1]<s_czsc_low[i+2]){
                                                    pen = s_direction*10+s_status;
                                                    PlotString("l","|",s_czsc_low);
                                                    Unplot("p",i+1);
                                                    PlotNumeric("p",s_czsc_low);
                                            }
                                            Else{
                                                    pen = s_direction[1]*10;
                                            }
                                    }
                                    Else If(s_direction==-1 and s_pen==-11){
                                            If(s_czsc_high[1]>s_czsc_high[i+2]){
                                                    pen = s_direction*10-s_status;
                                                    PlotString("u","|",s_czsc_high);
                                                    Unplot("p",i+1);
                                                    PlotNumeric("p",s_czsc_high);
                                            }
                                            Else{
                                                    pen = s_direction[1]*10;
                                            }
                                    }
                                    Else{                                                                                                        //不同方向的则需要依据当前方向判断前后两个分型之间有没有重叠,有重叠则无效,无重叠则确认为笔
                                            If(s_direction>0){
                                                    If(s_czsc_high[1]<s_czsc_low[i+2]){
                                                            pen = s_direction*10+s_status;
                                                            PlotString("l","|",s_czsc_low);
                                                            PlotNumeric("p",s_czsc_low);
                                                    }else{
                                                            pen = s_direction[1]*10;
                                                    }                                       
                                            }
                                            else{
                                                    If(s_czsc_low[1]>s_czsc_high[i+2]){
                                                            pen = s_direction*10-s_status;
                                                            PlotString("u","|",s_czsc_high);
                                                            PlotNumeric("p",s_czsc_high);
                                                    }else{
                                                            pen = s_direction[1]*10;
                                                    }                                       
                                            }
                                    }
                            }
                    }
            }
            Return True;
    End



    -------------------------段-------------------------

    Params
            NumericSeries s_czsc_high;
            NumericSeries s_czsc_low;
            NumericSeries s_pen;
            NumericSeries s_duan;                                                                                        //1表示段点        0表示非段点
            NumericRef duan;
    Vars
            Numeric i(0);                                                                                                        //当前回溯的bar数
            Numeric pre_i(0);                                                                                                //上次回溯的bar数
            Numeric last_pen(0);                                                                                        //最后一笔的最后一个分型的最高点或最低点
    Begin
            duan=0;                                                                                                                        //初始化段
            If(s_pen==11 or s_pen==-11){                                                                        //当笔的时候则开始往前回溯是否形成段
                    While(i<60){                                                                                                //第一次回溯(60可依据周期调整)
                            If(s_pen==s_pen){                                                                        //如果同向则清除上一次的段
                                    Unplot("d",i);
                            }
                            Else If(s_pen==-1*s_pen){                                                        //如果不同向则进入第二轮回溯
                                    pre_i=i;break;
                            }
                            i=i+1;
                    }
                    If(s_pen==-1*s_pen and s_duan[i-1]==0){                                        //方向相反且不是段点,则进入第二轮回溯
                            While(i<60+pre_i){
                                    If(s_pen==s_pen){pre_i=i;break;}i=i+1;
                            }
                            If(s_pen==s_pen and s_duan[i-1]==0){                                        //方向相同且不是段点,则进入第三轮回溯
                                    While(i<60+pre_i){
                                            If(s_pen==-1*s_pen){pre_i=i;break;}i=i+1;
                                    }
                                    If(s_pen==-1*s_pen){                                                                //段的头尾分型的方向是相反的
                                            If(s_pen==11){                                                                //如果尾部是底,则头部是顶,那么顶部最低点大于等于底部最低点则为有效段
                                                    If(s_czsc_low>=s_czsc_low){duan=1;}
                                            }
                                            Else If(s_pen==-11){                                                        //如果尾部是顶,则头部是底,那么顶部最高点小于等于底部最高点则为有效段
                                                    If(s_czsc_high<=s_czsc_high){duan=1;}
                                            }
                                    }
                            }
                    }
            }
            If(duan>0){                                                                                                                //输出段点
                    If(s_pen==11){PlotNumeric("d",s_czsc_low);}Else{PlotNumeric("d",s_czsc_high);}
            }
            Return True;
    End

    -------------------------测试-------------------------

    Vars
            NumericSeries s_czsc_high;
            NumericSeries s_czsc_low;
            NumericSeries s_direction;
            NumericSeries s_status;
           
            NumericSeries s_pen_value;

            //包含
            Numeric czsc_high;
            Numeric czsc_low;
            Numeric direction;
            Numeric status;
           
            //分型和笔
            NumericSeries s_pen;
            Numeric pen;
            //段
            NumericSeries s_duan;
            Numeric duan;

    Begin
            czsc_k(s_czsc_high,s_czsc_low,s_direction,s_status,czsc_high,czsc_low,direction,status);
            s_czsc_high=czsc_high; s_czsc_low=czsc_low; s_direction=direction; s_status=status;
           
            czsc_pen(s_czsc_high,s_czsc_low,s_direction,s_status,s_pen,pen);
            s_pen=pen;

            czsc_duan(s_czsc_high,s_czsc_low,s_pen,s_duan,duan);
            s_duan=duan;
           
            Commentary("czsc_high2:"+Text(czsc_high));
            Commentary("czsc_low2:"+Text(czsc_low));
    End

     

     来源:CXH99.COM

  • TB技术人员: 真心不错
    但说好的“补上图”呢?

     

  • TB客服: 继续你的后期啊大神

     

  • 网友回复: 大神,好样的。

     

  • 网友回复:



  • 这就是图片 附件: 你需要登录才可以下载或查看附件。没有帐号?注册

 

有思路,想编写各种指标公式,交易模型,选股公式,还原公式的朋友

可联系技术人员 QQ: 262069696  点击在线交流或微信号:cxh99cxh99  进行 有偿收费 编写!

怎么收费,代编流程等详情请点击阅读!

(注:由于人数限制,QQ或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)


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

相关文章

    没有相关内容