套利品种1:'M01';
套利品种2:'M05';
账户:'629795'; //账号自行定义下
JC:dynainfo2(7,套利品种1)-dynainfo2(7,套利品种2);//最新价差
DEBUGFILE('c:\record.txt','套利空品种1='+套利品种1,0);
DEBUGFILE('c:\record.txt','套利多品种2='+套利品种2,0);
DEBUGFILE('c:\record.txt','价差=%.2f',jc);
//////////////////////////////////////////////////////////////////////
//a:STKINDI('M00','单位乘数.a',0,6);//单位乘数引用
a:DYNAINFO2(209 , 'M00');//单位乘数引用
//监控持仓和资金状况
KC:=TSELLHOLDINGEX(账户,套利品种1,1);//当前持仓量空头
DC:=TBUYHOLDINGEX(账户,套利品种2,1);//当前持仓量多头
当前可用资金:=TACCOUNT(19);
ZJ:当前可用资金>dynainfo2(7,套利品种1)*a;
DEBUGFILE('c:\record.txt','单位乘数=%.2f',a);
DEBUGFILE('c:\record.txt','空头持仓=%.2f',kc);
DEBUGFILE('c:\record.txt','多头持仓=%.2f',dc);
DEBUGFILE('c:\record.txt','当前可用资金=%.2f',当前可用资金);
DEBUGFILE('c:\record.txt','资金是否够用=%.2f',ZJ);
b:DYNAINFO2(208 , 'M00');
kctj:JC >SX ;
kctjq: KC=0 AND DC=0 and zj=1;
DEBUGFILE('c:\record.txt','kctj=%.2f',kctj);
DEBUGFILE('c:\record.txt','kctjq=%.2f',kctjq);
/////////////////////////////////////////////////////////////////////
if JC>SX and KC=0 AND DC=0 and zj=1 then //价差大于上限值时
begin
TBUYSHORT(1,SS,MKT ,0,0,账户,套利品种1);
TBUY(1,SS,MKT ,0,0,账户,套利品种2);
end
if JC<XX AND KC=SS AND DC=SS then //价差小于下限值时
begin
TsellSHORT(1,SS,MKT ,0,0,账户,套利品种1);
Tsell(1,SS,MKT ,0,0,账户,套利品种2);
end
输出结果:
2019-09-23 14:59:56.852 套利空品种1=M01
2019-09-23 14:59:56.852 套利多品种2=M05
2019-09-23 14:59:56.852 价差=103.00
2019-09-23 14:59:56.852 单位乘数=10.00
2019-09-23 14:59:56.852 空头持仓=0.00
2019-09-23 14:59:56.852 多头持仓=0.00
2019-09-23 14:59:56.852 当前可用资金=11188641.98
2019-09-23 14:59:56.852 资金是否够用=1.00
2019-09-23 14:59:56.852 kctj=1.00
2019-09-23 14:59:56.852 kctjq=1.00
问题:我是后台监控的,同时监控了豆粕2001和豆粕2005两个品种,在开程序前补充了K线数据,也开好了账户;
1,为什么这个开仓条件都成立的情况下,账户并没有开仓?
2,因为我这规定是双向只开SS=5手,之前出现过连续开两次5手的情况,这种情况是不是因为委托和成交的间隙,再次进行了委托造成的?