有请骑兵版主帮助,不胜感谢

我想在飞狐上编一个外汇K线,由于外汇是24小时分时段交易,东京.伦敦.纽约等时段交易比较活跃,我想将每日K线划成几根不同时段的K线,具体讲0:00-0800为1根K线,0900-1200为1根,1200-2300为一根.所编K线能在1小时副图上显示或在其它周期显示都可,我有1小时的飞狐EURUSD数据,如何实现.

说明:每日外汇K线比如EURUSD的K线以GMT时间00:00分开盘价为开盘价,23:00的收盘价为收盘价.
由于本人编公式底子太薄,不知如何下手,还请版主赐教.
我也来说两句 查看全部回复

最新回复

  • LYQQ7206 (2008-8-01 21:45:18)

    骑兵兄没空,有无其他高手肯帮忙。谢过了
  • bajatje (2008-8-02 10:47:57)

    1小时周期
    a:=hour=8 or hour=12 or hour=23;
    wq:=barslast(a or barpos=1);
    gd:=wq<>0;
    wh:=0*c;
    for I=datacount downto LBOUND(wq) do begin
      if wq[I] then wh[I-1]:=wh[I]+gd[I];end;
    开:ref(o,wq)LINETHICK,COLORWHITE;
    高:refx(hhv(h,wq+1),wh)LINETHICK,COLORRED;
    低:refx(LLv(L,wq+1),wh)LINETHICK,COLORCYAN;
    收:refx(c,wh)LINETHICK,COLORYELLOW;
    ii:=cross(wq,wh)or ISLASTBAR*(wh>wq);
    f:=收>开 or 收=开 and 收>ref(收,4);
    STICKLINE(f and ii,高,低,1,0)COLORMAGENTA;
    STICKLINE(f,收,开,10,0)COLORMAGENTA;
    STICKLINE(not(f) and ii,高,低,1,0)COLORGREEN;
    STICKLINE(not(f),收,开,10,0)COLORGREEN;

    [ 本帖最后由 bajatje 于 2008-8-2 10:49 编辑 ]
  • LYQQ7206 (2008-8-02 20:49:25)

    虽然股市很冷,但这里很温暖,感谢bajatje兄.一直想解决的问题终于有了回音.还有一个虽小却又是大的问题:
          能不能让副图K线同主图K线一样大小,这样不致于一缩小就重叠在一起.看起来很方便.
         在网上找到一个任意周期K线公式,它显示在副图的K线很完美,同主图K线一般大小.可惜我看不同.原码如下:
    //新编任意周期K线
    INPUT:周期(0,0,10),自选(1,1,1000);
    n:=YEAR>ref(YEAR,1)or barpos=1;
    j1:=cross(MONTH>=1 and MONTH<=3,0.5);
    j2:=cross(MONTH>=4 and MONTH<=6,0.5);
    j3:=cross(MONTH>=7 and MONTH<=9,0.5);
    j4:=cross(MONTH>=10 and MONTH<=12,0.5);
    j:=(j1+j2+j3+j4)or barpos=1;
    y:=MONTH<>ref(MONTH,1)or barpos=1;
    z:=datediff(ref(date,1),date)<>weekday-ref(weekday,1) or barpos=1;
    r:=day<>ref(day,1)or barpos=1;
    f:=INTPART(TIME/100)LINETHICK;
    fs:=sum(f>ref(f,1)or BARPOS=1,0)-1;
    w1:=f>ref(f,1)or BARPOS=1;
    lx:=DATATYPE,COLORWHITE,LINETHICK0;
    lx1:=DATATYPE+周期,COLORWHITE,LINETHICK0;
    w2:=if(自选=1,w1,cross(0.5,mod(fs,自选)=0));
    s:=BARPOS;
    fb:=if(lx=0 and lx1=0,w1,
    if(lx=0 and lx1=1,cross(0.5,mod(fs,5)=0),
    if(lx=0 and lx1=2,cross(0.5,mod(fs,15)=0),
    if(lx=0 and lx1=3,cross(0.5,mod(fs,30)=0),
    if(lx=0 and lx1=4,cross(0.5,mod(fs,60)=0),w2)))));
    f1:=if(lx=1 and lx1=1,mod(s,5)=1,
    if(lx=1 and lx1=2,mod(s,15)=1,
    if(lx=1 and lx1=3,mod(s,30)=1,
    if(lx=1 and lx1=4,mod(s,60)=1,mod(s,自选+1)=1))));
    f5:=if(lx=2 and lx1=2,mod(s,3)=1,
    if(lx=2 and lx1=3,mod(s,6)=1,
    if(lx=2 and lx1=4,mod(s,12)=1,
    if(lx=2 and lx1=5,r,mod(s,自选+1)=1))));
    f15:=if(lx=3 and lx1=3,mod(s,2)=1,
    if(lx=3 and lx1=4,mod(s,4)=1,
    if(lx=3 and lx1=5,r,
    if(lx=3 and lx1=6,z,mod(s,自选+1)=1))));
    f30:=if(lx=4 and lx1=4,mod(s,2)=1,
    if(lx=4 and lx1=5,r,
    if(lx=4 and lx1=6,z,
    if(lx=4 and lx1=7,y,mod(s,自选+1)=1))));
    f60:=if(lx=5 and lx1=5,r,
    if(lx=5 and lx1=6,z,
    if(lx=5 and lx1=7,y,
    if(lx=5 and lx1=8,j,mod(s,自选+1)=1))));
    r:=if(lx=6 and lx1=6,z,
    if(lx=6 and lx1=7,y,
    if(lx=6 and lx1=8,j,
    if(lx=6 and lx1=9,n,mod(s,自选+1)=1))));
    z:=if(lx=7 and lx1=7,y,
    if(lx=7 and lx1=8,j,
    if(lx=7 and lx1=9,n,mod(s,自选+1)=1)));
    y:=if(lx=8 and lx1=8,j,
    if(lx=8 and lx1=9,n,mod(s,自选+1)=1));
    x:=if(lx=0,fb,if(lx=1,f1,if(lx=2,f5,if(lx=3,f15,if(lx=4,f30,if(lx=5,f60,
    if(lx=6,r,if(lx=7,z,if(lx=8,y,0)))))))));

    fba:=if(lx=0 and lx1=0,'1分钟',
    if(lx=0 and lx1=1,'5分钟',
    if(lx=0 and lx1=2,'15分钟',
    if(lx=0 and lx1=3,'30分钟',
    if(lx=0 and lx1=4,'60分钟','自选'+NUMTOSTR(自选,0)+'分钟')))));
    f1a:=if(lx=1 and lx1=1,'5分钟',
    if(lx=1 and lx1=2,'15分钟',
    if(lx=1 and lx1=3,'30分钟',
    if(lx=1 and lx1=4,'60分钟','自选'+NUMTOSTR(自选+1,0)+'分钟'))));
    f5a:=if(lx=2 and lx1=2,'15分钟',
    if(lx=2 and lx1=3,'30分钟',
    if(lx=2 and lx1=4,'60分钟',
    if(lx=2 and lx1=5,'日线','自选'+NUMTOSTR((自选+1)*5,0)+'分钟线'))));
    f15a:=if(lx=3 and lx1=3,'30分钟',
    if(lx=3 and lx1=4,'60分钟',
    if(lx=3 and lx1=5,'日线',
    if(lx=3 and lx1=6,'周线','自选'+NUMTOSTR((自选+1)*15,0)+'分钟线'))));
    f30a:=if(lx=4 and lx1=4,'60',
    if(lx=4 and lx1=5,'日线',
    if(lx=4 and lx1=6,'周线',
    if(lx=4 and lx1=7,'月线','自选'+NUMTOSTR((自选+1)*30,0)+'分钟线'))));
    f60a:=if(lx=5 and lx1=5,'日线',
    if(lx=5 and lx1=6,'周线',
    if(lx=5 and lx1=7,'月线',
    if(lx=5 and lx1=8,'季线','自选'+NUMTOSTR((自选+1)*60,0)+'分钟线'))));
    ra:=if(lx=6 and lx1=6,'周线',
    if(lx=6 and lx1=7,'月线',
    if(lx=6 and lx1=8,'季线',
    if(lx=6 and lx1=9,'年线','自选'+NUMTOSTR(自选+1,0)+'周期日线'))));
    za:=if(lx=7 and lx1=7,'月线',
    if(lx=7 and lx1=8,'季线',
    if(lx=7 and lx1=9,'年线','自选'+NUMTOSTR(自选+1,0)+'周期周线')));
    ya:=if(lx=8 and lx1=8,'季线',
    if(lx=8 and lx1=9,'年线','自选'+NUMTOSTR(自选+1,0)+'周期月线'));
    x1:=if(lx=0,fba,if(lx=1,f1a,if(lx=2,f5a,if(lx=3,f15a,if(lx=4,f30a,if(lx=5,f60a,
    if(lx=6,ra,if(lx=7,za,if(lx=8,ya,'0')))))))));

    zq:=x,COLORWHITE;
    zqs:=sum(zq,0);
    fzqs:=zqs[DATACOUNT]-zqs;
    fks:=DATACOUNT-BARPOS;
    t:=sumbars(zq,1);
    t1:=sumbars(zq,fks-fzqs);
    km:=BACKSET(ISLASTBAR and zq=1,2);
    t2:=if(km,0,t1);t22:=LBOUND(t2);
    oo:=ref(o,t-1);
    hh:=hhv(h,t);
    ll:=llv(l,t);
    vv:=sum(v,t);
    jh:=sum(AMOUNT,t);

    时间:=if(ISLASTBAR,f,ref(f,t2)),LINETHICK0,PRECISION0,COLORWHITE;
    开:ref(oo,t2),LINETHICK0,PRECISION2,COLORBDBEBD;
    高:if(ISLASTBAR,hh,ref(hh,t2)),LINETHICK0,PRECISION2,COLORBDBEBD;
    低:if(ISLASTBAR,ll,ref(ll,t2)),LINETHICK0,PRECISION2,COLORBDBEBD;
    收:if(ISLASTBAR,c,ref(c,t2)),LINETHICK0,PRECISION2,COLORBDBEBD;
    量:if(ISLASTBAR,vv,ref(vv,t2)),LINETHICK0,PRECISION2,COLORBDBEBD;
    额:if(ISLASTBAR,jh,ref(jh,t2)),LINETHICK0,PRECISION2,COLORBDBEBD;
    换:量*100/CAPITAL,LINETHICK0,PRECISION2,COLORBDBEBD;
    振:(高-低)/ref(收,1)*100,LINETHICK0,PRECISION2,COLORBDBEBD;
    涨〔:PARTLINE(0,0),COLORBDBEBD;
    收-ref(收,1),LINETHICK0,PRECISION2,COLORBDBEBD;
    〕:PARTLINE(0,0),COLORBDBEBD;
    收/ref(收,1)*100-100,LINETHICK0,PRECISION2,COLORBDBEBD;
    %:PARTLINE(0,0),COLORBDBEBD;
    k:=收>开 or 收=开;
    // and 收>ref(收,1);
    STICKLINE(k,低,高,0.1,1),colorred;
    STICKLINE(k,收,开,7,1),colorred;
    STICKLINE(not(k),低,高,0.1,0),colorcyan;
    STICKLINE(not(k),收,开,7,0),colorcyan;


    a1:=if(ISLASTBAR,YEAR,ref(YEAR,t2)),LINETHICK;;
    b1:=if(ISLASTBAR,MONTH,ref(MONTH,t2)),LINETHICK;
    c1:=if(ISLASTBAR,day,ref(day,t2)),LINETHICK;
    d1:=if(ISLASTBAR,weekday,ref(weekday,t2)),LINETHICK;
    a2:=0*c;b2:=0*c;c2:=0*c;d2:=0*c;时间1:=0*c;
    kw:=if(s>LBOUND(t2),1,0);xr:=HOUR;
    for i=1 to datacount do begin
      if kw then begin
         a2:=a1;
         b2:=b1;
         c2:=c1;
         d2:=d1;
         时间1:=时间;
      end;
    end;
    p:=SYSPARAM(1);
    g:=时间1[p]/100;
    g1:=INTPART(g)COLORWHITE;
    xq:=if(d2[p]=1,'一',if(d2[p]=2,'二',if(d2[p]=3,'三',if(d2[p]=4,'四',if(d2[p]=5,'五','0')))));
    sz:=NUMTOSTR(a2[p],0)+'年'+'/'+NUMTOSTR(b2[p],0)+'月'+'/'+NUMTOSTR(c2[p],0)+'日'+'/'+NUMTOSTR(g1,0)+':'+STRRIGHT(NUMTOSTR(时间1[p],0),2)+' '+'星期'+xq;
    DRAWTEXTEX(1,0,0,0,'当前周期∶'+x1+' '+sz),ALIGN4,COLORBDBEBD;