这样试下。
[PEL] 复制代码 GLOBALVARIABLE:mark:=0;
//以下代码是获取当前账户持仓品种的,其中包含排查重复的逻辑。因为多头和空头,以及部分品种今仓老仓都会在账户上单独占据一条纪录的。
//直接遍历当前账户持仓。
TH:=THOLDCOUNT('');
TEMP_STR:='';//保存品种代码集合
if 100*(TACCOUNT( 6)-TACCOUNT(26))/TACCOUNT(26)>=10 and mark=0 then
begin
FOR I=1 TO TH do
BEGIN
HLABEL:= THOLDINDEXLABEL(I,'');
//判断当前代码集合中是否已经存在,不存在则进行统计。存在则不进入统计
if STRFIND( TEMP_STR, ','&HLABEL,1 )=0 then
begin
//将不在代码集合中的品种添加到代码集合中。
TEMP_STR:=STRCAT( TEMP_STR, ','&HLABEL );
IF TBUYHOLDINGEX('',HLABEL,1)>0 THEN
begin
//一半仓位按照向上取整方式获取。比如只有一手多,那么1/2向上取整则按照1手算。
tsell(1, CEILING(TBUYHOLDINGEX('','',1)/2),mkt,0,0,'',HLABEL),ALLOWREPEAT;
end
IF TSELLHOLDINGEX('',HLABEL,1)>0 THEN
begin
tsellshort(1,CEILING(TSELLHOLDINGEX('','',1)/2),mkt,0,0,'',HLABEL),ALLOWREPEAT;
end
end
end
mark:=1;
end
1.在后台运行时候只需要监控任意一个有行情的品种。因为下单什么的我都是在账户里里获取品种代码的。
2.这段代码最好单独放在一个后台程序化里,单独运行,不要和其他程序代码放在一起。
3.每次重启后台程序化,都会重置。也就是你如果原先已经平仓一次了。你停止了程序化了再次开启,如果满足条件那么它还会再次平一半仓。
4.你最好在模拟账户测试下。可以 设置一个较为宽松的条件 测试几次。
100*(TACCOUNT( 6)-TACCOUNT(26))/TACCOUNT(26)>=10
改下这里的判断数值大小就行了。后面的10表示10% 你可以自行修改。 |