以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于后台多账户的问题  (http://weistock.com/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编辑过]