以文本方式查看主题

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

--  作者:FF
--  发布时间:2018/4/16 13:14:25
--  删不了要删的股票!
WARNING_DISABLE:4;
//该模型运行于后台程序化模式
///////////////////////////////////////
IF CURRENTTIME<092900 AND CURRENTTIME>092800 THEN BEGIN
FOR I = 1 TO STKCOUNT(\'交易板块\') DO
BEGIN
HLABEL:=STKFROMBLK(\'交易板块\',I);
A:=DELETEFROMBLOCK(HLABEL,\'交易板块\');
END
END
//////////////
IF CURRENTTIME<093000 AND CURRENTTIME>092800 THEN BEGIN
FOR I = 1 TO THOLDCOUNT(\'\') DO
BEGIN
HLABEL:= THOLDINDEXLABEL(I,\'\');
B:=ADDTOBLOCK(HLABEL,\'交易板块\');
END
END
//////////////
IF ((CURRENTTIME<113000 AND CURRENTTIME>093000) OR (CURRENTTIME<150000 AND CURRENTTIME>130000)) THEN BEGIN
FOR I = 1 TO THOLDCOUNT(\'\') DO
BEGIN
HLABEL:= THOLDINDEXLABEL(I,\'\');
B:=ADDTOBLOCK(HLABEL,\'交易板块\');
END
END
//////////////

///////////////////////////
IF (CURRENTTIME<=223000 AND CURRENTTIME>093000)  AND (THOLDCOUNT(\'\')>=1)  THEN BEGIN
FOR I = 1 TO THOLDCOUNT(\'\') DO
BEGIN
HLABEL:= THOLDINDEXLABEL(I,\'\');
B1:=CALLSTOCK(HLABEL,vtCLOSE,6,-1);
B2:=CALLSTOCK(HLABEL,vtCLOSE,6,0);
B3:=CALLSTOCK(HLABEL,vtCLOSE,6,-2);
B4:=CALLSTOCK(HLABEL,vtCLOSE,6,-1);
IF (B2-B1)/B1>0.095 OR (B4-B3)/B3>0.095 THEN CONTINUE;
IF TBUYHOLDINGEX(\'\',HLABEL,0 )>0 THEN BEGIN
TSELL(1,TBUYHOLDINGEX( \'\',HLABEL,0),MKT);
Z:=CURRENTTIME;
T:=DELETEFROMBLOCK(HLABEL,\'交易板块\');
END
END
END
//////////////
该段代码是不是有错误?为何交易板块中的股票会有删不了的股票?

--  作者:wenarm
--  发布时间:2018/4/16 13:34:46
--  
DELETEFROMBLOCK函数删除后,动态显示牌不会自动刷新,属于显示问题,但是实际已经删除了,这个问题在即将发布的4.7版本中会修复。
--  作者:FireScript
--  发布时间:2018/4/16 15:19:29
--  
 
图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看


dt:EXTGBDATA(\'dt\');
if dt<>date then //判断今日是否运行过该程序,运行过则不进行添加品种到版块的操作
begin
EXTGBDATASET(\'dt\',date);
EXTGBDATASET(\'isRun\',0);
end

s:EXTGBDATA(\'isRun\');
//加品种到版块
if s=0 then
begin
for i=1 to THOLDCOUNT(\'\') DO
begin
code:=THOLDINDEXLABEL(i,\'\');//品种代码
num:=TBUYHOLDINGEX(\'\', code,2);//取得今持仓数量
if num>0 then
begin
T:=ADDTOBLOCK(code,\'测试\');
end
end
EXTGBDATASET(\'isRun\',1);
end


//测试品种删除操作
FOR I = 1 TO THOLDCOUNT(\'\') DO
BEGIN
HLABEL:= THOLDINDEXLABEL(I,\'\');
IF TBUYHOLDINGEX(\'\',HLABEL,0 )>0 and HLABEL=\'NMHO05\' THEN BEGIN 
TSELL(1,TBUYHOLDINGEX( \'\',HLABEL,0),MKT);
q:=DELETEFROMBLOCK(HLABEL,\'测试\');
DEBUGOUT(NUMTOSTR(q,1),0);
END
END

上面代码:实现每日添加品种到版块的代码只执行一次,无论何时启动程序化都一样。
你原始代码存在的一个问题是:不断把品种加到版块去了,导致最终结果可能是品种无法删除,其实可能是二次添加造成的。所以其实没必要写多个时间段的添加品种到版块的代码。

上面代码测试的时候 正常删除。你把你原先多个时间段加品种的代码替换成我例子里实现方式再测试下。

--  作者:FF
--  发布时间:2018/4/24 10:16:02
--  
谢谢