设为首页收藏本站

 找回密码
 注册
查看: 13624|回复: 10
打印 上一主题 下一主题

缠中说禅TB版 [复制链接]

Rank: 4

精华
0
UID
189534
积分
290
帖子
4
主题
2
阅读权限
50
注册时间
2014-6-29
最后登录
2015-8-9
跳转到指定楼层
1#
发表于 2015-8-9 15:28:18 |只看该作者 |倒序浏览
本帖最后由 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
已有 1 人评分威望 收起 理由
htzq61302908 + 2

总评分: 威望 + 2   查看全部评分

Rank: 1

精华
0
UID
163723
积分
1
帖子
1
主题
0
阅读权限
10
注册时间
2013-7-16
最后登录
2018-4-11
2#
发表于 2015-8-10 09:08:19 |只看该作者
真心不错
但说好的“补上图”呢?

使用道具 举报

Rank: 1

精华
0
UID
178668
积分
2
帖子
2
主题
0
阅读权限
10
注册时间
2014-1-3
最后登录
2018-3-5
3#
发表于 2016-10-3 19:31:59 |只看该作者
继续你的后期啊大神

使用道具 举报

Rank: 1

精华
0
UID
253578
积分
48
帖子
31
主题
5
阅读权限
10
注册时间
2017-7-7
最后登录
2018-5-17
4#
发表于 2017-7-22 13:39:17 |只看该作者
大神,好样的。

使用道具 举报

Rank: 1

精华
0
UID
253578
积分
48
帖子
31
主题
5
阅读权限
10
注册时间
2017-7-7
最后登录
2018-5-17
5#
发表于 2017-7-22 14:10:00 |只看该作者



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

使用道具 举报

Rank: 1

精华
0
UID
150693
积分
2
帖子
2
主题
0
阅读权限
10
注册时间
2011-1-1
最后登录
2018-7-6
6#
发表于 2018-6-29 15:39:06 |只看该作者
为啥出现”numericseries 策略参数只能是基本类型“?

使用道具 举报

Rank: 1

精华
0
UID
256695
积分
4
帖子
2
主题
0
阅读权限
10
注册时间
2017-9-9
最后登录
2019-1-16
7#
发表于 2019-1-2 11:14:49 |只看该作者
函数里面不能使用序列类型吧

使用道具 举报

Rank: 1

精华
0
UID
256695
积分
4
帖子
2
主题
0
阅读权限
10
注册时间
2017-9-9
最后登录
2019-1-16
8#
发表于 2019-1-2 11:22:00 |只看该作者
原作者故意打乱了一些关键代码,现尝试补全后效果如图。
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 1

精华
0
UID
175953
积分
17
帖子
12
主题
3
阅读权限
10
注册时间
2013-11-19
最后登录
2019-1-11
9#
发表于 2019-1-3 13:56:48 |只看该作者
rlqh81700112 发表于 2019-1-2 11:22
原作者故意打乱了一些关键代码,现尝试补全后效果如图。

@rlqh81700112    能分享一下正确代码吗

使用道具 举报

Rank: 1

精华
0
UID
274988
积分
3
帖子
2
主题
1
阅读权限
10
注册时间
2019-1-21
最后登录
2019-5-31
10#
发表于 2019-2-14 10:52:14 |只看该作者
rlqh81700112 发表于 2019-1-2 11:22
原作者故意打乱了一些关键代码,现尝试补全后效果如图。

能分享一下代码吗

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-25 01:18

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部