以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=170663)

--  作者:www532412596
--  发布时间:2019/6/26 14:47:44
--  [求助]后台程序化问题
执行后台程序化交易交易时,程序是对股票池里所有符合条件股票同时进行下单,那么为了限制持仓品种数量(只下单符合条件的3只股票),怎么写函数,代码控制一下呢?谢谢帮助
--  作者:FireScript
--  发布时间:2019/6/26 15:03:18
--  
 参考THOLDCOUNT( )函数
--  作者:www532412596
--  发布时间:2019/6/26 15:20:07
--  
我利用了tholdcount函数 我的代码如下
A:=HOLDING;
B:=1;
IF (THOLDCOUNT(\'\')>=3) THEN BEGIN 
 B=0;
END
TBUY(A=0 AND B=1 ,1 , MKT);
但是我还是没有控制住下单的品种数量,程序瞬间对股票池每个股票都进行了下单操作。

--  作者:FireScript
--  发布时间:2019/6/26 15:43:56
--  
 你是用后台监控了股票池的吗?我看了之前的帖子,你是不是在股票池里也设置了下单?
[此贴子已经被作者于2019/6/26 15:45:05编辑过]

--  作者:www532412596
--  发布时间:2019/6/27 10:32:06
--  
我没有在股票中设置下单。我优化了下代码如下:
CC:=HOLDING;
A:=IF(CC=0,1,0);
B:=1;
D:=THOLDCOUNT(\'\');
IF (D>=3) THEN BEGIN
  B=0;
  END   

EXTGBDATASET(\'E\',D);
E:=EXTGBDATA(\'E\')+1;
F:=IF(E<=3,1,0);

TBUY(A AND B AND F ,1,MKT);


增加E为全局变量,控制下单数,但是结果下单数变少了,但是还是超过了3,成交了7单。

--  作者:FireScript
--  发布时间:2019/6/27 10:47:33
--  
 这个的话,应该是全局变量赋值上一个时间差。
后面的改下:
EXTGBDATASET(\'E\',D);
TBUY(A AND B AND (EXTGBDATA(\'E\')+1)<3 ,1,MKT);
在下单时候判断,而不是先取值再判断。先取值得话这中间不能保证,前面取得值到下单时候是不是已经在其他地方被重新赋值了。