投资者咨询:算法交易分批下单问题 (文华财经WH8赢智V8.2)
来源:文华财经 日期:2019-4-8 11:11
参考文华的分批下单模板,进行了修改,发现会出现问题
请问该怎么修改?
GLOBAL_VAR MOD; //模组名称
GLOBAL_VAR COD; //合约编码
GLOBAL_VAR T; //时间间隔
GLOBAL_VAR KN; //每次开仓手数
GLOBAL_VAR NOW; //当前时间
GLOBAL_VAR NUMB; //查询单次成交数量
GLOBAL_VAR MAXORDER;//阈值:对多可发委托手数/信号手数
GLOBAL_VAR BKID; //开平仓委托
GLOBAL_VAR BKSIGV; //信号手数
GLOBAL_VAR BCFLG; //多头处理标志
GLOBAL_VAR BKFLG; //开平仓标志
GLOBAL_VAR BKM; //单次买开委托手数
GLOBAL_VAR BKT; //买开委托时间
GLOBAL_VAR BKN; //已发出买开委托总手数
GLOBAL_VAR BKCN; //开仓成交总手数
VOID MAIN()
{
VLFUN(); //执行变量赋值函数
OPFUN(); //执行开盘处理函数
}
//----------------------自定义函数--------------------//
VOID VLFUN() //变量赋值函数
{
MOD = "TEST"; //模组名称
COD = MOD.F_DealCode(); //合约编码
T = 1; //开仓时间间隔
KN = 3; //每次开仓手数
MAXORDER = 1.3;//阈值设为1.3
NOW = CurrentTime(); //当前时间
}
VOID OPFUN() //开盘处理函数
{
IF(T_IsExchangeOpen(COD) == 1) //如果当前状态是开盘
{
KPCCHK(); //执行成交判断函数
SIGFUN(); //执行信号处理函数
}
}
VOID KPCCHK() //成交判断函数
{
BKCHK(); //执行买开成交判断函数
BKCHK2(); //执行多头平仓成交判断函数
SKCHK(); //执行卖开成交判断函数
SKCHK2(); //执行空头平仓成交判断函数
}
VOID SIGFUN() //信号处理函数
{
IF(MOD.F_FreshSig() == 1) //如果当前信号是未处理过的新信号
{
IF(MOD.F_SigValid() == 1) //如果当前信号未消失
{
IF(MOD.F_Sig() == BK) //如果信号类型为BK
{
MessageOut("【BK信号!】");
IF(BCFLG == 0) //如果未开启做多处理
{
BKSIGV = MOD.F_SigVol(); //信号手数
MessageOut("【BK信号:信号手数" + BKSIGV + "手!】");
BCFLG = 1; //开启做多处理
}
}
}
//-------------------------买开-----------------------//
VOID BKFUN() //买开函数
{
IF(BKFLG == 0 && BKN < BKSIGV * MAXORDER) //如果没有买开委托。发出委托不超过1.3倍的信号数量,防止程序出错
{
IF(BKN == 0 || (BKN > 0 && NOW - BKT >= T)) //如果是首次委托,或非首次委托且时间间隔T秒
{
IF(BKCN < BKSIGV && BKCN + KN < BKSIGV) //如果成交手数小于信号手数,且不是最后一批
{
BKM = KN; //买开委托手数
}
IF(BKCN < BKSIGV && BKCN + KN >= BKSIGV) //最后一批委托
{
BKM = BKSIGV - BKCN; // 剩余委托数量
}
MessageOut("【BK信号:买开委托发出:" + BKM + "手!】");
BKID = T_Deal1(COD,0,0,BKM,ACTIVE_ORDER); //以对价发出买开委托手数的买开委托
BKN = BKN + BKM; //已发出委托数量
BKT = NOW; //买开委托时间
BKFLG = 1; //买开委托标志
}
}
}
VOID BKCHK() //买开成交判断函数
{
IF(BKFLG > 0) //如果有买开委托
{
IF(T_OrderState(BKID) == 0 || T_OrderState(BKID) == 1 || T_OrderState(BKID) == 3) //如果买开委托未成交,成交或者部分成交
{
IF(T_OrderState(BKID) == 0 || T_OrderState(BKID) == 3) //如果未成交或者部分成交
{
T_DeleteOrder(BKID); //发出撤单命令
}
NUMB = T_OrderMatchVol(BKID); //成交数量
BKCN = BKCN + NUMB;
MessageOut("【BK信号:买开委托成交:" + BKCN + "手!】");
NUMB =0 ;
BKFLG = 0; //买开标志归0
IF(BKCN >= BKSIGV) //如果是最后一批买开委托
{
MessageOut("【BK信号:买开委托成交完成!】");
BKN = 0; //已发买开委托数量归0
BKCN = 0;//买开已成交数量归0
BCFLG = 0; //多头处理标志归0
}
}
IF(T_OrderState(BKID) == 2 || T_OrderState(BKID) == 7 || T_OrderState(BKID) == 14 || BKN >= BKSIGV * MAXORDER) //出现错误的处理
{
MessageOut("【BK信号:委托出错】");
NUMB =0 ;
BKFLG = 0; //买开标志归0
BKN = 0; //已发买开委托数量归0
BKCN = 0;//买开已成交数量归0
BCFLG = 0; //多头处理标志归0
}
}
}
技术人员回复
日期:2019-4-8 11:34
投资者咨询:算法交易分批下单问题 (文华财经WH8赢智V8.2)
来源:文华财经 日期:2019-4-8 11:11
投资者咨询:算法交易分批下单问题 (文华财经WH8赢智V8.2)
来源:文华财经 日期:2019-4-8 11:11
在第12笔那个地方,撤单委托发出了,但是最后又成交了,但是程序并不知道成交了