您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 金字塔知识>>正文内容

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

     

  • 金字塔客服: 技术咨询中

     

  • 用户回复: 多谢

     

  • 网友回复: 老师,有结果了么? 急盼~~~工作停顿中~~~~

     

  • 网友回复: 这个很难,不一定能处理出来,再等等

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容