帮我修改一下组件 (文华财经WH8赢智V8.2)

投资者咨询:帮我修改一下组件 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-7 22:31

【策略】
模组信号:BK、SK。//增加SP BP的信号获取
委托价格:市价委托。
锁仓条件:1.浮盈大于10个点后,回落到开仓价格。//清除 1.浮盈大于10个点后,回落到开仓价格
          2.浮亏大于等于10点。
止盈条件:1.浮盈大于100个点,回落到50个点。//清除回落到50个点
          2.浮盈大于10000。
清仓时间:14:58分及23:58分清仓

 

 

投资者咨询:帮我修改一下组件 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-7 22:31
 修改红色字体部分
技术人员回复
日期:2018-8-8 8:12
参考


/*【策略】
模组信号:BK、SK。//增加SP BP的信号获取
委托价格:市价委托。
锁仓条件:1.浮盈大于10个点后,回落到开仓价格。//清除 1.浮盈大于10个点后,回落到开仓价格
          2.浮亏大于等于10点。
止盈条件:1.浮盈大于100个点,回落到50个点。//清除回落到50个点
          2.浮盈大于10000。
清仓时间:14:58分及23:58分清仓*/

GLOBAL_VAR MOD; //模组名称
GLOBAL_VAR COD; //合约编码
GLOBAL_VAR N; //委托手数
GLOBAL_VAR SH; //平仓参数
GLOBAL_VAR ZYP; //止盈金额
GLOBAL_VAR MINP; //最小变动价位
GLOBAL_VAR QCT1,QCT2; //清仓时间
GLOBAL_VAR CLT1,CLT2; //收盘时间
GLOBAL_VAR SCTM; //锁仓高点价位倍数
GLOBAL_VAR ZYTM; //止盈高点价位倍数
GLOBAL_VAR ZYBM; //止盈低点价位倍数
GLOBAL_VAR NEWP; //最新价
GLOBAL_VAR NOW; //当前时间
GLOBAL_VAR CST; //服务器时间
GLOBAL_VAR BPF,SPF; //多空头盈亏
GLOBAL_VAR BRP,SRP; //多空头可用持仓
GLOBAL_VAR BKAP,SKAP; //开仓委托均价
GLOBAL_VAR QCFLG; //清仓处理标志
GLOBAL_VAR SCFLG; //锁仓处理标志
GLOBAL_VAR ZYFLG; //止盈处理标志
GLOBAL_VAR HSFLG; //回落锁仓处理标志
GLOBAL_VAR HZFLG; //回落止盈处理标志
GLOBAL_VAR BKID,SKID,SPID,BPID; //开平仓委托
GLOBAL_VAR BKFLG,SKFLG,SPFLG,BPFLG; //开平仓标志
GLOBAL_VAR BKDEL,SKDEL,SPDEL,BPDEL; //开平仓撤单标志
VOID MAIN() //主函数
{
   VLFUN(); //执行变量赋值函数
   OPFUN(); //执行开盘处理函数
}
//----------------------自定义函数--------------------//
VOID VLFUN() //变量赋值函数
{
   MOD = "GDJMX1"; //模组名称
   COD = MOD.F_DealCode(); //合约编码
   N = 1; //下单手数
   ZYP = 800; //止盈金额浮盈600
   SCTM = 10; //锁仓高点10价位倍数
   ZYTM = 20; //浮盈大于20个点,回落到10个点
   ZYBM = 10; //止盈低点价位倍数回落到10个点
   MINP = MinPrice(COD); //最小变动价位
   NEWP = Price(COD,"New"); //最新价
   QCT1 = Time("14:58:00"); //白盘清仓时间
   CLT1 = Time("15:00:00"); //白盘收盘时间
   QCT2 = Time("23:58:00"); //夜盘清仓时间
   CLT2 = Time("01:00:00"); //夜盘收盘时间 
   CST = CurrentServerTime(COD); //服务器时间
   BRP = AL_BuyRemainPosition(COD); //多头可用持仓
   SRP = AL_SellRemainPosition(COD); //空头可用持仓
   BPF = AL_BuyProfitLoss(COD); //多头盈亏
   SPF = AL_SellProfitLoss(COD); //空头盈亏
   IF(T_IsSHCode(COD) == 1) //如果当前合约是上海市场合约
   {
      SH = 2; //平仓参数设为2
   }
   ELSE //如果当前合约不是上海市场合约
   {
      SH = 1; //平仓参数设为1
   }
}
VOID OPFUN() //开盘处理函数
{
   IF(T_IsExchangeOpen(COD) == 1) //如果当前状态是开盘
   {
      KPCCHK(); //执行成交判断函数
      IF((CST >= QCT1 && CST < CLT1) || (CST >= QCT2 || CST < CLT2)) //如果是清仓时间
      {
         QCNFUN(); //执行清仓处理函数
      }
      ELSE //如果不是清仓时间
      {
         IF(QCFLG > 0) //如果已处理清仓
         {
            QCFLG = 0; //清仓标志归0
         }
         SIGFUN(); //执行信号处理函数
         ZYPFUN(); //执行止损处理函数
         SCNFUN(); //执行锁仓处理函数
      }
   }
}
VOID KPCCHK() //成交判断函数
{
   BKCHK(); //执行买开成交判断函数
   SPCHK(); //执行卖平成交判断函数
   SKCHK(); //执行卖开成交判断函数
   BPCHK(); //执行买平成交判断函数
}
VOID SIGFUN() //信号处理函数
{
   IF(MOD.F_FreshSig() == 1) //如果当前信号是未处理过的新信号
   {
      IF(MOD.F_SigValid() == 1) //如果当前信号未消失
      {
         IF(MOD.F_Sig() == BK) //如果信号类型为BK
         {
            MessageOut("【BK信号!】");
            BKFUN(); //执行买开函数
         }
         IF(MOD.F_Sig() == SK) //如果信号类型为SK
         {
            MessageOut("【SK信号!】");
            SKFUN(); //执行卖开函数
         }
      }
   }
}
VOID SCNFUN() //锁仓处理函数
{
   IF(SCFLG == 0) //如果未处理锁仓
   {
      IF(BKFLG == 2) //如果有买开委托
      {
         BKAP = T_OrderMatchAvPrice(BKID); //买开委托成交均价
         IF(SKFLG == 0) //如果未发出卖开锁仓委托
         {
            IF(NEWP >= BKAP + SCTM * MINP) //如果最新价格大于买开均价加止盈点位
            {
               HSFLG = 1; //开启回落锁仓处理
            }
            IF( NEWP <= BKAP - SCTM * MINP) //如果满足多头锁仓条件
            {
               MessageOut("【多头锁仓:卖开委托发出!】");
               SKID = T_Deal1(COD,1,SH,BRP,LIMIT_ORDER); //以市价出多头可用持仓手数的卖开委托
               SKFLG = 3; //已发出多头锁仓卖开委托
               HSFLG = 0; //回落锁仓处理标志归0
               SCFLG = 1; //已处理多头锁仓
            }
         }
      }
      ELSE IF(SKFLG == 2) //如果有卖开委托
      {
         SKAP = T_OrderMatchAvPrice(SKID); //卖开委托成交均价
         IF(BKFLG == 0) //如果未发出买开锁仓委托
         {
            IF(NEWP <= SKAP - SCTM * MINP) //如果最新价格小于买开均价减止盈点位
            {
               HSFLG = 1; //开启回落锁仓处理
            }
            IF( NEWP >= SKAP + SCTM * MINP) //如果满足空头锁仓条件
            {
               MessageOut("【空头锁仓:买开委托发出!】");      
               BKID = T_Deal1(COD,0,0,SRP,LIMIT_ORDER); //以市价出空头可用持仓手数的买开委托
               BKFLG = 3; //已发出空头锁仓买开委托
               HSFLG = 0; //回落锁仓处理标志归0
               SCFLG = 1; //已处理空头锁仓
            }
         }
      }
   }
}
VOID ZYPFUN() //止盈处理函数
{
   IF(SCFLG == 0) //如果未处理锁仓
   {
      IF(ZYFLG == 0) //如果未处理止盈
      {
         IF(BKFLG == 2) //如果买开委托已成交
         {
            BKAP = T_OrderMatchAvPrice(BKID); //买开委托成交均价
            IF(NEWP >= BKAP + ZYTM * MINP) //如果最新价达到多头止盈价位
            {
               SPFUN(); //执行卖平函数
            }
            IF( BPF >= ZYP) //如果满足多头止盈条件
            {
               SPFUN(); //执行卖平函数
            }
         }
         ELSE IF(SKFLG == 2) //如果卖开委托已成交
         {
            SKAP = T_OrderMatchAvPrice(SKID); //买开委托成交均价
            IF(NEWP <= SKAP - ZYTM * MINP) //如果最新价达到空头止盈价位
            {
                BPFUN(); //执行买平函数
            }
            IF( SPF >= ZYP) //如果满足空头止盈条件
            {
               BPFUN(); //执行买平函数
            }
         }
      }
   }
}
VOID QCNFUN() //清仓处理函数
{
   IF(QCFLG == 0) //如果为进行清仓处理
   {
      MessageOut("【尾盘清仓:清仓处理开始!】");
      IF(BKFLG == 1 || BKFLG == 3) //如果有买开委托
      {
         IF(BKDEL == 0) //如果未撤单
         {
            IF(T_OrderState(BKID) == 0 || T_OrderState(BKID) == 3) //如果买开委托未全部成交
            {
               MessageOut("【清仓撤单:买开委托撤单!】");
               T_DeleteOrder(BKID); //撤掉买开委托挂单
               BKDEL = 1; //清仓撤掉买开委托
            }
            ELSE //如果买开委托未挂单
            {
               BKDEL = 2; //清仓撤掉买开委托
            }
         }
      }
      ELSE IF(BKFLG == 2 || BKFLG == 4) //如果买开委托已成交
      {
         BKFLG = 0; //买开标志归0
      }
      IF(SKFLG == 1 || SKFLG == 3) //如果有卖开委托
      {
         IF(SKDEL == 0) //如果未撤单
         {
            IF(T_OrderState(SKID) == 0 || T_OrderState(SKID) == 3) //如果卖开委托未全部成交
            {
               MessageOut("【清仓撤单:卖开委托撤单!】");
               T_DeleteOrder(SKID); //撤掉卖开委托挂单
               SKDEL = 1; //清仓撤掉卖开委托挂单
            }
            ELSE //如果卖开委托未挂单
            {
               SKDEL = 2; //清仓撤掉卖开委托挂单
            }
         }
      }
      ELSE IF(SKFLG == 2 || SKFLG == 4) //如果卖开委托已成交
      {
         SKFLG = 0; //买开标志归0
      }
      IF(SPFLG == 1) //如果有卖平委托
      {
         IF(SPDEL == 0) //如果未撤单
         {
            IF(T_OrderState(SPID) == 0 || T_OrderState(SPID) == 3) //如果卖平委托未全部成交
            {
               MessageOut("【清仓撤单:卖平委托撤单!】");
               T_DeleteOrder(SPID); //撤掉卖平委托挂单
               SPDEL = 1; //清仓撤掉卖平委托挂单
            }
            ELSE //如果卖平委托未挂单
            {
               SPDEL = 2; //清仓撤掉卖平委托挂单
            }
         }
      }
      IF(BPFLG == 1) //如果有买平委托
      {
         IF(BPDEL == 0) //如果未撤单
         {
            IF(T_OrderState(BPID) == 0 || T_OrderState(BPID) == 3) //如果买平委托未全部成交
            {
               MessageOut("【清仓撤单:买平委托撤单!】");
               T_DeleteOrder(BPID); //撤掉买平委托挂单
               BPDEL = 1; //清仓撤掉买平委托挂单
            }
            ELSE //如果买平委托未挂单
            {
               BPDEL = 2; //清仓撤掉买平委托挂单
            }
         }
      }
      QCFLG = 1; //已发出清仓撤单
   }
   IF(QCFLG == 1) //如果已发出清仓撤单
   {
      IF(BKFLG == 0 && SKFLG == 0 && BPFLG == 0 && SPFLG == 0) //如果没有开平仓委托 
      {
         IF(BRP > 0) //如果有多头可用持仓
         {
            MessageOut("【清仓平多:卖平委托发出!】");
            SPID = T_Deal1(COD,1,SH,BRP,LIMIT_ORDER); //以市价发出多头可用持仓手数的卖平委托
            SPFLG = 2; //已发出清仓卖平委托
         }
         IF(SRP > 0) //如果有空头可用持仓
         {
            MessageOut("【清仓平空:买平委托发出!】");
            BPID = T_Deal1(COD,0,SH,SRP,LIMIT_ORDER); //以市价发出空头可用持仓手数的买平委托
            BPFLG = 2; //已发出清仓买平委托
         }
         QCFLG = 2; //已发出清仓平仓
      }
   }
   IF(QCFLG == 2) //如果已发出清仓平仓
   {
      IF(BPFLG == 0 && SPFLG == 0) //如果没有平仓委托 
      {
         MessageOut("【尾盘清仓:清仓处理完成!】");
         SCFLG = 0; //锁仓处理标志归0
         ZYFLG = 0; //止盈处理标志归0
         QCFLG = 3; //清仓处理完成
      }
   }
}
//-------------------------买开-----------------------//
VOID BKFUN() //买开函数
{
   IF(BKFLG == 0) //如果没有开仓委托挂单
   {
      MessageOut("【BK信号:买开委托发出!】");
      BKID = T_Deal1(COD,0,0,N,LIMIT_ORDER); //以市价发出N手的买开委托
      BKFLG = 1; //已发出买开委托
   }
}
VOID BKCHK() //买开成交判断函数
{
   IF(BKFLG == 1 || BKFLG == 3) //如果有买开委托
   {
      IF(T_OrderState(BKID) == 1 && CheckPosition() == 0) //如果买开委托成交
      {
         IF(BKFLG == 1) //如果是BK信号买开委托
         {
            MessageOut("【BK信号:买开委托成交!】"); 
            BKFLG = 2; //买开委托已成交
         }
         ELSE IF(BKFLG == 3) //如果是空头锁仓买开委托
         {
            MessageOut("【空头锁仓:买开委托成交!】"); 
            BKFLG = 4; //买开委托已成交
         }
         BKDEL = 0; //买开撤单标志归0
      }
      ELSE IF(T_OrderState(BKID) == 2) //如果买开委托被撤单
      {
         MessageOut("【清仓撤单:买开委托已撤!】");
         BKFLG = 0; //买开标志归0
         BKDEL = 0; //买开撤单标志归0
      }
      ELSE IF(T_OrderState(BKID) == 0 || T_OrderState(BKID) == 3) //如果买开委托未全部成交
      {
         IF(BKDEL == 2) //如果是清仓撤掉买开委托
         {
            MessageOut("【清仓撤单:买开委托撤单!】");
            T_DeleteOrder(BKID); //清仓撤掉买开委托挂单
            BKDEL = 3; //已发出清仓撤掉买开委托挂单
         }
      }
   }
}
//-------------------------卖平-----------------------//
VOID SPFUN() //卖平函数
{
   IF(SPFLG == 0) //如果没有卖平委托
   {
      MessageOut("【多头止盈:卖平委托发出!】");
      SPID = T_Deal1(COD,1,SH,BRP,LIMIT_ORDER); //以市价发出多头可用持仓手数的卖平委托
      SPFLG = 1; //已发出多头止盈卖平委托
      HZFLG = 0; //回落止盈处理标志归0
      ZYFLG = 1; //已处理多头止盈
   }
}
VOID SPCHK() //卖平成交判断函数
{
   IF(SPFLG > 0) //如果有卖平委托
   {
      IF(T_OrderState(SPID) == 1 && CheckPosition() == 0) //如果卖平委托成交
      {
         IF(SPFLG == 1) //如果是多头止盈卖平委托
         {
            MessageOut("【多头止盈:卖平委托成交!】");
            ZYFLG = 0; //止盈处理标志归0
         }
         ELSE IF(SPFLG == 2) //如果是清仓平多卖平委托
         {
            MessageOut("【清仓平多:卖平委托成交!】");
         }
         BKFLG = 0; //买开标志归0
         SPFLG = 0; //卖平标志归0
         SPDEL = 0; //卖平撤单标志归0
      }
      ELSE IF(T_OrderState(SPID) == 2) //如果卖平委托被撤单
      {
         MessageOut("【清仓撤单:卖平委托已撤!】");
         SPFLG = 0; //卖平标志归0
         SPDEL = 0; //卖平撤单标志归0
      }
      ELSE IF(T_OrderState(SPID) == 0 || T_OrderState(SPID) == 3) //如果卖平委托未全部成交
      {
         IF(SPDEL == 2) //如果是清仓撤单
         {
            MessageOut("【清仓撤单:卖平委托撤单!】");
            T_DeleteOrder(SPID); //撤掉卖平委托挂单
            SPDEL = 3; //清仓撤掉卖平委托挂单
         }
      }
   }
}
//------------------------卖开-----------------------//
VOID SKFUN() //卖开函数
{
   IF(SKFLG == 0) //如果没有卖开委托
   {
      MessageOut("【SK信号:卖开委托发出!】");
      SKID = T_Deal1(COD,1,0,N,LIMIT_ORDER); //以市价发出N手的卖开委托
      SKFLG = 1; //已发出卖开委托
   }
}
VOID SKCHK() //卖开成交判断函数
{
   IF(SKFLG == 1 || SKFLG == 3) //如果有卖开委托
   {
      IF(T_OrderState(SKID) == 1 && CheckPosition() == 0) //如果卖开委托成交
      {
         IF(SKFLG == 1) //如果是SK信号卖开委托
         {
            MessageOut("【SK信号:卖开委托成交!】"); 
            SKFLG = 2; //卖开委托已成交
         }
         IF(SKFLG == 3) //如果是多头锁仓卖开委托
         {
            MessageOut("【多头锁仓:卖开委托成交!】"); 
            SKFLG = 4; //卖开委托已成交
         }
         SKDEL = 0; //卖开撤单标志归0
      }
      ELSE IF(T_OrderState(SKID) == 2) //如果卖开委托被撤单
      {
         MessageOut("【清仓撤单:卖开委托已撤!】");
         SKFLG = 0; //卖开标志归0
         SKDEL = 0; //卖开撤单标志归0
      }
      ELSE IF(T_OrderState(SKID) == 0 || T_OrderState(SKID) == 3) //如果卖开委托未全部成交
      {
         IF(SKDEL == 2) //如果是清仓撤掉卖开委托
         {
            MessageOut("【清仓撤单:卖开委托撤单!】");
            T_DeleteOrder(SKID); //清仓撤掉卖开委托挂单
            SKDEL = 3; //已发出清仓撤掉卖开委托挂单
         }
      }
   }
}
//-------------------------买平-----------------------//
VOID BPFUN() //买平函数
{
   IF(BPFLG == 0) //如果没有买平委托
   {
      MessageOut("【空头止盈:买平委托发出!】");
      BPID = T_Deal1(COD,0,SH,BRP,LIMIT_ORDER); //以市价发出空头可用持仓手数的买平委托
      BPFLG = 1; //已发出空头止盈买平委托
      HZFLG = 0; //回落止盈处理标志归0
      ZYFLG = 1; //已处理空头止盈
   }
}
VOID BPCHK() //买平成交判断函数
{
   IF(BPFLG > 0) //如果有买平委托
   {
      IF(T_OrderState(BPID) == 1) //如果买平委托成交
      {
         IF(BPFLG == 1) //如果是空头止盈买平委托
         {
            MessageOut("【空头止盈:买平委托成交!】");
            ZYFLG = 0; //止盈处理标志归0
         }
         ELSE IF(BPFLG == 2) //如果是清仓平空买平委托
         {
            MessageOut("【清仓平空:买平委托成交!】");
         }
         SKFLG = 0; //卖开标志归0
         BPFLG = 0; //买平标志归0
         BPDEL = 0; //买平撤单标志归0
      }
      ELSE IF(T_OrderState(BPID) == 2) //如果买平委托被撤单
      {
         MessageOut("【清仓撤单:买平委托已撤!】");
         BPFLG = 0; //买平标志归0
         BPDEL = 0; //买平撤单标志归0
      }
      ELSE IF(T_OrderState(BPID) == 0 || T_OrderState(BPID) == 3) //如果买平委托未全部成交
      {
         IF(BPDEL == 2) //如果是清仓撤单
         {
            MessageOut("【清仓撤单:买平委托撤单!】");
            T_DeleteOrder(BPID); //撤掉买平委托挂单
            BPDEL = 3; //清仓撤掉买平委托挂单
         }
      }
   }
}

投资者咨询:帮我修改一下组件 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-7 22:31
 模组的平仓信号  组件不执行
投资者咨询:帮我修改一下组件 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-7 22:31
 帮我加上去

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看
技术人员回复
日期:2018-8-8 15:13
导入附件试试


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看文件名:aaa.zip


投资者咨询:帮我修改一下组件 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-7 22:31
 好的  谢谢    晚上开盘了我试试
投资者咨询:帮我修改一下组件 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-7 22:31

 

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看老师发现个问题    就是模组加仓的时候没有执行

组件有显示   但仓位没有加上去

投资者咨询:帮我修改一下组件 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-7 22:31
 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看文件名:0001111.txt



图片点击可在新窗口打开查看出来SK信号的同时也出现BP信号的提示  这样出现了报错
技术人员回复
日期:2018-8-9 11:37
组件修改较复杂,我们联系专门开发工程师,给您改下

但需要排队,预计2到3周

另外您算法模型本来就是没有针对加仓进行处理的,只是开仓 锁仓 止盈,您意思是后续加仓也是相同处理吗?