执行后台程序化交易交易时,程序是对股票池里所有符合条件股票同时进行下单,那么为了限制持仓品种数量(只下单符合条件的3只股票),怎么写函数,代码控制一下呢?谢谢帮助
我利用了tholdcount函数 我的代码如下
A:=HOLDING;
B:=1;
IF (THOLDCOUNT('')>=3) THEN BEGIN
B=0;
END
TBUY(A=0 AND B=1 ,1 , MKT);
但是我还是没有控制住下单的品种数量,程序瞬间对股票池每个股票都进行了下单操作。
你是用后台监控了股票池的吗?我看了之前的帖子,你是不是在股票池里也设置了下单?
[此贴子已经被作者于2019/6/26 15:45:05编辑过]
我没有在股票中设置下单。我优化了下代码如下: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单。
这个的话,应该是全局变量赋值上一个时间差。
后面的改下:
EXTGBDATASET('E',D);
TBUY(A AND B AND (EXTGBDATA('E')+1)<3 ,1,MKT);
在下单时候判断,而不是先取值再判断。先取值得话这中间不能保证,前面取得值到下单时候是不是已经在其他地方被重新赋值了。