以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- k线合并问题求解 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=60974) |
-- 作者:pzwang2014 -- 发布时间:2014/1/15 12:26:18 -- k线合并问题求解 请问: 我在考虑k线合并,让系统自己在原来k线基础上将k线标准化,把包含关系的k线处理成统一标准化k线; 函数逻辑: 1、K线包含关系:指一K线的高低点全在另一K线的范围里; 2、K线包含关系的处理:在向上时,把两K线的最高点当高点,而两K线低点中的较高者当成低点,这样就把两K线合并成一新的K线;反之,当向下时,把两K线的最低点当低点,而两K线高点中的较低者当成高点,这样就把两K线合并成一新的K线。 3、K线合并方向:假设,第n根K线满足第n根与第n+1根的包含关系,而第n根与第n-1根不是包含关系,那么,如果第n根K线的高点大于第n-1根K线的高点,则称第n-1、n、n+1根K线是向上的;如果第n根K线的低点小于第n-1根K线的低点,则称第n-1、n、n+1根K线是向下的。
K线包含关系的顺序原则:先用第1、2根K线的包含关系确认新的K线,然后用新的K线去和第3根比,如果有包含关系,继续用包含关系的法则结合成新的K线;如果没有,就按正常K线去处理。 程序代码: runmode:1;//序列模式; i:=BARPOS; variable:up1=0;//定义一个数组用来存放向上包含的k线高点; variable:up2=0;//定义一个数组用来存放向上包含的k线低点; variable:dn1=0;//定义一个数组用来存放向下包含的k线高点; variable:dn2=0;//定义一个数组用来存放向下包含的k线低点; beforehigh:=high[2]; beforelow:=low[2]; thishigh:=high[3]; thislow:=low[3]; upordn:=BARPOS; aa:=setlbound(high,2);//设置序列变量high的下界为2,起始有效变量从第2根k线开始; bb:=setlbound(low,2);//设置序列变量low的下界为2,起始有效变量从第2根k线开始; for i=3 to BARPOS do//循环开始 begin upordn:=i;
if up1[i-1]>0 then begin beforehigh=up1[i-1]; beforelow=up2[i-1]; upordn=1; end if dn1[i-1]>0 then begin beforehigh=dn1[i-1]; beforelow=dn2[i-1]; upordn=-1; end else begin beforehigh=high[i-1]; beforelow=low[i-1]; end //通过该循环对向上/向下数组循环赋值(将最近的up和dn数组值赋值给前一k线的高低点以便于和最新的k线高低点进行比较)
thishigh=high[i]; thislow=low[i]; if ((ThisHigh>=BeforeHigh) AND (ThisLow<=BeforeLow)) OR ((ThisHigh<=BeforeHigh) AND (ThisLow>=BeforeLow)) //循环开始,开始判断包含关系; then begin if upordn=1 then //向上包含 Up1[i] = MAX(ThisHigh, BeforeHigh); Up2[i] = MAX(ThisLow, BeforeLow); up1[i-1]=up1[i]; up2[i-1]=up2[i];
if upordn=-1 then //向下包含 dn1[i]=MIN(thishigh,beforehigh); dn2[i]=MIN(thislow,beforelow); dn1[i-1]=dn1[i]; dn2[i-1]=dn2[i]; end;
else //没有包含关系 if thishigh>beforehigh then begin//向上 up1[i]=thishigh; up2[i]=thislow; end; if thislow<beforelow then begin//向下 dn1[i]=thishigh; dn2[i]=thislow; end;
cc:=stickline(up1[i]>up2[i],up1[i],up2[i],8,1,colorblue); //该语句参数需要调整确认 dd:=stickline(dn1[i]<dn2[i],dn1[i],dn2[i],8,1,colorred); //该语句参数需要调整确认
end; 系统在刚进入循环,if up1[i-1]>0 then 语句处,提醒说 数组越界操作; 盼请各位大拿开药方诊断~!!! |
-- 作者:jinzhe -- 发布时间:2014/1/15 13:14:41 -- 技术咨询中 |
-- 作者:pzwang2014 -- 发布时间:2014/1/15 13:38:53 -- 多谢 ![]() |
-- 作者:pzwang2014 -- 发布时间:2014/1/16 14:49:16 -- 老师,有结果了么? 急盼~~~工作停顿中~~~~ |
-- 作者:jinzhe -- 发布时间:2014/1/16 14:53:46 -- 这个很难,不一定能处理出来,再等等 |
-- 作者:pzwang2014 -- 发布时间:2014/1/20 10:50:34 -- 我在具体代码中已经实现功能(通过编译已经将up1、up2、dn1、dn2数值进行了赋值, 现在的问题是,如何将自定义并赋值的数组 up1、up2、dn1、dn2在金字塔软件中庸stickline函数实现?
|
-- 作者:pzwang2014 -- 发布时间:2014/1/20 13:54:16 -- 循环部分的运算和赋值已经搞定,现在就是最后的问题还请老师帮忙解决,如何将已经赋值的up1、up2和dn1、dn2数组通过stickline函数输出到k线图上来? cc:=stickline(up1[i]>up2[i],up1[i],up2[i],8,1,colorblue); //该语句参数需要调整确认 dd:=stickline(dn1[i]<dn2[i],dn1[i],dn2[i],8,1,colorred); //该语句参数需要调整确认 这个函数用来输出柱状图,但是数组定义这方面不知道是否有误,系统处理的是一根同样高度宽度同样颜色的柱状图的直线~ 求各位大虾指点迷津~!! |