以下是我的仿真测试程序:
======================================
RUNMODE:0;
ZH1:'4100XXXX';
PZ1:'IF09';
//监控持仓和资金状况
当前持仓量多头:=TBUYHOLDINGEX(ZH1,PZ1,1);
当前持仓量空头:=TSELLHOLDINGEX(ZH1,PZ1,1);
当前可用资金:=TACCOUNT(19);
MSGOUT(1,'周期TYPE:'+NUMTOSTR(DATATYPE,0));
MSGOUT(1,'当前持仓量多头'+NUMTOSTR(当前持仓量多头,2));
MSGOUT(1,'当前持仓量空头'+NUMTOSTR(当前持仓量空头,2));
MSGOUT(1,'当前可用资金'+NUMTOSTR(当前可用资金,2));
当前持仓量多头:=TBUYHOLDING(1);
当前持仓量空头:=TSELLHOLDING(1);
MSGOUT(1,'/当前持仓量多头'+NUMTOSTR(当前持仓量多头,2));
MSGOUT(1,'/当前持仓量空头'+NUMTOSTR(当前持仓量空头,2));
T1:=THOLDING;
T2:=THOLDING2;
MSGOUT(1,'-可用持仓量'+NUMTOSTR(T1,2));
MSGOUT(1,'-实际持仓量'+NUMTOSTR(T2,2));
exit;
=====================================================
我持有3手空单,还有三手没有成交的限价平空,见截图
运行程序后得到如下结果:
2013/08/30 16:19:08 周期TYPE:1
2013/08/30 16:19:08 当前持仓量多头0.00
2013/08/30 16:19:08 当前持仓量空头-117.00
2013/08/30 16:19:08 当前可用资金1738349.75
2013/08/30 16:19:08 /当前持仓量多头0.00
2013/08/30 16:19:08 /当前持仓量空头-117.00
2013/08/30 16:19:08 -可用持仓量117.00
2013/08/30 16:19:08 -实际持仓量-3.00
=====================================================
持仓数-117是如何来的?我想收盘平空单,可是用TSELLHOLDINGEX(ZH1,PZ1,1)及TSELLHOLDING(1)都得不到正确的空单数3.
而THOLDING2的结果是多空相抵的数,如果有多单存在就不能作为平空单的手数。
您好,本地返回值很正常啊! 用debugfile或者debugout输出看下
(1).TBUYHOLDINGEX----多头持仓(可用)
(2).THOLDING----当前帐户持可用仓量
(3).THOLDING2----当前帐户实际持仓量
如果楼主手里,有两手后台程序化开的多单
(1).返回值为 2
(2).返回值为 2
(3).返回值为 2
如果楼主手里,有两手后台程序化开的多单,在发出平仓单没成交时
(1).返回值为 0
(2).返回值为 0
(3).返回值为 2
想收盘平单
用TISREMAIN(N)的值是否为1来判断是否有未成交单(1有未成交单),如果有未成交单,用TCANCEL撤掉未成交单,再进行收盘平仓的操作.
如果TISREMAIN(0)=0,则没有未成交单,则收盘平单
tsell(con, TBUYHOLDINGEX(.....),mkt);
tsellshort(con,TSELLHOLDINGEX(.....),mkt);
目前发现在3.0版本里,未成交单的数量TREMAINQTY函数有点问题,您暂时不要使用该函数.
好在,您的这个策略暂时还用不到 未成交单的数量 这个函数.
我的测试程序完整如下,希望能帮测试一下,我测的结果令人失望,IISREMAIN,TCANCEL,TCANCELEX,这几个命令都不管用。
我的程序中间需要用到未成交单的正确数量。
RUNMODE:1;
ZH1:'XXXXXX';
PZ1:'IF09';
SS:=2;
{
//开一个多单
TBUY(1,SS,ZH1,PZ1),SLITHERMETHOD,allowrepeat;
//开一个空单
TBUYSHORT(1,SS,ZH1,PZ1),SLITHERMETHOD,allowrepeat;
//开一个不可能成交的多单
TBUY(1,SS,LMT,2312.8,0,ZH1,PZ1),SLITHERMETHOD,allowrepeat;
//开一个不可能成交的空单--还没有测试--希望能测一下
//平一个不能成交的多单--还没有测试--希望能测一下
//平一个不能成交的空单--还没有测试--希望能测一下
}
{
//TEST1
//开一个多单
TBUY(1,SS,ZH1,PZ1),SLITHERMETHOD,allowrepeat;
//开一个空单
TBUYSHORT(1,SS,ZH1,PZ1),SLITHERMETHOD,allowrepeat;
}
{
TCANCELEX(1,0,ZH1,PZ1);//撤所有未成交单
MSGOUT(1,'撤所有未成交单');
}//撤单失败
{
TCANCEL(1,0);//撤所有未成交单
MSGOUT(1,'撤所有未成交单');
}//经测试撤单失败
{
//开一个不可能成交的多单
TBUY(1,SS,LMT,2312.8,0,ZH1,PZ1),SLITHERMETHOD,allowrepeat;
}
//监控持仓和资金状况
当前持仓量多头:=TBUYHOLDINGEX(ZH1,PZ1,1);
当前持仓量空头:=TSELLHOLDINGEX(ZH1,PZ1,1);
当前可用资金:=TACCOUNT(19);
MSGOUT(1,'周期TYPE:'+NUMTOSTR(DATATYPE,0));
MSGOUT(1,'当前持仓量多头TBUYHOLDINGEX(ZH1,PZ1,1):'+NUMTOSTR(当前持仓量多头,2));
MSGOUT(1,'当前持仓量空头TSELLHOLDINGEX(ZH1,PZ1,1):'+NUMTOSTR(当前持仓量空头,2));
当前持仓量多头:=TBUYHOLDING(1);
当前持仓量空头:=TSELLHOLDING(1);
MSGOUT(1,'/当前持仓量多头TBUYHOLDING(1):'+NUMTOSTR(当前持仓量多头,2));
MSGOUT(1,'/当前持仓量空头TSELLHOLDING(1):'+NUMTOSTR(当前持仓量空头,2));
T1:=THOLDING;
T2:=THOLDING2;
MSGOUT(1,'-可用持仓量THOLDING:'+NUMTOSTR(T1,2));
MSGOUT(1,'-实际持仓量THOLDING2:'+NUMTOSTR(T2,2));
T0:=TISREMAIN(0);
T1:=TISREMAIN(1);
T2:=TISREMAIN(2);
T3:=TISREMAIN(3);
T4:=TISREMAIN(4);
MSGOUT(1,'未成交单所有方向TISREMAIN(0)'+NUMTOSTR(T0,0));
MSGOUT(1,'未成交单开多TISREMAIN(1)'+NUMTOSTR(T1,0));
MSGOUT(1,'未成交单平多TISREMAIN(2)'+NUMTOSTR(T2,0));
MSGOUT(1,'未成交单开空TISREMAIN(3)'+NUMTOSTR(T3,0));
MSGOUT(1,'未成交单平空TISREMAIN(4)'+NUMTOSTR(T4,0));
//经测试不能正确反映未成交单
exit;