请教老师,关于算法模型信号不执行的问题。 (文华财经WH8赢智V8.2)

投资者咨询:请教老师,关于算法模型信号不执行的问题。 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-7-20 11:46
 

VAR_TICKDATA data;
VAR N,N1,BPRICE,Lost,Win,CurTime;
GLOBAL_VAR High,BKID,New,Type,Typp,CONQC;
VAR CodeName;
VOID MAIN()

   CodeName = "ni1809";
   N = 2; // 下单手数
   N1 = 2; //当合约价格上涨2个最小变动价位
   Lost = 3; //止损3个最小变动价位
   Win = 10; //止盈10个最小变动价位
   New = Price(CodeName, "New"); //获取当前合约最新价
   BPRICE=T_BuyAvgPrice(CodeName);//取得持仓栏中该合约多头持仓均价
   data = Def_TickData(CodeName,1,4); // 保存最近四笔的tick数据
   CurTime = CurrentTime(); // 获取当前时间
   // 收盘前30秒清仓
   CONQC = (Hour( CurTime ) == 14 && Minute( CurTime ) == 59) || ( Hour( CurTime ) == 10 && Minute( CurTime ) == 14 ) || ( Hour( CurTime ) == 11 && Minute( CurTime ) == 29 ) && Second( CurTime ) > 30 ;
   IF( Typp == 0&&(CONQC == 1))
   {
   MessageOut("收盘前30秒清仓");
   T_Deal(CodeName,1,1,T_BuyRemainPosition( CodeName ),Offers(CodeName,"bid1"));
   Type = 0;
      Typp = 1;
   }

   IF( data.State == 1 ) // 数据保存完成
   {
   //连续3次当笔TICK的买一价都大于上一笔TICK的买一价,并且最新一笔的成交量大于上一笔TICK的成交量,对价做多
   IF( Type == 0 && data[0].Bid1 < data[1].Bid1 && data[1].Bid1 < data[2].Bid1 && data[2].Bid1 < data[3].Bid1 && CONQC != 1)
   {
   IF( data[2].TickVolum - data[1].TickVolum < data[3].TickVolum - data[2].TickVolum )
   {
   MessageOut("连续3次当笔TICK的买一价都大于上一笔TICK的买一价");
   BKID = T_Deal(CodeName,0,0,N,Offers(CodeName,"ask1"));
   Type = 1;
            Typp = 0;
   }
   }
   //当合约价格上涨2个最小变动价位,加仓1手
   IF(Type == 1 && T_OrderState(BKID) == 1 && CONQC != 1 )
   {
   MessageOut("当合约价格上涨2个最小变动价位,加仓1手");
   IF( New - T_OrderMatchAvPrice(BKID) > N1 * MinPrice(CodeName) )
   {
   BKID = T_Deal(CodeName,0,0,1,Offers(CodeName,"ask1"));
   Type = 2;
            Typp = 0;
   }
   }
   IF( Type == 2 && T_OrderState(BKID) == 1 )
   {
   Type = 1;
   }
   PingCang();
   SPDeal();
   High = Price(CodeName, "High");
   }
}
//止盈10个最小变动价位
//止损3个最小变动价位
VOID SPDeal()
{
   IF( BPRICE - New >= Lost*MinPrice(CodeName) || New - BPRICE >= Win*MinPrice(CodeName))
   {
   IF( Type != 0 && T_BuyRemainPosition( CodeName ) > 0 )
   {
   MessageOut("止盈止损");
   T_Deal(CodeName,1,1,T_BuyRemainPosition( CodeName ),Offers(CodeName,"bid1"));
   Type = 0;
   }
   }
}
//当持仓手数超过了5手,并且最新价格超过了今天的最高价,对价平仓
VOID PingCang()
{
   IF( Type != 0 && T_BuyRemainPosition( CodeName ) > 5 && New > High ) // 该组件多头持仓超过5手
   {
   MessageOut("当持仓手数超过了5手,并且最新价格超过了今天的最高价,对价平仓");
   T_Deal(CodeName,1,1,T_BuyRemainPosition( CodeName ),Offers(CodeName,"bid1"));
   Type = 0;
   }
}

 

这是系统自带的模型,我想问为什么这个模型只建立仓位,而止损条件达成后,也就是说亏损3个点后,并不执行止损呢?而且每次建仓并不按照模型设定的两手,加仓一手,而是5手5手的加仓。请老师麻烦指导一下,谢谢!

 
技术人员回复
日期:2018-7-20 13:30
 稍后 
技术人员回复
日期:2018-7-20 13:35
 因为您测试的是上期所合约,平仓区分今老仓,模型中没有写,导致平不掉,如下改下,您在运行试试

VAR_TICKDATA data;
VAR N,N1,BPRICE,Lost,Win,CurTime;
GLOBAL_VAR High,BKID,New,Type,Typp,CONQC;
VAR CodeName;
GLOBAL_VAR SH;
VOID MAIN()
{  
   CodeName = "ni1809";
   N = 2; // 下单手数
   N1 = 2; //当合约价格上涨2个最小变动价位
   Lost = 3; //止损3个最小变动价位
   Win = 10; //止盈10个最小变动价位
   New = Price(CodeName, "New"); //获取当前合约最新价
   BPRICE=T_BuyAvgPrice(CodeName);//取得持仓栏中该合约多头持仓均价
   data = Def_TickData(CodeName,1,4); // 保存最近四笔的tick数据
   CurTime = CurrentTime(); // 获取当前时间
 IF(T_IsSHCode(CodeName) == 1) //如果当前合约是上海市场合约
   {
      SH = 2; //平仓参数设为2
   }
   ELSE //如果当前合约不是上海市场合约
   {
      SH = 1; //平仓参数设为1
}
   // 收盘前30秒清仓
   CONQC = (Hour( CurTime ) == 14 && Minute( CurTime ) == 59) || ( Hour( CurTime ) == 10 && Minute( CurTime ) == 14 ) || ( Hour( CurTime ) == 11 && Minute( CurTime ) == 29 ) && Second( CurTime ) > 30 ;
   IF( Typp == 0&&(CONQC == 1))
   {
   MessageOut("收盘前30秒清仓");
   T_Deal(CodeName,1,SH,T_BuyRemainPosition( CodeName ),Offers(CodeName,"bid1")); 
   Type = 0;
      Typp = 1;
   }
   IF( data.State == 1 ) // 数据保存完成
   {
   //连续3次当笔TICK的买一价都大于上一笔TICK的买一价,并且最新一笔的成交量大于上一笔TICK的成交量,对价做多
   IF( Type == 0 && data[0].Bid1 < data[1].Bid1 && data[1].Bid1 < data[2].Bid1 && data[2].Bid1 < data[3].Bid1 && CONQC != 1)
   {
   IF( data[2].TickVolum - data[1].TickVolum < data[3].TickVolum - data[2].TickVolum )
   {
   MessageOut("连续3次当笔TICK的买一价都大于上一笔TICK的买一价");
   BKID = T_Deal(CodeName,0,0,N,Offers(CodeName,"ask1")); 
   Type = 1;
            Typp = 0;
   }
   }
   //当合约价格上涨2个最小变动价位,加仓1手
   IF(Type == 1 && T_OrderState(BKID) == 1 && CONQC != 1 )
   {
   MessageOut("当合约价格上涨2个最小变动价位,加仓1手");
   IF( New - T_OrderMatchAvPrice(BKID) > N1 * MinPrice(CodeName) )
   {
   BKID = T_Deal(CodeName,0,0,1,Offers(CodeName,"ask1")); 
   Type = 2;
            Typp = 0;
   }
   }
   IF( Type == 2 && T_OrderState(BKID) == 1 )
   {
   Type = 1;
   }
   PingCang();
   SPDeal();
   High = Price(CodeName, "High");
   }
}
//止盈10个最小变动价位
//止损3个最小变动价位
VOID SPDeal()
{
   IF( BPRICE - New >= Lost*MinPrice(CodeName) || New - BPRICE >= Win*MinPrice(CodeName))
   {
   IF( Type != 0 && T_BuyRemainPosition( CodeName ) > 0 )
   {
   MessageOut("止盈止损");
   T_Deal(CodeName,1,SH,T_BuyRemainPosition( CodeName ),Offers(CodeName,"bid1")); 
   Type = 0;
   }
   }
}
//当持仓手数超过了5手,并且最新价格超过了今天的最高价,对价平仓
VOID PingCang()
{
   IF( Type != 0 && T_BuyRemainPosition( CodeName ) > 5 && New > High ) // 该组件多头持仓超过5手
   {
   MessageOut("当持仓手数超过了5手,并且最新价格超过了今天的最高价,对价平仓");
   T_Deal(CodeName,1,SH,T_BuyRemainPosition( CodeName ),Offers(CodeName,"bid1")); 
   Type = 0;
   }
}