wh9 k线策略模型:基于均线和形态的高低点突破系统策略公式 [复制链接]

    autojiaoyi.com 发表于 ・771 次阅读 库安 wh9 查看全部 使用道具 举报 回复

    wh9 k线策略模型:基于均线和形态的高低点突破系统策略公式

    基于均线和形态的高低点突破策略源码:
    Params
       Numeric FastLength(8); //快速均线周期
       Numeric SlowLength(40); //慢速均线周期
       Numeric RiskLength(2); //止损通道的周期数
       Numeric ProfitFactor(2); //止盈相对止损的倍数
    Vars
       Numeric Range1; //K线波动范围
       NumericSeries MA_Fast; //快速均线
       NumericSeries MA_Slow; //慢速均线
       NumericSeries Condition1; //条件1
       NumericSeries Condition2; //条件2
       NumericSeries Condition11; //条件11
       NumericSeries Condition22; //条件22
       NumericSeries HH; //周期的高点
       NumericSeries LL; //周期的低点
       NumericSeries HH1; //周期的高点1
       NumericSeries LL1; //周期的低点1
       NumericSeries LongRisk; //止损时的风险额
       NumericSeries ShortRisk; //止损时的风险额
       Numeric N; //下单手数
       Numeric SH; //平仓参数
       Numeric RLP,FLP; //涨跌停价
       Numeric BIDP,ASKP; //买卖一价
       Numeric BRP,SRP; //多空头可用持仓
       Numeric OPFLG; //模型处理标志
       Numeric BKDFLG; //买开处理标志
       Numeric SKDFLG; //卖开处理标志
       Numeric BPDFLG; //买平处理标志
       Numeric SPDFLG; //卖平处理标志
       Numeric BPKDFLG; //买平开处理标志
       Numeric SPKDFLG; //卖平开处理标志
       Global_Numeric SXFLG; //信号消失标志
       Global_Numeric BPBKFLG; //买平买开处理标志
       Global_Numeric SPSKFLG; //卖平卖开处理标志
       Global_Numeric BKID,SKID; //开仓委托
       Global_Numeric BPID,SPID; //平仓委托
       Global_Numeric BKFLG,SKFLG; //开仓标志
       Global_Numeric BPFLG,SPFLG; //平仓标志
       Global_Numeric BKDEL,SKDEL; //开仓撤单标志
       Global_Numeric BPDEL,SPDEL; //平仓撤单标志
       Global_Numeric BKCFLG,SKCFLG; //开仓成交标志
       Global_Numeric BPCFLG,SPCFLG; //平仓成交标志
       Global_Numeric BKPCFLG; //信号买平成交标志
       Global_Numeric SKPCFLG; //信号卖平成交标志
       Global_Numeric BPCM,SPCM; //平仓成交手数
       Global_Numeric BKM,SKM; //开仓委托手数
       Global_Numeric BPM,SPM; //平仓委托手数
       Global_Numeric BKP,SKP; //开仓委托价格
       Global_Numeric BPP,SPP; //平仓委托价格
    Begin
       //------------------------信号发出------------------------//
       If(1) //信号发出
       {
          //计算及输出均线指标
          MA_Fast = Ma(Close,FastLength);
          MA_Slow = Ma(Close,SlowLength);
          PlotNumeric("Ma_Fast",MA_Fast);
          PlotNumeric("Ma_Slow",MA_Slow);
          //每根K线的波动范围
          Range1 = High - Low;
          //K线形态判断的2个条件
          Condition1 = Close <= Low + 0.25 * Range1;
          Condition2 = Close >= High - 0.25 * Range1;
          Condition11 = Close >= High - 0.25 * Range1;
          Condition22 = Close <= Low + 0.25 * Range1;
          //计算周期的高低点
          HH = HHV(High,2);
          LL = LLV(Low,RiskLength);
          LL1 = LLV(Low,2);
          HH1 = HHV(High,RiskLength);
          //多头开仓 
          If(MarketPosition == 0 && Condition1[2] == 1 && Condition2[1] == 1 && Close[1] > MA_Fast[1] && Close[1] > MA_Slow[1] && Vol > 0)
          {
             If(High >= HH[1] + MinMove * PriceScale)
             {
                BK(DefaultVol,Max(Open,HH[1] + MinMove * PriceScale));
                LongRisk = LL[1] - MinMove * PriceScale;
             }
          }
          //空头开仓 
          If(MarketPosition == 0 && Condition11[2] == 1 && Condition22[1] == 1 && Close[1] < MA_Fast[1] && Close[1] < MA_Slow[1] && Vol > 0)
          {
             If(Low <= LL1[1] - MinMove * PriceScale)
             {
                SK(DefaultVol,Min(Open,LL1[1] - MinMove * PriceScale));
                ShortRisk = HH1[1] + MinMove * PriceScale;
             }
          }
          //多头平仓 
          If(MarketPosition == 1 && BarsSinceEntry > 0 && Vol > 0)
          {
             //止盈
             If(High >= EntryPrice + ProfitFactor * (EntryPrice - LongRisk))
             {
                SP(DefaultVol,Max(Open,EntryPrice + ProfitFactor * (EntryPrice - LongRisk)));
             }
             //止损
             Else If(Low <= LongRisk)
             {
               SP(DefaultVol,Min(Open,LongRisk));
             }
          }
          //空头平仓 
          If(MarketPosition == -1 && BarsSinceEntry > 0 && Vol > 0)
          {
             //止盈
             If(Low <= EntryPrice - ProfitFactor * (ShortRisk - EntryPrice))
             {
                BP(DefaultVol,Min(Open,EntryPrice - ProfitFactor * (ShortRisk - EntryPrice)));
             }
             //止损
             Else If(High >= ShortRisk)
             {
                BP(DefaultVol,Max(Open,ShortRisk));
             }
          }
       }
       //------------------------处理开启------------------------//
       If(A_IsExchangeOpen() == 1) //如果是开盘状态
       {
          If(BarStatus() == 2) //如果不带入历史值
          {
             If(RunStart() == 1) //如果已初始化成功
             {
                OPFLG = 1; //开启模型处理
             }
          }
       }
       //------------------------变量赋值------------------------//
       If(OPFLG == 1) //变量赋值
       {
          N = 2; //下单手数
          BIDP = Price("Bid1"); //买一价
          ASKP = Price("Ask1"); //卖一价
          RLP = Price("RiseLimit"); //涨停价
          FLP = Price("FallLimit"); //跌停价
          BRP = F_BuyRemainPosition(); //多头可用持仓
          SRP = F_SellRemainPosition(); //空头可用持仓
          BRP = Min(BRP,A_BuyRemainPosition()); //多头可用持仓
          SRP = Min(SRP,A_SellRemainPosition()); //空头可用持仓
          If(A_IsSHCode() == 1) //如果是上期所合约
          {
             SH = Enum_ExitToday; //平仓参数
          }
          Else //如果非上期所合约
          {
             SH = Enum_Exit; //平仓参数
          }
       }
       //------------------------信号处理------------------------//
       If(OPFLG == 1) //信号处理
       {
          If(F_FreshSig() == 1) //如果当前信号是未处理过的信号
          {
             If(F_SigValid() == 1) //如果当前信号未消失
             {
                If(SXFLG == 0) //如果信号未消失
                {
                   If(F_Sig() == Sig_BK) //如果信号类型为BK
                   {
                      Commentary("【BK信号!】");
                      BPKDFLG = 1; //开启BK信号买平开处理
                   }
                   Else If(F_Sig() == Sig_SP) //如果信号类型为SP
                   {
                      Commentary("【SP信号!】");
                      BPBKFLG = 0; //买平买开处理标志归0
                      SPDFLG = 1; //开启SP信号卖平处理
                   }
                   Else If(F_Sig() == Sig_SK) //如果信号类型为SK
                   {
                      Commentary("【SK信号!】");
                      SPKDFLG = 1; //开启SK信号卖平开处理
                   }
                   Else If(F_Sig() == Sig_BP) //如果信号类型为BP
                   {
                      Commentary("【BP信号!】");
                      SPSKFLG = 0; //卖平卖开处理标志归0
                      BPDFLG = 1; //开启BP信号买平处理
                   }
                }
             }
             Else If(F_SigValid() == 0) //如果信号已消失
             {
                If(F_Sig() == Sig_BK) //如果信号类型为BK
                {
                   Commentary("【BK信号消失!】");
                   BPBKFLG = 0; //买平买开处理标志归0
                }
                Else If(F_Sig() == Sig_SP) //如果信号类型为SP
                {
                   Commentary("【SP信号消失!】");
                }
                Else If(F_Sig() == Sig_SK) //如果信号类型为SK
                {
                   Commentary("【SK信号消失!】");
                   SPSKFLG = 0; //卖平卖开处理标志归0
                }
                Else If(F_Sig() == Sig_BP) //如果信号类型为BP
                {
                   Commentary("【BP信号消失!】");
                }
                SXFLG = 1; //信号已消失
             }
          }
       }
       //------------------------成交判断------------------------//
       If(OPFLG == 1) //成交判断
       {
          If(BKFLG > 0) //如果有买开委托
          {
             If(F_OrderStatus(BKID) == Enum_Filled) //如果买开委托成交
             {
                If(BKFLG == 1) //如果是BK信号买开委托
                {
                   Commentary("【BK信号:买开委托成交!】");
                   BKCFLG = 1; //买开委托已成交
                   If(BKDEL == 1 || BKDEL == 2 || BKDEL == 3) //如果是SP信号撤单
                   {
                      SPDFLG = 1; //开启SP信号卖平处理
                   }
                   Else If(BKDEL == 4 || BKDEL == 5 || BKDEL == 6) //如果是SK信号撤单
                   {
                      SPKDFLG = 1; //开启SK信号卖平开处理
                   }
                   Else If(BKDEL == 7 || BKDEL == 8 || BKDEL == 9) //如果是BK信号撤单
                   {
                      If(BKPCFLG == 1) //如果BK信号买平委托已成交
                      {
                         SKDFLG = 3; //开启BK信号卖开处理
                      }
                      Else If(BKPCFLG == 0) //如果没有BK信号买平委托
                      {
                         SPDFLG = 3; //开启BK信号卖平处理
                      }
                   }
                }
                Else If(BKFLG == 2) //如果是SP信号买开委托
                {
                   Commentary("【SP信号:买开委托成交!】");
                }
                Else If(BKFLG == 3) //如果是SK信号买开委托
                {
                   Commentary("【SK信号:买开委托成交!】");
                }
                BKFLG = 0; //买开标志归0
                BKDEL = 0; //买开撤单标志归0
             }
             Else If(F_OrderStatus(BKID) == Enum_Canceled) //如果买开委托已撤
             {
                If(BKDEL == 1 || BKDEL == 2 || BKDEL == 3) //如果是SP信号撤单
                {
                   Commentary("【SP信号:买开委托已撤!】");
                   SPDFLG = 1; //开启SP信号卖平处理
                }
                Else If(BKDEL == 4 || BKDEL == 5 || BKDEL == 6) //如果是SK信号撤单
                {
                   Commentary("【SK信号:买开委托已撤!】");
                   SPKDFLG = 1; //开启SK信号卖平开处理
                }
                Else If(BKDEL == 7 || BKDEL == 8 || BKDEL == 9) //如果是BK信号撤单
                {
                   Commentary("【BK信号:买开委托已撤!】");
                   If(BKPCFLG == 1) //如果BK信号买平委托已成交
                   {
                      SKDFLG = 3; //开启BK信号卖开处理
                   }
                   Else If(BKPCFLG == 0) //如果没有BK信号买平委托
                   {
                      If(F_OrderFilledLot(BKID) > 0) //如果买开委托部分成交
                      {
                         SPDFLG = 3; //开启BK信号卖平处理
                      }
                   }
                }
                BKFLG = 0; //买开标志归0
                BKDEL = 0; //买开撤单标志归0
             }
             Else If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
             {
                If(BKDEL == 2) //如果是SP信号信号撤单
                {
                   Commentary("【SP信号信号:买开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                   BKDEL = 3; //SP信号信号撤掉买开委托挂单
                }
                Else If(BKDEL == 5) //如果是SK信号撤单
                {
                   Commentary("【SK信号:买开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                   BKDEL = 6; //SK信号撤掉买开委托挂单
                }
                Else If(BKDEL == 8) //如果是BK信号撤单
                {
                   Commentary("【BK信号:买开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                   BKDEL = 9; //BK信号撤掉买开委托挂单
                }
             }
          }
          If(SPFLG > 0) //如果有卖平委托
          {
             If(F_OrderStatus(SPID) == Enum_Filled) //如果卖平委托成交
             {
                If(SPFLG == 1) //如果是SP信号卖平委托
                {
                   Commentary("【SP信号:卖平委托成交!】");
                   SPCFLG = 1; //SP信号卖平委托已成交
                   If(SPDEL == 1 || SPDEL == 2 || SPDEL == 3) //如果是SP信号撤单
                   {
                      BKDFLG = 2; //开启SP信号买开处理
                   }
                }
                Else If(SPFLG == 2) //如果是SK信号卖平委托
                {
                   Commentary("【SK信号:卖平委托成交!】");
                   SKPCFLG = 1; //SK信号卖平委托已成交
                   If(SPSKFLG == 1) //如果已开启SK信号卖平卖开处理
                   {
                      SKDFLG = 1; //开启SK信号卖开处理
                   }
                   Else If(SPSKFLG == 0) //如果已关闭SK信号卖平卖开处理
                   {
                      If(SPDEL == 0) //如果未撤单
                      {
                         SKPCFLG = 2; //SK信号卖平委托已成交且未卖开
                      }
                      Else If(SPDEL == 4 || SPDEL == 5 || SPDEL == 6) //如果是SK信号撤单
                      {
                         BKDFLG = 3; //开启SK信号买开处理
                      }
                   }
                }
                Else If(SPFLG == 3) //如果是BK信号卖平委托
                {
                   Commentary("【BK信号:卖平委托成交!】");
                }
                SPCM = F_OrderFilledLot(SPID); //卖平成交手数
                SPFLG = 0; //卖平标志归0
                SPDEL = 0; //卖平撤单标志归0
             }
             Else If(F_OrderStatus(SPID) == Enum_Canceled) //如果卖平委托已撤
             {
                SPCM = F_OrderFilledLot(SPID); //卖平成交手数
                If(SPDEL == 1 || SPDEL == 2 || SPDEL == 3) //如果是SP信号撤单
                {
                   Commentary("【SP信号:卖平委托已撤!】");
                   If(SPCM > 0) //如果卖平委托部分成交
                   {
                      BKDFLG = 2; //开启SP信号买开处理
                   }
                }
                Else If(SPDEL == 4 || SPDEL == 5 || SPDEL == 6) //如果是SK信号撤单
                {
                   Commentary("【SK信号:卖平委托已撤!】");
                   If(SPCM > 0) //如果卖平委托部分成交
                   {
                      BKDFLG = 3; //开启SK信号买开处理
                   }
                }
                SPFLG = 0; //卖平标志归0
                SPDEL = 0; //卖平撤单标志归0
             }
             Else If(F_OrderStatus(SPID) == Enum_Declared || F_OrderStatus(SPID) == Enum_FillPart) //如果卖平委托挂单
             {
                If(SPDEL == 2) //如果是SP信号撤单
                {
                   Commentary("【SP信号:卖平委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单
                   SPDEL = 3; //SP信号撤掉卖平委托挂单
                }
                Else If(SPDEL == 5) //如果是SK信号撤单
                {
                   Commentary("【SK信号:卖平委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单
                   SPDEL = 6; //SK信号撤掉卖平委托挂单
                }
             }
          }
          If(SKFLG > 0) //如果有卖开委托
          {
             If(F_OrderStatus(SKID) == Enum_Filled) //如果卖开委托成交
             {
                If(SKFLG == 1) //如果是SK信号卖开委托
                {
                   Commentary("【SK信号:卖开委托成交!】");
                   SKCFLG = 1; //卖开委托已成交
                   If(SKDEL == 1 || SKDEL == 2 || SKDEL == 3) //如果是BP信号撤单
                   {
                      BPDFLG = 1; //开启BP信号买平处理
                   }
                   Else If(SKDEL == 4 || SKDEL == 5 || SKDEL == 6) //如果是BK信号撤单
                   {
                      BPKDFLG = 1; //开启BK信号买平开处理
                   }
                   Else If(SKDEL == 7 || SKDEL == 8 || SKDEL == 9) //如果是SK信号撤单
                   {
                      If(SKPCFLG == 1) //如果SK信号卖平委托已成交
                      {
                         BKDFLG = 3; //开启SK信号买开处理
                      }
                      Else If(SKPCFLG == 0) //如果没有SK信号卖平委托
                      {
                         BPDFLG = 3; //开启SK信号买平处理
                      }
                   }
                }
                Else If(SKFLG == 2) //如果是BP信号卖开委托
                {
                   Commentary("【BP信号:卖开委托成交!】");
                }
                Else If(SKFLG == 3) //如果是BK信号卖开委托
                {
                   Commentary("【BK信号:卖开委托成交!】");
                }
                SKFLG = 0; //卖开标志归0
                SKDEL = 0; //卖开撤单标志归0
             }
             Else If(F_OrderStatus(SKID) == Enum_Canceled) //如果卖开委托已撤
             {
                If(SKDEL == 1 || SKDEL == 2 || SKDEL == 3) //如果是BP信号撤单
                {
                   Commentary("【BP信号:卖开委托已撤!】");
                   BPDFLG = 1; //开启BP信号买平处理
                }
                Else If(SKDEL == 4 || SKDEL == 5 || SKDEL == 6) //如果是BK信号撤单
                {
                   Commentary("【BK信号:卖开委托已撤!】");
                   BPKDFLG = 1; //开启BK信号买平开处理
                }
                Else If(SKDEL == 7 || SKDEL == 8 || SKDEL == 9) //如果是SK信号撤单
                {
                   Commentary("【SK信号:卖开委托已撤!】");
                   If(SKPCFLG == 1) //如果SK信号卖平委托已成交
                   {
                      BKDFLG = 3; //开启SK信号买开处理
                   }
                   Else If(SKPCFLG == 0) //如果没有SK信号卖平委托
                   {
                      If(F_OrderFilledLot(SKID) > 0) //如果卖开委托部分成交
                      {
                         BPDFLG = 3; //开启SK信号买平处理
                      }
                   }
                }
                SKFLG = 0; //卖开标志归0
                SKDEL = 0; //卖开撤单标志归0
             }
             Else If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
             {
                If(SKDEL == 2) //如果是BP信号信号撤单
                {
                   Commentary("【BP信号信号:卖开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                   SKDEL = 3; //BP信号信号撤掉卖开委托挂单
                }
                Else If(SKDEL == 5) //如果是BK信号撤单
                {
                   Commentary("【BK信号:卖开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                   SKDEL = 6; //BK信号撤掉卖开委托挂单
                }
                Else If(SKDEL == 8) //如果是SK信号撤单
                {
                   Commentary("【SK信号:卖开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                   SKDEL = 9; //SK信号撤掉卖开委托挂单
                }
             }
          }
          If(BPFLG > 0) //如果有买平委托
          {
             If(F_OrderStatus(BPID) == Enum_Filled) //如果买平委托成交
             {
                If(BPFLG == 1) //如果是BP信号买平委托
                {
                   Commentary("【BP信号:买平委托成交!】");
                   BPCFLG = 1; //BP信号买平委托已成交
                   If(BPDEL == 1 || BPDEL == 2 || BPDEL == 3) //如果是BP信号撤单
                   {
                      SKDFLG = 2; //开启BP信号卖开处理
                   }
                }
                Else If(BPFLG == 2) //如果是BK信号买平委托
                {
                   Commentary("【BK信号:买平委托成交!】");
                   BKPCFLG = 1; //BK信号买平委托已成交
                   If(BPBKFLG == 1) //如果已开启BK信号买平买开处理
                   {
                      BKDFLG = 1; //开启BK信号买开处理
                   }
                   Else If(BPBKFLG == 0) //如果已关闭BK信号买平买开处理
                   {
                      If(BPDEL == 0) //如果未撤单
                      {
                         BKPCFLG = 2; //BK信号买平委托已成交且未买开
                      }
                      Else If(BPDEL == 4 || BPDEL == 5 || BPDEL == 6) //如果是BK信号撤单
                      {
                         SKDFLG = 3; //开启BK信号卖开处理
                      }
                   }
                }
                Else If(BPFLG == 3) //如果是SK信号买平委托
                {
                   Commentary("【SK信号:买平委托成交!】");
                }
                BPCM = F_OrderFilledLot(BPID); //买平成交手数
                BPFLG = 0; //买平标志归0
                BPDEL = 0; //买平撤单标志归0
             }
             Else If(F_OrderStatus(BPID) == Enum_Canceled) //如果买平委托已撤
             {
                BPCM = F_OrderFilledLot(BPID); //买平成交手数
                If(BPDEL == 1 || BPDEL == 2 || BPDEL == 3) //如果是BP信号撤单
                {
                   Commentary("【BP信号:买平委托已撤!】");
                   If(BPCM > 0) //如果买平委托部分成交
                   {
                      SKDFLG = 2; //开启BP信号卖开处理
                   }
                }
                Else If(BPDEL == 4 || BPDEL == 5 || BPDEL == 6) //如果是BK信号撤单
                {
                   Commentary("【BK信号:买平委托已撤!】");
                   If(BPCM > 0) //如果买平委托部分成交
                   {
                      SKDFLG = 3; //开启BK信号卖开处理
                   }
                }
                BPFLG = 0; //买平标志归0
                BPDEL = 0; //买平撤单标志归0
             }
             Else If(F_OrderStatus(BPID) == Enum_Declared || F_OrderStatus(BPID) == Enum_FillPart) //如果买平委托挂单
             {
                If(BPDEL == 2) //如果是BP信号撤单
                {
                   Commentary("【BP信号:买平委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(BPID)); //撤掉买平委托挂单
                   BPDEL = 3; //BP信号撤掉买平委托挂单
                }
                Else If(BPDEL == 5) //如果是BK信号撤单
                {
                   Commentary("【BK信号:买平委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(BPID)); //撤掉买平委托挂单
                   BPDEL = 6; //BK信号撤掉买平委托挂单
                }
             }
          }
       }
       //------------------------信号消失------------------------//
       If(OPFLG == 1) //信号消失
       {
          If(SXFLG == 1) //如果信号已消失
          {
             If(F_Sig() == Sig_BK) //如果信号类型为BK
             {
                If(BPFLG == 2) //如果有BK信号买平委托
                {
                   If(BPDEL == 0) //如果未撤单
                   {
                      If(F_OrderStatus(BPID) == Enum_Declared || F_OrderStatus(BPID) == Enum_FillPart) //如果买平委托挂单
                      {
                         Commentary("【BK信号:买平委托撤单!】");
                         F_DeleteOrder(F_OrderContractNo(BPID)); //撤掉买平委托挂单
                         BPDEL = 4; //BK信号撤掉买平委托挂单
                      }
                      Else //如果买平委托未挂单
                      {
                         BPDEL = 5; //BK信号撤掉买平委托挂单
                      }
                   }
                }
                Else If(BPFLG == 0 && BKPCFLG == 2) //如果BK信号买平委托已成交且未买开
                {
                   SKDFLG = 3; //开启BK信号卖开处理
                }
                Else If(BKFLG == 1) //如果BK信号买开委托挂单
                {
                   If(BKDEL == 0) //如果未撤单
                   {
                      If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
                      {
                         Commentary("【BK信号:买开委托撤单!】");
                         F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                         BKDEL = 7; //BK信号撤掉买开委托挂单
                      }
                      Else //如果买开委托未挂单
                      {
                         BKDEL = 8; //BK信号撤掉买开委托挂单
                      }
                   }
                }
                Else If(BKFLG == 0 && BKCFLG == 1) //如果BK信号买开委托已成交
                {
                   If(BKPCFLG == 1) //如果BK信号买平委托已成交
                   {
                      SKDFLG = 3; //开启BK信号卖开处理
                   }
                   Else If(BKPCFLG == 0) //如果没有BK信号买平委托
                   {
                      SPDFLG = 3; //开启BK信号卖平处理
                   }
                   BKCFLG = 0; //买开成交标志归0
                }
             }
             Else If(F_Sig() == Sig_SP) //如果信号类型为SP
             {
                If(SPFLG == 1) //如果SP信号卖平委托挂单
                {
                   If(SPDEL == 0) //如果未撤单
                   {
                      If(F_OrderStatus(SPID) == Enum_Declared || F_OrderStatus(SPID) == Enum_FillPart) //如果卖平委托挂单
                      {
                         Commentary("【SP信号:卖平委托撤单!】");
                         F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单
                         SPDEL = 1; //SP信号撤掉卖平委托挂单
                      }
                      Else //如果卖平委托未挂单
                      {
                         SPDEL = 2; //SP信号撤掉卖平委托挂单
                      }
                   }
                }
                Else If(SPFLG == 0 && SPCFLG == 1) //如果SP信号卖平委托已成交
                {
                   BKDFLG = 2; //开启SP信号买开处理
                   SPCFLG = 0; //卖平成交标志归0
                }
             }
             Else If(F_Sig() == Sig_SK) //如果信号类型为SK
             {
                If(SPFLG == 2) //如果有SK信号卖平委托
                {
                   If(SPDEL == 0) //如果未撤单
                   {
                      If(F_OrderStatus(SPID) == Enum_Declared || F_OrderStatus(SPID) == Enum_FillPart) //如果卖平委托挂单
                      {
                         Commentary("【SK信号:卖平委托撤单!】");
                         F_DeleteOrder(F_OrderContractNo(SPID)); //撤掉卖平委托挂单
                         SPDEL = 4; //SK信号撤掉卖平委托挂单
                      }
                      Else //如果卖平委托未挂单
                      {
                         SPDEL = 5; //SK信号撤掉卖平委托挂单
                      }
                   }
                }
                Else If(SPFLG == 0 && SKPCFLG == 2) //如果SK信号卖平委托已成交且未卖开
                {
                   BKDFLG = 3; //开启SK信号买开处理
                }
                Else If(SKFLG == 1) //如果SK信号卖开委托挂单
                {
                   If(SKDEL == 0) //如果未撤单
                   {
                      If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
                      {
                         Commentary("【SK信号:卖开委托撤单!】");
                         F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                         SKDEL = 7; //SK信号撤掉卖开委托挂单
                      }
                      Else //如果卖开委托未挂单
                      {
                         SKDEL = 8; //SK信号撤掉卖开委托挂单
                      }
                   }
                }
                Else If(SKFLG == 0 && SKCFLG == 1) //如果SK信号卖开委托已成交
                {
                   If(SKPCFLG == 1) //如果SK信号卖平委托已成交
                   {
                      BKDFLG = 3; //开启SK信号买开处理
                   }
                   Else If(SKPCFLG == 0) //如果没有SK信号卖平委托
                   {
                      BPDFLG = 3; //开启SK信号买平处理
                   }
                   SKCFLG = 0; //卖开成交标志归0
                }
             }
             Else If(F_Sig() == Sig_BP) //如果信号类型为BP
             {
                If(BPFLG == 1) //如果BP信号买平委托挂单
                {
                   If(BPDEL == 0) //如果未撤单
                   {
                      If(F_OrderStatus(BPID) == Enum_Declared || F_OrderStatus(BPID) == Enum_FillPart) //如果买平委托挂单
                      {
                         Commentary("【BP信号:买平委托撤单!】");
                         F_DeleteOrder(F_OrderContractNo(BPID)); //撤掉买平委托挂单
                         BPDEL = 1; //BP信号撤掉买平委托挂单
                      }
                      Else //如果买平委托未挂单
                      {
                         BPDEL = 2; //BP信号撤掉买平委托挂单
                      }
                   }
                }
                Else If(BPFLG == 0 && BPCFLG == 1) //如果BP信号买平委托已成交
                {
                   SKDFLG = 2; //开启BP信号卖开处理
                   BPCFLG = 0; //买平成交标志归0
                }
             }
             SXFLG = 2; //已执行信号消失处理
          }
          If(SXFLG == 2) //如果已执行信号消失处理
          {
             If(BKFLG == 0 && SPFLG == 0 && SKFLG == 0 && BPFLG == 0) //如果没有开平仓委托
             {
                If(BKDFLG == 0 && SPDFLG == 0 && SKDFLG == 0 && BPDFLG == 0) //如果没有开平仓处理
                {
                   SXFLG = 0; //信号消失标志归0
                }
             }
          }
       }
       //------------------------委托处理------------------------//
       If(OPFLG == 1) //委托处理
       {
          If(BPKDFLG == 1) //如果已开启买平开处理
          {
             If(SKFLG == 1) //如果有SK信号卖开委托
             {
                If(SKDEL == 0) //如果未撤单
                {
                   If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
                   {
                      Commentary("【BK信号:卖开委托撤单!】");
                      F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                      SKDEL = 4; //BK信号撤掉卖开委托挂单
                   }
                   Else //如果卖开委托未挂单
                   {
                      SKDEL = 5; //BK信号撤掉卖开委托挂单
                   }
                }
             }
             Else If(SKFLG == 0) //如果没有卖开委托
             {
                If(BPFLG == 0) //如果没有买平委托
                {
                   If(SRP > 0) //如果有空头可用持仓
                   {
                      BPBKFLG = 1; //开启BK信号买平买开处理
                      BPDFLG = 2; //开启BK信号买平处理
                   }
                   Else If(SRP == 0) //如果没有空头可用持仓
                   {
                      BKDFLG = 1; //开启BK信号买开处理
                   }
                }
                Else If(BPFLG == 1) //如果有BP信号买平委托
                {
                   BKDFLG = 1; //开启BK信号买开处理
                }
             }
          }
          If(BKDFLG > 0) //如果已开启买开处理
          {
             If(BKFLG == 0) //如果没有买开委托
             {
                BKP = ASKP; //买开委托价格
                If(BKDFLG == 1) //如果是BK信号买开
                {
                   BKM = N; //买开委托手数
                   Commentary("【BK信号:买开委托发出!】");
                }
                Else If(BKDFLG == 2) //如果是SP信号买开
                {
                   BKM = SPCM; //买开委托手数
                   Commentary("【SP信号:买开委托发出!】");
                }
                Else If(BKDFLG == 2) //如果是SK信号买开
                {
                   BKM = SPCM; //买开委托手数
                   Commentary("【SK信号:买开委托发出!】");
                }
                BKID = A_SendOrder(Enum_Buy,Enum_Entry,BKM,BKP); //发出买开委托
                BKCFLG = 0; //买开成交标志归0
                BKPCFLG = 0; //BK信号买平成交标志归0
                BKFLG = BKDFLG; //已发出买开委托
             }
          }
          If(SPDFLG == 1) //如果是SP信号卖平
          {
             If(BKFLG == 1) //如果有BK信号买开委托
             {
                If(BKDEL == 0) //如果未撤单
                {
                   If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
                   {
                      Commentary("【SP信号:买开委托撤单!】");
                      F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                      BKDEL = 1; //SP信号撤掉买开委托挂单
                   }
                   Else //如果买开委托未挂单
                   {
                      BKDEL = 2; //SP信号撤掉买开委托挂单
                   }
                }
                SPDFLG = 0; //卖平处理标志归0
             }
          }
          If(SPDFLG > 0) //如果已开启卖平处理
          {
             If(SPFLG == 0) //如果没有卖平委托
             {
                If(BRP > 0) //如果有多头可用持仓
                {
                   SPM = BRP; //卖平委托手数
                   SPP = FLP; //卖平委托价格
                   If(SPDFLG == 1) //如果是SP信号卖平
                   {
                      Commentary("【SP信号:卖平委托发出!】");
                   }
                   Else If(SPDFLG == 2) //如果是SK信号卖平
                   {
                      Commentary("【SK信号:卖平委托发出!】");
                   }
                   Else If(SPDFLG == 3) //如果是BK信号卖平
                   {
                      Commentary("【BK信号:卖平委托发出!】");
                   }
                   SPID = A_SendOrder(Enum_Sell,SH,SPM,SPP); //发出卖平委托
                   SPCFLG = 0; //卖平成交标志归0
                   SPFLG = SPDFLG; //已发出卖平委托
                }
             }
          }
          If(SPKDFLG == 1) //如果已开启卖平开处理
          {
             If(BKFLG == 1) //如果有BK信号买开委托
             {
                If(BKDEL == 0) //如果未撤单
                {
                   If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
                   {
                      Commentary("【SK信号:买开委托撤单!】");
                      F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                      BKDEL = 4; //SK信号撤掉买开委托挂单
                   }
                   Else //如果买开委托未挂单
                   {
                      BKDEL = 5; //SK信号撤掉买开委托挂单
                   }
                }
             }
             Else If(BKFLG == 0) //如果没有买开委托
             {
                If(SPFLG == 0) //如果没有卖平委托
                {
                   If(BRP > 0) //如果有多头可用持仓
                   {
                      SPSKFLG = 1; //开启SK信号卖平卖开处理
                      SPDFLG = 2; //开启SK信号卖平处理
                   }
                   Else If(BRP == 0) //如果没有多头可用持仓
                   {
                      SKDFLG = 1; //开启SK信号卖开处理
                   }
                }
                Else If(SPFLG == 1) //如果有SP信号卖平委托
                {
                   SKDFLG = 1; //开启SK信号卖开处理
                }
             }
          }
          If(SKDFLG > 0) //如果已开启卖开处理
          {
             If(SKFLG == 0) //如果没有卖开委托
             {
                SKP = BIDP; //卖开委托价格
                If(SKDFLG == 1) //如果是SK信号卖开
                {
                   SKM = N; //卖开委托手数
                   Commentary("【SK信号:卖开委托发出!】");
                }
                Else If(SKDFLG == 2) //如果是BP信号卖开
                {
                   SKM = BPCM; //卖开委托手数
                   Commentary("【BP信号:卖开委托发出!】");
                }
                Else If(SKDFLG == 3) //如果是BK信号卖开
                {
                   SKM = BPCM; //卖开委托手数
                   Commentary("【BK信号:卖开委托发出!】");
                }
                SKID = A_SendOrder(Enum_Sell,Enum_Entry,SKM,SKP); //发出卖开委托
                SKCFLG = 0; //卖开成交标志归0
                SKPCFLG = 0; //SK信号卖平成交标志归0
                SKFLG = SKDFLG; //已发出卖开委托
             }
          }
          If(BPDFLG == 1) //如果是BP信号买平
          {
             If(SKFLG == 1) //如果有SK信号卖开委托
             {
                If(SKDEL == 0) //如果未撤单
                {
                   If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
                   {
                      Commentary("【BP信号:卖开委托撤单!】");
                      F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                      SKDEL = 1; //BP信号撤掉卖开委托挂单
                   }
                   Else //如果卖开委托未挂单
                   {
                      SKDEL = 2; //BP信号撤掉卖开委托挂单
                   }
                }
                BPDFLG = 0; //买平处理标志归0
             }
          }
          If(BPDFLG > 0) //如果已开启买平处理
          {
             If(BPFLG == 0) //如果没有买平委托
             {
                If(SRP > 0) //如果有空头可用持仓
                {
                   BPM = SRP; //买平委托手数
                   BPP = RLP; //买平委托价格
                   If(BPDFLG == 1) //如果是BP信号买平
                   {
                      Commentary("【BP信号:买平委托发出!】");
                   }
                   Else If(BPDFLG == 2) //如果是BK信号买平
                   {
                      Commentary("【BK信号:买平委托发出!】");
                   }
                   Else If(BPDFLG == 3) //如果是SK信号买平
                   {
                      Commentary("【SK信号:买平委托发出!】");
                   }
                   BPID = A_SendOrder(Enum_Buy,SH,BPM,BPP); //发出买平委托
                   BPCFLG = 0; //买平成交标志归0
                   BPFLG = BPDFLG; //已发出买平委托
                }
             }
          }
       }
    End
    热帖

    全部评论/0 条

    本版积分规则

    发布新内容
    加入收藏 我要分享
    分享到论坛或者博客

    复制
    热门指标策略
    快速回复 返回顶部 返回列表