
等级: 专业版
- 注册:
- 2022-1-11
- 曾用名:
|
如题:股票池运行检测holding,写入注册文件,后台读取。股票池运行1秒,后台500或1000间隔扫描执行。
出现多开一手现象。请老师帮忙找找原因。
GZ:=(STKNAME='50股指连续')||(STKNAME='300股指连续')||(STKNAME='500股指连续'),NODRAW;//为股指
nGZ:=not(GZ),NODRAW;//非股指
TbuyHT:=TBUYHOLDINGEX('','',0);//今多仓
TbuyHY:=TBUYHOLDINGEX('','',2)-TbuyHT;//老多仓
TSellHT:=TSELLHOLDINGEX('','',0);//今空仓
TSellHY:=TSELLHOLDINGEX('','',2)-TSellHT;//老空仓
{
mswitch0:= STKNAME() & 'ZSBS';
mswitch1:= STKNAME() & 'ZSSS';
mhold0:= STKNAME() & 'ZSBh';
mhold1:= STKNAME() & 'ZSSh';
switch0:EXTGBDATA(mswitch0),NODRAW,COLORWHITE;//获取《某一股票已开多仓数量》
switch1:EXTGBDATA(mswitch1),NODRAW,COLORWHITE;//获取《某一股票已开空仓数量》
hold0:EXTGBDATA(mhold0),NODRAW,COLORWHITE;
hold1:EXTGBDATA(mhold1),NODRAW,COLORWHITE;
Dhd00:hold0-switch0,NODRAW,COLORWHITE;//《某一股票拟平开多仓数量与已有多仓数之差》——开平仓进行与否的开关
Dhd11:hold1-switch1,NODRAW,COLORWHITE;//《某一股票拟平开空仓数量与已有空仓数之差》——开平仓进行与否的开关
}
switch0:=GETINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBS'),NODRAW,COLORWHITE;//获取《某一股票已开多仓数量》
switch1:=GETINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSS'),NODRAW,COLORWHITE;//获取《某一股票已开空仓数量》
hold0:=GETINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBh'),NODRAW,COLORWHITE;
hold1:=GETINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSh'),NODRAW,COLORWHITE;
Dhd00:=hold0-switch0,NODRAW,COLORWHITE;//《某一股票拟平开多仓数量与已有多仓数之差》——开平仓进行与否的开关
Dhd11:=hold1-switch1,NODRAW,COLORWHITE;//《某一股票拟平开空仓数量与已有空仓数之差》——开平仓进行与否的开关
{ IF ISLASTBAR THEN
BEGIN
DEBUGFILE('D:\TEST1.TXT','当前资产为%.2f',1234);
END; }
//------------------------------------------开平仓:Dhd00<>0/Dhd11<>0。新老仓数量不一------------------------------------------
//--------------复位:EXTGBDATASET(mhold0,hold1),老仓标识记录新仓数量。Dhd10=0新老仓数量一致。---------------------
if Dhd00<>0 then BEGIN
//------------------------------------------平多:优先平老仓后/老仓不足则平今仓转为开空仓对锁下单程序-------------------------------------------------
if hold0=0&&switch0>0 then begin//hold0=0获取《某一股票开多仓信号标识》的持仓数量=0——平仓;switch0=0——开关状态为《只可平》状态
if TbuyHY>=abs(Dhd00) then BEGIN//老仓数量>=可平数量————优先平老多仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBS',hold0);
//EXTGBDATASET(mswitch0,hold0);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('平多:======1、老多足够,先平。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','平多:======1、老多足够,先平。',1);
tsell(1,abs(Dhd00),mkt);
GOTO CONTINUELINE;
end
if TbuyHY<abs(Dhd00)&&TbuyHY>0 then BEGIN//老多仓数量<可平数量————优先平老多仓,不足补开空对锁
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBS',hold0);
//EXTGBDATASET(mswitch0,hold0);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('平多:===2、老多不够,先平;开空对锁补足不够。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','平多:===2、老多不够,先平;开空对锁补足不够。',2);
tsell(1,TbuyHY,mkt);//优先平老多仓
if nGZ=1 then tbuyshort(1,abs(Dhd00)-TbuyHY,mkt);//不足补开空对锁
if GZ=1 then tbuyshort(1,abs(Dhd00)-TbuyHY,LMT,CLOSE,0);//不足补开空对锁
GOTO CONTINUELINE;
end
if TbuyHY=0 then BEGIN//没有老多仓————直接开空仓对锁今多仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBS',hold0);
//EXTGBDATASET(mswitch0,hold0);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('平多:===3、没有老多;开空对锁。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','平多:===3、没有老多;开空对锁。',3);
if nGZ=1 then tbuyshort(1,abs(Dhd00),mkt);//不足补开空对锁
if GZ=1 then tbuyshort(1,abs(Dhd00),LMT,CLOSE,0);//不足补开空对锁
GOTO CONTINUELINE;
end
end
//------------------------------------------开多:优先平老空仓对锁下单程序/老空仓不足则开多仓-------------------------------------------------
if hold0>0 then begin//hold0=1获取《某一股票开多仓信号标识》的持仓数量=1——开仓;switch0=0——开关状态为《只可开》状态
if TSellHY>=abs(Dhd00) then BEGIN//老空仓数量>=可平数量————优先平老空仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBS',hold0);
//EXTGBDATASET(mswitch0,hold0);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('开多:======1、老空足够,先平。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','开多:======1、老空足够,先平。',4);
tsellshort(1,abs(Dhd00),mkt);
GOTO CONTINUELINE;
end
if TSellHY<abs(Dhd00)&&TSellHY>0 then BEGIN//老空仓数量<可平数量————优先平老空仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBS',hold0);
//EXTGBDATASET(mswitch0,hold0);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('开多:===2、老空不够,先平;开多补足。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','开多:===2、老空不够,先平;开多补足。',5);
tsellshort(1,TSellHY,mkt);//优先平老空仓
if nGZ=1 then tbuy(1,abs(Dhd00)-TSellHY,mkt);//不足补开多
if GZ=1 then tbuy(1,abs(Dhd00)-TSellHY,LMT,CLOSE,0);//不足补开多
GOTO CONTINUELINE;
end
if TSellHY=0 then BEGIN//没有老空仓————直接开多仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSBS',hold0);
//EXTGBDATASET(mswitch0,hold0);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('开多:===3、没有老空,直接开多。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','开多:===3、没有老空,直接开多。',6);
if nGZ=1 then tbuy(1,abs(Dhd00),mkt);//不足补开多
if GZ=1 then tbuy(1,abs(Dhd00),LMT,CLOSE,0);//不足补开多
GOTO CONTINUELINE;
end
end
END
if Dhd11<>0 then BEGIN
//------------------------------------------平空:优先平老空仓后/老空仓不足则平今空仓转为开多仓对锁下单程序-------------------------------------------------
if hold1=0&&switch1<0 then begin//hold0=0获取《某一股票开空仓信号标识》的持仓数量=0——平仓;switch0=0——开关状态为《只可平》状态
if TSellHY>=abs(Dhd11) then BEGIN//老空仓数量>=可平数量————优先平老空仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSS',hold1);
//EXTGBDATASET(mswitch1,hold1);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('平空:======1、老空足够,先平。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','平空:======1、老空足够,先平。',7);
tsellshort(1,abs(Dhd11),mkt);
GOTO CONTINUELINE;
end
if TSellHY<abs(Dhd11)&&TSellHY>0 then BEGIN//老空仓数量<可平数量————优先平老空仓,不足补开多对锁
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSS',hold1);
//EXTGBDATASET(mswitch1,hold1);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('平空:===2、老空不够,先平;开多补足。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','平空:===2、老空不够,先平;开多补足。',8);
tsellshort(1,TSellHY,mkt);//优先平老空仓
if nGZ=1 then tbuy(1,abs(Dhd11)-TSellHY,mkt);//不足补开多对锁
if GZ=1 then tbuy(1,abs(Dhd11)-TSellHY,LMT,CLOSE,0);//不足补开多对锁
GOTO CONTINUELINE;
end
if TSellHY=0 then BEGIN//没有老空仓————直接开多仓对锁今空仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSS',hold1);
//EXTGBDATASET(mswitch1,hold1);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('平空:===3、没有老空,直接开多。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','平空:===3、没有老空,直接开多。',9);
if nGZ=1 then tbuy(1,abs(Dhd11),mkt);//不足补开多对锁
if GZ=1 then tbuy(1,abs(Dhd11),LMT,CLOSE,0);//不足补开多对锁
GOTO CONTINUELINE;
end
end
//------------------------------------------开空:优先平老多仓对锁下单程序/老多仓不足则开空仓-------------------------------------------------
if hold1<0 then begin//hold0=1获取《某一股票开空仓信号标识》的持仓数量=1——开仓;switch0=0——开关状态为《只可开》状态
if TbuyHY>=abs(Dhd11) then BEGIN//老多仓数量>=可平数量————优先平老多仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSS',hold1);
//EXTGBDATASET(mswitch1,hold1);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('开空:===1、老多足够,先平。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','开空:===1、老多足够,先平。',10);
tsell(1,abs(Dhd11),mkt);
GOTO CONTINUELINE;
end
if TbuyHY<abs(Dhd11)&&TbuyHY>0 then BEGIN//老多仓数量<可平数量————优先平老多仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSS',hold1);
//EXTGBDATASET(mswitch1,hold1);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('开空:===2、老多不够,先平;开空补足不够。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','开空:===2、老多不够,先平;开空补足不够。',11);
tsell(1,TbuyHY,mkt);//优先平老多仓
if nGZ=1 then tbuyshort(1,abs(Dhd11)-TbuyHY,mkt);//不足补开空
if GZ=1 then tbuyshort(1,abs(Dhd11)-TbuyHY,LMT,CLOSE,0);//不足补开空
GOTO CONTINUELINE;
end
if TbuyHY=0 then BEGIN//没有老多仓————直接开空仓
WRITEINIFILE('C:\MCNINFILE.INI',STKNAME,'ZSSS',hold1);
//EXTGBDATASET(mswitch1,hold1);//--------------复位:EXTGBDATASET(mhold0,hold1)
SENDPHONEMSG('开空:===3、没有老多;直接开空。价格'&NUMTOSTR(CLOSE,2),1);
//DEBUGFILE('C:\TEST\TEST3.TXT','开空:===3、没有老多;直接开空。',12);
if nGZ=1 then tbuyshort(1,abs(Dhd11),mkt);//不足补开空
if GZ=1 then tbuyshort(1,abs(Dhd11),LMT,CLOSE,0);//不足补开空
GOTO CONTINUELINE;
end
end
end
CONTINUELINE@ HD:1,COLORYELLOW,LINETHICK0;
|
|