[求助]网格模式 (文华财经WH6赢顺V6.7)

投资者咨询:[求助]网格模式 (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-8-28 9:47
 我想尝试一下 用程序化软件 做一个网格模式的交易
假设我主观判断一个价位 ,然后在这个价位基础上 每涨一个价格区间  (假设100) 我就做空一定数量,再涨100 我再做空一定数量, 跌得话就 做多, 然后每次做进去的 头寸 有一定盈利就出来   不知道这样的思路 通过程序化交易能不能实现 。  
技术人员回复
日期:2018-8-28 10:25
 可以的

但网格交易的思路判断比较复杂,需要在WH8上使用算法交易模型来写,比趋势模型编写上难度大一些

而且论坛是不提供完整程序化模型编写的,如果您自己编写能力有限,需要付费成为VIP用户,会有专门的工程师为您编写的
 
 
当前给您一个简单的网格算法编写

GLOBAL_VAR COD; //合约编码
GLOBAL_VAR BKM,SKM; //下单手数
GLOBAL_VAR FLG; //多空委托标识
GLOBAL_VAR NUM; //交易次数统计
GLOBAL_VAR OPEN; //开盘价
GLOBAL_VAR M; //价格差
GLOBAL_VAR NEWP; //最新价
GLOBAL_VAR CST; //服务器时间
GLOBAL_VAR BRP,SRP; //组件多空头可用持仓
GLOBAL_VAR QCFLG; //清仓标志

VOID MAIN()
{
   VLFUN(); //执行变量赋值函数
   OPFUN(); //执行开盘处理函数
}

//----------------------自定义函数--------------------//

VOID VLFUN() //变量赋值函数
{
   COD = "rb1805"; //合约编码
   OPEN = Price(COD,"Open"); //开盘价
   M = 50; //涨跌价格差
   NEWP = Price(COD,"New"); //最新价
   CST = CurrentServerTime(COD); //服务器时间
   BRP = AL_BuyRemainPosition(COD); //组件多头可用持仓
   SRP = AL_SellRemainPosition(COD); //组件空头可用持仓
}

VOID OPFUN() //开盘处理函数
{
   IF(T_IsExchangeOpen(COD) == 1) //如果当前状态为开盘
   {
      IF(FLG == 0)
      {
         IF(NEWP >= OPEN + M) //到达开多仓位
         {
            NUM = NUM + 1;
            BKFUN();
         }
         IF(NEWP <= OPEN - M) //到达开空仓位
         {
            NUM = NUM + 1;
            SKFUN();
         }
      }
      ELSE IF(FLG == 1 && NEWP <= OPEN - M) //如果上次开仓为多仓,且满足空仓条件
      {
         NUM = NUM + 1;
         SKFUN();
      }
      ELSE IF(FLG == 2 && NEWP >= OPEN + M) //如果上次开仓为空仓,且满足多仓条件
      {
         NUM = NUM + 1;
         BKFUN();
      }
   }
   ELSE IF(T_IsExchangeOpen(COD) != 1) //如果当前状态不是开盘
   {
      IF(QCFLG == 1)
      {
         QCFLG = 0;
      } 
   }
}


//-------------------------买开-----------------------//

VOID BKFUN() //买开函数
{
   BKM = NUM;
   MessageOut("【买开委托发出!】");
   T_Deal1(COD,0,0,BKM,LIMIT_ORDER); //以市价发出买开手数的买开委托
   FLG = 1;
}

//-------------------------卖开-----------------------//

VOID SKFUN() //卖开函数
{
   SKM = NUM;
   MessageOut("【卖开委托发出!】");
   T_Deal1(COD,1,0,SKM,LIMIT_ORDER); //以市价发出卖开手数的卖开委托
   FLG = 2;
}

//-------------------------清仓-----------------------//

VOID QCFUN() //买平函数
{
   IF(SRP > 0) //如果有空头可用持仓
   {
      MessageOut("【清仓:买平委托发出!】");
      IF(T_IsSHCode(COD) == 1) //如果当前合约是上海市场合约
      {
         T_Deal1(COD,0,2,SRP,LIMIT_ORDER); //以市价发出空头可用持仓手数的买平今仓委托
      }
      ELSE //如果当前合约不是上海市场合约
      {
         T_Deal1(COD,0,1,SRP,LIMIT_ORDER); //以市价发出空头可用持仓手数的买平委托
      }
   }
   IF(BRP > 0) //如果有多头可用持仓
   {
      MessageOut("【清仓:卖平委托发出!】");
      IF(T_IsSHCode(COD) == 1) //如果当前合约是上海市场合约
      {
         T_Deal1(COD,1,2,BRP,LIMIT_ORDER); //以市价发出多头可用持仓手数的卖平今仓委托
      }
      ELSE //如果当前合约不是上海市场合约
      {
         T_Deal1(COD,1,1,BRP,LIMIT_ORDER); //以市价发出多头可用持仓手数的卖平委托
      }
   }
}