在下边这个代码中,主图上i的值一直是50.While do 应该是往前回溯的吧?从最近一根K线开始,本K线i=0,然后每往前走i+1
请版主帮看看我这个代码中.循环部分i为啥一直都是50.
或者有啥办法可以 不用while do函数,可以用别的函数实现这个功能。
我看http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&ID=162309&replyID=481423&skin=1
这个页面里版主说可以不用这个函数。
QianH:=ref(h,1);
QianL:=ref(L,1);
VARIABLE:direction:=0; ////当前K线方向,初值暂定为1
VARIABLE:status:=0; //当前K线的状态,是否为顶或者底,或者两者都不是。
s_direction:ref(direction,1); //前一K线的方向,应该有0,1,-1三个选项。
s_status:=ref(status,1);
VARIABLE:czsc_high:=0;//当前K线高点,初值暂定为前K高
VARIABLE:czsc_low:=0; //当前K线低点,初值暂定为前K低
s_czsc_high:=ref(czsc_high,1);//前一K线处理完包含关系之后的高,初值暂定为前K高
s_czsc_low:=ref(czsc_low,1);//前一K线处理完包含关系之后的低,初值暂定为前K低
//分型
f1:=(s_czsc_high>0 or s_czsc_low>0); //如果前一缠K高>零,或者前一缠K高>0
f2:=((s_czsc_high>High and s_czsc_low<Low) or (High>s_czsc_high and Low<s_czsc_low));
//如果前一缠K高>本K高,同时前一缠K低<本k低,或者(本K高>前一缠K高,同时本K低<前一缠K低)
f3:=s_direction>0;//如果前一K线方向大于0
f4:=s_direction<0;//如果前一K线方向<0
f5:=s_direction>0;
f6:=High<s_czsc_high;
f7:=s_direction<0;
f8:=Low>s_czsc_low;
f9:=((High>ref(h,1) and Low<ref(L,1)) or (ref(h,1)>High and ref(L,1)<Low));
f10:=ref(H,1)>ref(H,2);
f11:=ref(L,2)>ref(L,1);
f12:=ref(H,2)<ref(H,1);
f13:=ref(H,1)>High;
f14:=ref(L,2)>ref(L,1);
f15:=ref(L,1)<Low;//当前K线状态(0.表示延续方向 1.表示K线转变方向)
///---------------第一组判断开始
If f1 and f2 and f3 then begin //如果前高大于零或者前低大于零 IF1 //存在缠中说禅K线的
direction:=1;
status:=0;
czsc_high:=Max(s_czsc_high,High);
czsc_low:=Max(s_czsc_low,Low);
end //对应IF3
//更新最高点和最低点
If f1=1 and f2=1 and f3=0 and f4=1 then begin
direction:=-1;
status:=0;
czsc_high:=Min(s_czsc_high,High);
czsc_low:=Min(s_czsc_low,Low);
end//对应IF4
///---------------第二组判断开始
If f1=1 and f2=0 and f5=1 and f6=1 then begin //如果前高大于零或者前低大于零 IF1 //不存在包含关系
direction:=-1;
status:=1;
czsc_high:=High;
czsc_low:=Low;
end
If f1=1 and f2=0 and f5=1 and f6=0 then begin //如果前高大于零或者前低大于零 IF1 //不存在包含关系
direction:=1;
status:=0;
czsc_high:=Max(s_czsc_high,High);
czsc_low:=Max(s_czsc_low,Low);
end
///---------------第三组判断开始
If f1=1 and f2=0 and f5=0 and f7=1 and f8=1 then begin
direction:=1;
status:=1;
czsc_high:=High;
czsc_low:=Low;
end
If f1=1 and f2=0 and f5=0 and f7=1 and f8=0 then begin
direction:=-1;
status:=0;
czsc_high:=min(s_czsc_high,High);
czsc_low:=min(s_czsc_Low,Low);
end
///---------------第四组判断开始 ,从这里 开始f1为0了
If f1=0 and f9=1 and f10=1 then begin
direction:=1;
status:=0;
czsc_high:=Max(QianH,High);
czsc_low:=Max(QianL,Low);
end
If f1=0 and f9=1 and f10=0 and f11=1 then begin //判断方向
direction:=-1;
status:=0;
czsc_high:=Min(QianH,High);
czsc_low:=Min(QianL,Low);
end
///---------------第五组判断开始
If f1=0 and f9=0 and f12=1 and f13=1 then begin
direction:=-1;
status:=1;
czsc_high:=High;
czsc_low:=Low;
end
If f1=0 and f9=0 and f12=1 and f13=0 then begin
direction:=1;
status:=0;
czsc_high:=Max(QianH,High);
czsc_low:=Max(QianL,Low);
end
///---------------第六组判断开始
If f1=0 and f9=0 and f12=0 and f14=1 and f15=1 then begin
direction:=1;
status:=1;
czsc_high:=High;
czsc_low:=Low;
end
If f1=0 and f9=0 and f12=0 and f14=1 and f15=0 then begin
direction:=-1;
status:=0;
czsc_high:=Min(QianH,High);
czsc_low:=Min(QianL,Low);
end
STICKLINE(czsc_low>0 and czsc_high>0,czsc_low,czsc_high,3,1),colorYellow; //输出缠中说禅K线
i:0;//i是序列值,在循环语句中,每个循环会+1.
VARIABLE:pen:=0;//当前笔
s_direction_2:=ref(direction,2);
s_pen:ref(pen,1); ;//前一笔
s_czsc_high_1:=ref(s_czsc_high,1);
s_czsc_high_i:=ref(s_czsc_high,(i+2));
s_czsc_low_i:=ref(s_czsc_low,(i+2));
s_czsc_low_2:=ref(s_czsc_low,2);
fb1:=s_status=0;
fb1_1:=i<50;
fb2:=s_pen=11 or s_pen=-11;
fb3:=s_pen=10 or s_pen=-10;
fb4:=s_direction>0;
fb5:=i<3;
fb6:=s_direction=1 and s_pen=11;
fb7:=ref(s_czsc_low,1)<ref(s_czsc_low,(i+2));
fb8:=s_direction=-1 and s_pen=-11;
fb9:=s_czsc_high_1>s_czsc_high_i;
fb10:=s_direction>0;
fb11:=s_czsc_high_1<s_czsc_low_i;
fb12:=s_czsc_low_2>s_czsc_high_i;
//第一组
If fb1 then begin //如果前一K线不是顶或者底儿
pen:=s_direction*10; //赋值pen为前K方向值乘以10.因为s_direction初值为0.所以第一根K线判定时,pen也为0,pen为当前K线所在的趋势。
//但最迟第三根K线开始s_direction就为1或者-1,所以pen的值也成为10或者-10.
i=0;
end
While i<50 do begin
If fb1=0 and (s_pen=11 or s_pen=-11) then BREAK;
i:=i+1;
end //回溯50个处理完包含关系到K线,直至符合条件中断(50可根据周期自定义)
//第二组
If fb1=0 and fb3 and fb4 then begin //如果回溯50个仍没符合条件的则延续状态
pen:=s_direction*10+s_status;
DRAWTEXT(h>0,l-4,'d1'),colorwhite;
i=0;
ll:=s_czsc_low;//原文是l,但是l是保留字,所以改成了ll
end
//第三 组
If fb1=0 and fb3=0 and fb4=0 then begin
pen:=s_direction*10-s_status;
DRAWTEXT(h>0,H+4,'g1'),colorwhite;
i=0;
u:=s_czsc_high;
end
//第四组
If fb1=0 and fb3=0 and fb5 then begin
pen:=s_direction_2*10;
end
//第五组
If fb1=0 and fb3=0 and fb5=0 and fb6 and fb7 then begin
pen:=s_direction*10+s_status;
DRAWTEXT(h>0,l-4,'d2'),colorwhite;
p:=s_czsc_low;
end
//第六组
If fb1=0 and fb3=0 and fb5=0 and fb6 and fb7=0 then begin
pen:=s_direction_2*10;
end
//第七组
If fb1=0 and fb3=0 and fb5=0 and fb6=0 and fb8 and fb9 then begin
pen:=s_direction*10-s_status;
DRAWTEXT(h>0,H+4,'g2'),colorwhite;
u:=s_czsc_high;
p:=s_czsc_high;
end
//第八组
If fb1=0 and fb3=0 and fb5=0 and fb6=0 and fb8 and fb9=0 then begin
pen:=s_direction_2*10;
end
//第九组
If fb1=0 and fb3=0 and fb5=0 and fb6=0 and fb8=0 and fb10 and fb11 then begin
pen:=s_direction*10+s_status;
DRAWTEXT(h>0,l-4,'d3'),colorwhite;
ll:=s_czsc_low;
p:=s_czsc_low;
end
//第十组
If fb1=0 and fb3=0 and fb5=0 and fb6=0 and fb8=0 and fb10 and fb11=0 then begin
pen:=s_direction_2*10;
end
//第十一组
If fb1=0 and fb3=0 and fb5=0 and fb6=0 and fb8=0 and fb10=0 and fb12 then begin
pen:=s_direction*10-s_status;
DRAWTEXT(h>0,H+4,'g3'),colorwhite;
u:=s_czsc_high;
p:=s_czsc_high;
end
//第十二组
If fb1=0 and fb3=0 and fb5=0 and fb6=0 and fb8=0 and fb10=0 and fb12=0 then begin
pen:=s_direction_2*10;
end
[此贴子已经被作者于2019/4/28 6:59:32编辑过]