等级: 标准版
- 注册:
- 2023-2-16
- 曾用名:
|
楼主 |
发表于 2025-1-2 14:15
|
显示全部楼层
那有这么简单啊。我文字不是也描述了,下面画图的你取消看下,我这个里面还有没处理到的地方,好像是那个突破和包含没处理好,就是前面是理想状态,前2个K没包含关系进行处理的,处理完了后面要取处理完的结果再次处理一次,才能完成整个处理逻辑的
// 定义变量
VARIABLE: HHV_PRICE:=0, LLV_PRICE:=0,CONTAINED:=0, CONTAINED1:=0;
xl:=BARPOS;
//定义两个K之间高低点的关系
temp1:=MAX(HIGH, REF(h, 1));//高高
temp2:=MAX(LOW, REF(l, 1)); //高低
temp3:=Min(HIGH, REF(h, 1));//低高
temp4:=Min(LOW, REF(l, 1)); //低低
// 判断前一个K线是否被包含在当前K线
IS_PREV_CONTAINED:=h[xl-1] <= h AND l[xl-1] >= l;
// 判断当前K线是否被包含在前一个K线
IS_CURR_CONTAINED:=HIGH <= h[xl-1] AND LOW >= l[xl-1];
is_bh:IS_PREV_CONTAINED or IS_CURR_CONTAINED;
//往前判断包含K之前的K是否是包含K,如果是包含K就继续往前取
非包含1:=h[xl-2]>h[xl-3] and l[xl-2]>=l[xl-3];
非包含2:=h[xl-2]<=h[xl-3] and l[xl-2]<l[xl-3];
非包含:非包含1 or 非包含2;
//判断上下走势
ssqs:h[xl-1]>h[xl-2] and l[xl-1]>=l[xl-2];
xjqs:l[xl-1]<l[xl-2] and h[xl-1]<=h[xl-2];
//上升取高高
//下降取低低
if is_bh then BEGIN
if CONTAINED=0 and xjqs=1 and 非包含 then BEGIN
HHV_PRICE:=temp3;
LLV_PRICE:=temp4;
CONTAINED:=1;
END
if CONTAINED1=0 and ssqs=1 and 非包含 then BEGIN
HHV_PRICE:=temp1;
LLV_PRICE:=temp2;
CONTAINED1:=1;
END
end
//持续处理,突破就重置,包含就对包含关系进行处理
包含:=h<=HHV_PRICE[xl-1] and l>=LLV_PRICE[xl-1];
突破:=(h>HHV_PRICE[xl-1] or l<LLV_PRICE[xl-1]);
if 突破=1 then BEGIN
if CONTAINED=1 then CONTAINED:=0;
if CONTAINED1=1 then CONTAINED1:=0;
end
if 包含=1 then BEGIN
if CONTAINED=1 then BEGIN
HHV_PRICE:=min(h,HHV_PRICE[xl-1]);
LLV_PRICE:=LLV_PRICE[xl-1];
end
if CONTAINED1=1 then BEGIN
HHV_PRICE:=HHV_PRICE[xl-1];
LLV_PRICE:=max(l,LLV_PRICE[xl-1]);
end
end
//不存在包含关系就取原高低价
if CONTAINED=0 AND CONTAINED1=0 then BEGIN
HHV_PRICE:=h;
LLV_PRICE:=l;
END
//处理K再处理
//当前K和前一个处理K进行比较
if is_bh=1 then BEGIN
//前一个K不是包含K的情况
cl_xj:HHV_PRICE[xl-1]<=HHV_PRICE[xl-2] and LLV_PRICE[xl-1]<LLV_PRICE[xl-2];
cl_ss:HHV_PRICE[xl-1]>HHV_PRICE[xl-2] and LLV_PRICE[xl-1]>=LLV_PRICE[xl-2];
if cl_xj=1 and CONTAINED[xl-1]=0 then BEGIN
HHV_PRICE:=temp3;
LLV_PRICE:=temp4;
CONTAINED:=1;
END
if cl_ss=1 and CONTAINED1[xl-1]=0 then BEGIN
HHV_PRICE:=temp1;
LLV_PRICE:=temp2;
CONTAINED1:=1;
END
END
//前一个K是包含K的情况
IS_PREV_cl:=HHV_PRICE[xl-1] <= h AND LLV_PRICE[xl-1] >= l;
// 判断当前K线是否被包含在前一个K线
IS_CURR_cl:=H <= HHV_PRICE[xl-1] AND L >= LLV_PRICE[xl-1];
is_clbh:IS_PREV_cl or IS_CURR_cl;
包含2:h>=HHV_PRICE[xl-1] and l<=LLV_PRICE[xl-1];
突破2:=(h>HHV_PRICE[xl-1] or l<LLV_PRICE[xl-1]);
前一个处理KH:=ref(HHV_PRICE,SUMBARS(CONTAINED1<>1,1)+2);
前一个处理Kl:=ref(LLV_PRICE,SUMBARS(CONTAINED1<>1,1)+2);
if is_clbh=1 then BEGIN
cl_bhxj:HHV_PRICE[xl-1]<=前一个处理KH and LLV_PRICE[xl-1]<前一个处理Kl;
cl_bhss:HHV_PRICE[xl-1]>前一个处理KH and LLV_PRICE[xl-1]>=前一个处理Kl;
if CONTAINED[xl-1]=1 and cl_bhxj=1 then BEGIN
HHV_PRICE:=min(h,HHV_PRICE[xl-1]);
LLV_PRICE:=min(l,LLV_PRICE[xl-1]);
CONTAINED:=1;
end
if CONTAINED1[xl-1]=1 and cl_bhss=1 then BEGIN
HHV_PRICE:=max(h,HHV_PRICE[xl-1]);
LLV_PRICE:=max(l,LLV_PRICE[xl-1]);
CONTAINED1:=1;
end
END
if 包含2=1 then BEGIN
if CONTAINED=1 then BEGIN
HHV_PRICE:=min(h,HHV_PRICE[xl-1]);
LLV_PRICE:=LLV_PRICE[xl-1];
end
if CONTAINED1=1 then BEGIN
HHV_PRICE:=HHV_PRICE[xl-1];
LLV_PRICE:=max(l,LLV_PRICE[xl-1]);
end
end
STICKLINE(CONTAINED1=0 and HHV_PRICE>HHV_PRICE[xl-1] and LLV_PRICE>=LLV_PRICE[xl-1],H,L,15,0,COLORRED);
STICKLINE(CONTAINED1=1 ,HHV_PRICE,L,15,0,COLORRED);
STICKLINE(CONTAINED=0 and HHV_PRICE<=HHV_PRICE[xl-1] and LLV_PRICE<LLV_PRICE[xl-1],H,L,15,0,COLORYELLOW);
STICKLINE(CONTAINED=1 ,H,LLV_PRICE,15,0,COLORYELLOW);
//输出
aa:HHV_PRICE;
bb:LLV_PRICE;
|
|