写了一个网格交易的模型,单行执行没有问题,但是改成循环语句就出问题了,感觉好像不是完全执行完第一个循环再去执行第二个循环,而是整体在执行循环,请问是哪里出了问题?
单行是可以执行的:
input: P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1); //初始价格,网格宽度,每笔手数
if TREMAINQTY(1,'','')<=0*n then
tbuy(c>=p-9*j&&tholding2<=9*n,n,lmt,p-9*j);
if TREMAINQTY(1,'','')<=1*n then
tbuy(c>=p-8*j&&tholding2<=8*n,n,lmt,p-8*j);
if TREMAINQTY(1,'','')<=2*n then
tbuy(c>=p-7*j&&tholding2<=7*n,n,lmt,p-7*j);
if TREMAINQTY(1,'','')<=3*n then
tbuy(c>=p-6*j&&tholding2<=6*n,n,lmt,p-6*j);
if TREMAINQTY(1,'','')<=4*n then
tbuy(c>=p-5*j&&tholding2<=5*n,n,lmt,p-5*j);
if TREMAINQTY(1,'','')<=5*n then
tbuy(c>=p-4*j&&tholding2<=4*n,n,lmt,p-4*j);
if TREMAINQTY(1,'','')<=6*n then
tbuy(c>=p-3*j&&tholding2<=3*n,n,lmt,p-3*j);
if TREMAINQTY(1,'','')<=7*n then
tbuy(c>=p-2*j&&tholding2<=2*n,n,lmt,p-2*j);
if TREMAINQTY(1,'','')<=8*n then
tbuy(c>=p-j&&tholding2<=n,n,lmt,p-j);
if TREMAINQTY(1,'','')<=9*n then
tbuy(c>=p&&tholding2<=0,n,lmt,p);
if TREMAINQTY(4,'','')<=9*n then
tsell(c<=p-8*j&&tholding2>=10*n,n,lmt,p-8*j);
if TREMAINQTY(4,'','')<=8*n then
tsell(c<=p-7*j&&tholding2>=9*n,n,lmt,p-7*j);
if TREMAINQTY(4,'','')<=7*n then
tsell(c<=p-6*j&&tholding2>=8*n,n,lmt,p-6*j);
if TREMAINQTY(4,'','')<=6*n then
tsell(c<=p-5*j&&tholding2>=7*n,n,lmt,p-5*j);
if TREMAINQTY(4,'','')<=5*n then
tsell(c<=p-4*j&&tholding2>=6*n,n,lmt,p-4*j);
if TREMAINQTY(4,'','')<=4*n then
tsell(c<=p-3*j&&tholding2>=5*n,n,lmt,p-3*j);
if TREMAINQTY(4,'','')<=3*n then
tsell(c<=p-2*j&&tholding2>=4*n,n,lmt,p-2*j);
if TREMAINQTY(4,'','')<=2*n then
tsell(c<=p-j&&tholding2>=3*n,n,lmt,p-j);
if TREMAINQTY(4,'','')<=1*n then
tsell(c<=p&&tholding2>=2*n,n,lmt,p);
if TREMAINQTY(4,'','')<=0*n then
tsell(c<=p+j&&tholding2>=n,n,lmt,p+j);
循环执行会出现问题:
input: P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1),M(10,1,30,1); //初始价格,网格宽度,每笔手数,网格数量
FOR i=1 TO M DO
if TREMAINQTY(1,'','')<=(i-1)*n then
tbuy(c>=p-(10-i)*j&&tholding2<=(10-i)*n,n,lmt,p-(10-i)*j);
FOR u=1 TO M DO
if TREMAINQTY(4,'','')<=(10-u)*n then
tsell(c<=p-(9-u)*j&&tholding2>=(11-u)*n,n,lmt,p-(9-u)*j);
循环次数并没有你说的现象。你参考下面的调试代码。使用的debugfile输出的。
input:P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1),M(10,1,30,1); //初始价格,网格宽度,每笔手数,网格数量
FOR i=1 TO M DO
BEGIN
if TREMAINQTY(1,'','')<=(i-1)*n then
tbuy(c>=p-(10-i)*j&&tholding2<=(10-i)*n,n,lmt,p-(10-i)*j);
DEBUGFILE('D:\cc.TXT','i循环次数%.2f',i);
end
FOR u=1 TO M DO
BEGIN
if TREMAINQTY(4,'','')<=(10-u)*n then
tsell(c<=p-(9-u)*j&&tholding2>=(11-u)*n,n,lmt,p-(9-u)*j);
DEBUGFILE('D:\cc.TXT','u循环次数%.2f',u);
end
同一条开仓语句在循环体内只会执行一次的,所以和你写很多个if条件里面的开仓交易。
执行结果是不同的
同一条开仓语句在循环体内只会执行一次是什么意思?是说我循环10次只会执行一次开仓?
现在账户挂单实际的流程是买单挂一张,卖单挂一张,买单挂一张,卖单再挂一张...
而单行执行的话是挂完全部买单再挂全部卖单,所以导致执行结果不同
1.
现在账户挂单实际的流程是买单挂一张,卖单挂一张,买单挂一张,卖单再挂一张...
这个执行结果,是您上面说到的,是吧
input:P(2600,0,50000,1), J(3,1,10,1),N(10,1,100,1),M(10,1,30,1); //初始价格,网格宽度,每笔手数,网格数量
FOR i=1 TO M DO
BEGIN
if TREMAINQTY(1,'','')<=(i-1)*n then
tbuy(c>=p-(10-i)*j&&tholding2<=(10-i)*n,n,lmt,p-(10-i)*j);
DEBUGFILE('D:\cc.TXT','i循环次数%.2f',i);
end
FOR u=1 TO M DO
BEGIN
if TREMAINQTY(4,'','')<=(10-u)*n then
tsell(c<=p-(9-u)*j&&tholding2>=(11-u)*n,n,lmt,p-(9-u)*j);
DEBUGFILE('D:\cc.TXT','u循环次数%.2f',u);
end
2.
单行执行的话是挂完全部买单再挂全部卖单
这个结果是那个代码执行的
您是要实现哪种结果?
3.您运行在几分钟K线下,
运行模式是:固定时间间隔吗
我需要的是单行执行的效果,就是全部挂完买单再挂卖单,但是循环写法不是这样执行的
我是直接在用分笔数据,固定时间间隔运行
这就是我和你说的,循环体内不会重复执行同一条开仓语句。因为你是分笔周期所以变成了,第一根k执行买卖,然后第二根马上k又买卖了。
要执行重复运行在开仓语句后面加上ALLOWREPEAT。但这个如果你用在分钟周期会导致每次运行都重复报单。