以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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线合并方向:假设,第nK线满足第n根与第n+1根的包含关系,而第n根与第n-1根不是包含关系,那么,如果第nK线的高点大于第n-1K线的高点,则称第n-1nn+1K线是向上的;如果第nK线的低点小于第n-1K线的低点,则称第n-1nn+1K线是向下的。

K线包含关系的顺序原则:先用第12K线的包含关系确认新的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);  //该语句参数需要调整确认


这个函数用来输出柱状图,但是数组定义这方面不知道是否有误,系统处理的是一根同样高度宽度同样颜色的柱状图的直线~ 求各位大虾指点迷津~!!