以下代码是按自己的思路编写的一个代码,虽然按历史数据计算出来的结果来看基本上都没有什么问题,但是不知道会不会存在其它的问题,所以请教一个各位高手,帮忙看一下是否有什么漏洞,顺便也探讨一下公式上的编写提高一下编程的能力,谢谢!
mon:=month;
w:=weekday;
dy:=if(month<>ref(month,1) or barscount(c)=1,if((day-weekday)<3,1,
if(fracpart((day-weekday)/7)<=0.4,intpart((day-weekday)/7)+1,intpart((day-weekday)/7)+2)),0);
b:=barscount(mon)=1;
jgxq:=intpart(((day-weekday)-(ref(day,1)+(7-ref(weekday,1))))/7);
jq:=mon=ref(mon,1) and (day-ref(day,1))>3;
dr:=if(jq and jgxq>0,jgxq,if(jq and (weekday-ref(weekday,1))=1,1,0));
u:=c-c;
zd:=barpos-min(barscount(w),barscount(mon));
for i=zd[datacount] to datacount do begin
if b[i]>0 then
u[i]:=dy[i];
else if mon[i]<>mon[i-1] then
u[i]:=dy[i];
else if mon[i]=mon[i-1] and w[i]<w[i-1] and dr[i]<=0 then
u[i]:=u[i-1]+1;
else if mon[i]=mon[i-1] and w[i]<w[i-1] and dr[i]>0 then
u[i]:=u[i-1]+1+dr[i];
else if mon[i]=mon[i-1] and w[i]>w[i-1] and dr[i]>0 then
u[i]:=u[i-1]+dr[i];
else u[i]:=u[i-1];end;
u:=u;
hys:=if(u<3,mon,if(u=3 && w<=4,mon,if(u=3 && w>4,mon+1,if(u>3,mon+1,0))));
uc:if(date>=1100416 and date<=1100501,5,if(hys>12,1,hys));//第三个星期的周五换合约,遇节假日顺延
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=10259
判断主力合约的话可以看这个
其实是因为有时候想提前一两天把合约转到下一个合约去。所以编写一个可以自己定义它是星期三或者星期四就转换合约的换合约过程,才编写了以上的程式的,但是不知道会不会有什么漏洞,所以贴出来大家探讨一下