以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 关于后台多账户的问题 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=182266) |
-- 作者:linanmeng -- 发布时间:2020/9/21 10:01:27 -- 关于后台多账户的问题 结合网上找的内容和阿火,写了以下代码(后台持仓同步加下单): 问题1:AC后面引号,默认采用空值,机构版测试能通过,没有问题。但是如果里面填写了下单组名称,比如22,houtai这种,然后把某个账户编辑到后台下单组里面,发现tbuyholdingex 和 tsellholdingex 始终读出来的都是没有持仓。 问题2:如果AC用空值,在后台交易界面,设置打钩账户,这样也可以交易,那么和把打钩账户归类到下单组 然后填写交易组名称,这两种方式在最后效果上有啥区别吗? 问题3:allowrepeat,如果只允许重复3次,以下代码如何修改? cc:=holding; drawtextex(1,1,800,0,\'虚拟持仓为:\'+numtostr(cc,0));//在图表上输入虚拟持仓以便监控 ac:=\'\';//把800988改成自己的下单账户 buyhold:=tbuyholdingex(ac,stklabel,1); sellhold:=tsellholdingex(ac,stklabel,1); if cc>0 then BEGIN if SELLHOLD>0 then tsellshort(1,0,mkt,0,0,ac),allowrepeat; if CC>BUYHOLD then tbuy(1,CC-BUYHOLD,mkt,0,0,ac),ALLOWREPEAT; if CC<BUYHOLD then TSELL(1,BUYHOLD-CC,mkt,0,0,ac),ALLOWREPEAT; end if cc<0 then BEGIN if BUYHOLD>0 then TSELL(1,0,mkt,0,0,ac),ALLOWREPEAT; if -CC>SELLHOLD then TBUYSHORT(1,-CC-SELLHOLD,mkt,0,0,ac),ALLOWREPEAT; if -CC<SELLHOLD then TSELLSHORT(1,SELLHOLD+CC,mkt,0,0,ac),ALLOWREPEAT; end if cc=0 then BEGIN if BUYHOLD>0 then TSELL(1,0,mkt,0,0,ac),allowrepeat; if SELLHOLD>0 then TSELLSHORT(1,0,mkt,0,0,ac),ALLOWREPEAT; MSGOUT(1,STKLABEL&\'无仓\'); end thold:=BUYHOLD-SELLHOLD; MSGOUT(thold<>cc,STKLABEL&\'实际持仓,buyhold多:\'&NUMTOSTR(BUYHOLD,0)&\' sellhold空:\'&NUMTOSTR(SELLHOLD,0)&\' 虚拟持仓cc88:\'&NUMTOSTR(cc,0)); |
-- 作者:linanmeng -- 发布时间:2020/9/21 10:08:41 -- 另外,云端连续测试时发现,有时明明账户有持仓,输出结果确是没有持仓,然后系统就纠正加1手。过一会发现持仓又多了,再平掉!这种情况发生在今天上午10点02分。如何避免?是否账户很容易读错? |
-- 作者:linanmeng -- 发布时间:2020/9/21 10:19:46 -- 如上,虚拟持仓的数据很稳定,实际持仓为何老是读不准确?
[此贴子已经被作者于2020/9/21 10:20:51编辑过]
|
-- 作者:FireScript -- 发布时间:2020/9/21 10:40:28 -- 1.tbuyholdingex 这种肯定没办法读取账户组的持仓啊。它只能读取账户。 2.如果只是下单,没什么区别其实。但是你如果要取一些数据,均价,持仓数量等等,写账户组的方式自然就不行了。 3.allowrepeat 这个没办法设置重复的次数。你只能在条件里面去控制,比如从持仓数量或者下单次数角度去限制下。 |
-- 作者:linanmeng -- 发布时间:2020/9/21 11:01:02 -- 那么有好几个账户要读的话,TBUYHOLDINGEX,要怎么写呢?还是就写成空值,直接在后台交易的设置里给账户打钩? |
-- 作者:linanmeng -- 发布时间:2020/9/21 11:03:59 -- 另外,写成空值后,为何老是出现读账户持仓不准确?(见3楼贴图) [此贴子已经被作者于2020/9/21 11:04:41编辑过]
|
-- 作者:FireScript -- 发布时间:2020/9/21 11:12:43 -- tbuyholdingex(ac,stklabel,1); 这里是不包含未成交平仓单的。 你改成2试试呢。
|
-- 作者:linanmeng -- 发布时间:2020/9/22 2:43:01 -- 改成2 好像也不好用,还是经常读成0,然后不停下单,测试时,有一次连续下了13单,忽然又读出来了,再自动平掉12单。 |
-- 作者:wenarm -- 发布时间:2020/9/22 8:16:52 -- tbuyholdingex函数是返回当前账户持仓的状态过程,如果你是开仓过程,通过它们限制没有任何意义。开仓过程的限制需要结合使用未成交函数作为条件进行限制。才能有效避免多次开仓。 必将委托到成交是需要时间的。而策略执行的效率远远过于这个时间。 |
-- 作者:linanmeng -- 发布时间:2020/9/22 9:08:40 -- 我将轮询时间开到15秒了,还是会出现啊,但AC不用空值,直接用指定账户,好像就可以。不知是何原因 [此贴子已经被作者于2020/9/22 9:09:26编辑过]
|