缠中说禅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或微信请选择方便的一个联系我们就行,加好友时请简单备注下您的需求,否则无法通过。谢谢您!)
相关文章
-
没有相关内容