wh9 K线策略模型:双均线交易系统策略公式 [复制链接]

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

    wh9  k线模型:双均线交易系统

    指标公式源码如下:
    Params
       Numeric FastLength(5); //快线周期
       Numeric SlowLength(20); //慢线周期
    Vars
       NumericSeries AvgValue1; //快线周期均值
       NumericSeries AvgValue2; //慢线周期均值
       Numeric N; //下单手数
       Numeric SH; //平仓参数
       Numeric RLP,FLP; //涨跌停价
       Numeric BIDP,ASKP; //买卖一价
       Numeric BRP,SRP; //多空头可用持仓
       Numeric OPFLG; //模型处理标志
       Numeric BKDFLG; //买开处理标志
       Numeric SKDFLG; //卖开处理标志
       Numeric BPKDFLG; //买平开处理标志
       Numeric SPKDFLG; //卖平开处理标志
       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 BKM,SKM; //开仓委托手数
       Global_Numeric BPM,SPM; //平仓委托手数
       Global_Numeric BKP,SKP; //开仓委托价格
       Global_Numeric BPP,SPP; //平仓委托价格
    Begin
       //------------------------信号发出------------------------//
       If(1) //信号发出
       {
          AvgValue1 = AverageFC(Close,FastLength); //快线周期均值
          AvgValue2 = AverageFC(Close,SlowLength); //慢线周期均值
          PlotNumeric("MA1",AvgValue1);
          PlotNumeric("MA2",AvgValue2);
          //当前无多仓且快线周期的均线高于慢线周期的均线,开多单
          If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1])
          {
             BPK(1,Open);
          }
          //当前无空仓且快线周期的均线低于慢线周期的均线,开空单
          If(MarketPosition <> -1 && AvgValue1[1] < AvgValue2[1])
          {
             SPK(1,Open);
          }
       }
       //------------------------处理开启------------------------//
       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(F_Sig() == Sig_BPK) //如果信号类型为BPK
                {
                   Commentary("【BPK信号!】");
                   BPKDFLG = 1; //开启买平开处理
                }
                Else If(F_Sig() == Sig_SPK) //如果信号类型为SPK
                {
                   Commentary("【SPK信号!】");
                   SPKDFLG = 1; //开启卖平开处理
                }
             }
          }
       }
       //------------------------成交判断------------------------//
       If(OPFLG == 1) //成交判断
       {
          If(BPFLG == 1) //如果有买平委托
          {
             If(F_OrderStatus(BPID) == Enum_Filled) //如果买平委托成交
             {
                Commentary("【BPK信号:买平委托成交!】");
                BKDFLG = 1; //开启买开处理
                BPFLG = 0; //买平标志归0
             }
          }
          If(BKFLG == 1) //如果有买开委托
          {
             If(F_OrderStatus(BKID) == Enum_Filled) //如果买开委托成交
             {
                Commentary("【BPK信号:买开委托成交!】");
                If(BKDEL > 0) //如果是SPK信号撤单
                {
                   SPKDFLG = 1; //开启卖平开处理
                }
                BKFLG = 0; //买开标志归0
                BKDEL = 0; //买开撤单标志归0
             }
             Else If(F_OrderStatus(BKID) == Enum_Canceled) //如果买开委托已撤
             {
                Commentary("【SPK信号:买开委托已撤!】");
                SPKDFLG = 1; //开启卖平开处理
                BKFLG = 0; //买开标志归0
                BKDEL = 0; //买开撤单标志归0
             }
             Else If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
             {
                If(BKDEL == 2) //如果是SPK信号撤单
                {
                   Commentary("【SPK信号:买开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                   BKDEL = 3; //SPK信号撤掉买开委托挂单
                }
             }
          }
          If(SPFLG == 1) //如果有卖平委托
          {
             If(F_OrderStatus(SPID) == Enum_Filled) //如果卖平委托成交
             {
                Commentary("【SPK信号:卖平委托成交!】");
                SKDFLG = 1; //开启卖开处理
                SPFLG = 0; //卖平标志归0
             }
          }
          If(SKFLG == 1) //如果有卖开委托
          {
             If(F_OrderStatus(SKID) == Enum_Filled) //如果卖开委托成交
             {
                Commentary("【SPK信号:卖开委托成交!】");
                If(SKDEL > 0) //如果是BPK信号撤单
                {
                   BPKDFLG = 1; //开启买平开处理
                }
                SKFLG = 0; //卖开标志归0
                SKDEL = 0; //卖开撤单标志归0
             }
             Else If(F_OrderStatus(SKID) == Enum_Canceled) //如果卖开委托已撤
             {
                Commentary("【BPK信号:卖开委托已撤!】");
                BPKDFLG = 1; //开启买平开处理
                SKFLG = 0; //卖开标志归0
                SKDEL = 0; //卖开撤单标志归0
             }
             Else If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
             {
                If(SKDEL == 2) //如果是BPK信号撤单
                {
                   Commentary("【BPK信号:卖开委托撤单!】");
                   F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                   SKDEL = 3; //BPK信号撤掉卖开委托挂单
                }
             }
          }
       }
       //------------------------委托处理------------------------//
       If(OPFLG == 1) //委托处理
       {
          If(BPKDFLG == 1) //如果已开启买平开处理
          {
             If(SKFLG == 1) //如果有卖开委托
             {
                If(SKDEL == 0) //如果未撤单
                {
                   If(F_OrderStatus(SKID) == Enum_Declared || F_OrderStatus(SKID) == Enum_FillPart) //如果卖开委托挂单
                   {
                      Commentary("【BPK信号:卖开委托撤单!】");
                      F_DeleteOrder(F_OrderContractNo(SKID)); //撤掉卖开委托挂单
                      SKDEL = 1; //BPK信号撤掉卖开委托挂单
                   }
                   Else //如果卖开委托未挂单
                   {
                      SKDEL = 2; //BPK信号撤掉卖开委托挂单
                   }
                }
             }
             Else If(SKFLG == 0) //如果没有卖开委托
             {
                If(BPFLG == 0) //如果没有买平委托
                {
                   If(SRP > 0) //如果有空头可用持仓
                   {
                      BPM = SRP; //买平委托手数
                      BPP = RLP; //买平委托价格
                      Commentary("【BPK信号:买平委托发出!】");
                      BPID = A_SendOrder(Enum_Buy,SH,BPM,BPP); //发出买平委托
                      BPFLG = 1; //已发出买平委托
                   }
                   Else If(SRP == 0) //如果没有空头可用持仓
                   {
                      BKDFLG = 1; //开启买开处理
                   }
                }
             }
          }
          If(BKDFLG == 1) //如果已开启买开处理
          {
             If(BKFLG == 0) //如果没有买开委托
             {
                BKM = N; //买开委托手数
                BKP = ASKP; //买开委托价格
                Commentary("【BPK信号:买开委托发出!】");
                BKID = A_SendOrder(Enum_Buy,Enum_Entry,BKM,BKP); //发出买开委托
                BKFLG = 1; //已发出买开委托
             }
          }
          If(SPKDFLG == 1) //如果已开启卖平开处理
          {
             If(BKFLG == 1) //如果有买开委托
             {
                If(BKDEL == 0) //如果未撤单
                {
                   If(F_OrderStatus(BKID) == Enum_Declared || F_OrderStatus(BKID) == Enum_FillPart) //如果买开委托挂单
                   {
                      Commentary("【SPK信号:买开委托撤单!】");
                      F_DeleteOrder(F_OrderContractNo(BKID)); //撤掉买开委托挂单
                      BKDEL = 1; //SPK信号撤掉买开委托挂单
                   }
                   Else //如果买开委托未挂单
                   {
                      BKDEL = 2; //SPK信号撤掉买开委托挂单
                   }
                }
             }
             Else If(BKFLG == 0) //如果没有买开委托
             {
                If(SPFLG == 0) //如果没有卖平委托
                {
                   If(BRP > 0) //如果有多头可用持仓
                   {
                      SPM = BRP; //卖平委托手数
                      SPP = FLP; //卖平委托价格
                      Commentary("【SPK信号:卖平委托发出!】");
                      SPID = A_SendOrder(Enum_Sell,SH,SPM,SPP); //发出卖平委托
                      SPFLG = 1; //已发出卖平委托
                   }
                   Else If(BRP == 0) //如果没有多头可用持仓
                   {
                      SKDFLG = 1; //开启卖开处理
                   }
                }
             }
          }
          If(SKDFLG == 1) //如果已开启卖开处理
          {
             If(SKFLG == 0) //如果没有卖开委托
             {
                SKM = N; //卖开委托手数
                SKP = BIDP; //卖开委托价格
                Commentary("【SPK信号:卖开委托发出!】");
                SKID = A_SendOrder(Enum_Sell,Enum_Entry,SKM,SKP); //发出卖开委托
                SKFLG = 1; //已发出卖开委托
             }
          }
       }
    End
    热帖

    全部评论/0 条

    本版积分规则

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

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