m:=50000;
//lots:=5;
myclose:=ref(close,1);
myopen:=ref(open,1);
buycond:=myopen>myclose;
sellcond:=myopen<myclose;
if buycond and tholding=0 then begin
lots:=intpart(m*10/open*MULTIPLIER);
tbuy(1,lots,mkt);
end
if sellcond and tholding>0 then begin
tsell(1,lots,mkt);
end
DEBUGFILE('D:\stockprice\交易日志.txt',STKLABEL+' '+'交易手数:'+numtostr(lots,0)+' '+'开仓价:'+numtostr(open,2)+'交易单位:'+numtostr(MULTIPLIER,2)+'交易手数:',lots);
请大神帮忙看下 这个后台程序有何问题,为何交易手数始终是0,debugfile输出里面lots的值也不能输出。但是吧lots改成固定5手 整个程序都没有问题了。
lots:=intpart(m*10/open*MULTIPLIER);
这个放到if条件外面,不要放条件里面
放在外面的话,每个tick都会计算lots,可能会导致我开仓的lots和平仓的lots不匹配,这个怎么解决
lots:=intpart(m*10/(open*MULTIPLIER));你确定是要乘以10,而不是资金的10%。绿色部分需要用括号,不然就是除价格乘以单位乘数
[此贴子已经被作者于2016/4/29 10:14:31编辑过]
我默认算10%保证金比例,括号漏掉了,我加上去了。但是还是解决不了我的开平仓手数不一致的问题,比如开仓是计算lots=10,平仓k线计算的lots=8;这种怎么解决?难道一定要使用tholding吗?,有没有其他办法的
这个没有办法,你的这个赋值本身就是开仓和平仓可能不在同一个k
你直接用tholding,或者在开仓时候用ex这类写全局变量方式存入那个lots
能不能麻烦再详细说下lots放在if里面和放在外面的区别,因为在图表交易上lots放在if里面是没有问题的,后台为什么不行?
如果你开仓条件没满足,那么lots就没有赋值,这样后面就取不到这个数值
你如果想要记录开仓时候的lots那么用用法:
EXTGBDATASET(S,X)
写全局变量去记录
if buycond and tholding=0 then begin
lots:=intpart(m*10/open*MULTIPLIER);
tbuy(1,lots,mkt);
end
在里面,你红色部分条件成立,才会进来计算你的lots。那么有可能会造成你平仓条件成立时,tsell(1,lots,mkt);获取不到lots的值。所以必须放外头。