欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → k线合并问题求解

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3001人关注过本帖平板打印复制链接

主题:k线合并问题求解

帅哥哟,离线,有人找我吗?
pzwang2014
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:16 积分:0 威望:0 精华:0 注册:2014/1/15 11:14:03
k线合并问题求解  发帖心情 Post By:2014/1/15 12:26:18    Post IP:115.236.182.203[只看该作者]

请问:
     我在考虑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  语句处,提醒说 数组越界操作; 盼请各位大拿开药方诊断~!!!


 回到顶部