以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  关于固定资金交易手数的问题 加急  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=96870)

--  作者:outlawjk
--  发布时间:2016/4/29 10:02:11
--  关于固定资金交易手数的问题 加急
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手 整个程序都没有问题了。

--  作者:yukizzc
--  发布时间:2016/4/29 10:09:59
--  

lots:=intpart(m*10/open*MULTIPLIER);

这个放到if条件外面,不要放条件里面


--  作者:outlawjk
--  发布时间:2016/4/29 10:12:32
--  
放在外面的话,每个tick都会计算lots,可能会导致我开仓的lots和平仓的lots不匹配,这个怎么解决
--  作者:wenarm
--  发布时间:2016/4/29 10:14:09
--  
lots:=intpart(m*10/(open*MULTIPLIER));
你确定是要乘以10,而不是资金的10%。绿色部分需要用括号,不然就是除价格乘以单位乘数
[此贴子已经被作者于2016/4/29 10:14:31编辑过]

--  作者:outlawjk
--  发布时间:2016/4/29 10:33:25
--  
我默认算10%保证金比例,括号漏掉了,我加上去了。但是还是解决不了我的开平仓手数不一致的问题,比如开仓是计算lots=10,平仓k线计算的lots=8;这种怎么解决?难道一定要使用tholding吗?,有没有其他办法的


--  作者:yukizzc
--  发布时间:2016/4/29 10:40:32
--  

这个没有办法,你的这个赋值本身就是开仓和平仓可能不在同一个k

你直接用tholding,或者在开仓时候用ex这类写全局变量方式存入那个lots


--  作者:outlawjk
--  发布时间:2016/4/29 10:48:08
--  
能不能麻烦再详细说下lots放在if里面和放在外面的区别,因为在图表交易上lots放在if里面是没有问题的,后台为什么不行?
--  作者:yukizzc
--  发布时间:2016/4/29 10:51:33
--  

如果你开仓条件没满足,那么lots就没有赋值,这样后面就取不到这个数值

你如果想要记录开仓时候的lots那么用用法:
EXTGBDATASET(S,X)

写全局变量去记录


--  作者:wenarm
--  发布时间:2016/4/29 10:52:52
--  
if buycond and tholding=0 then begin
lots:=intpart(m*10/open*MULTIPLIER);
tbuy(1,lots,mkt);
end
在里面,你红色部分条件成立,才会进来计算你的lots。那么有可能会造成你平仓条件成立时,tsell(1,lots,mkt);获取不到lots的值。所以必须放外头。

--  作者:outlawjk
--  发布时间:2016/4/29 10:56:38
--  
好的 ,明白了,谢谢两位!