手动交易+算法交易案例四:实现自己的止盈止损策略

    软件中会提供几种默认止盈止损策略,但有时还是无法完全满足用户的多样性需要,算法交易模型的函数可取到盘口价格和持仓合约的信息(持仓价格、数量、和盈亏等),通过编写算法交易模型可定制属于您自己的止盈止损策略。

    跟踪止盈是软件默认提供的策略,但如果希望在盈利达到一定值时再启动跟踪止盈策略,就无法实现了。那么在开仓后,算法交易模型就会开始取盘口价格和持仓价格实时监测,满足了条件会自动发平仓委托。源码如下:

    //止盈止损 
    Data 
        data0:"m1709"; 
    Vars 
        Global_Numeric N;//下单手数 
        Global_Numeric M1; //价位倍数1 
        Global_Numeric M2; //价位倍数2 
        Global_Numeric M3; //价位倍数3 
        Global_Numeric BID; //买一价 
        Global_Numeric ASK; //卖一价 
        Global_Numeric NEWP; //最新价 
        Global_Numeric MINP; //最小变动价位 
        Global_Numeric BKC; //做多条件 
        Global_Numeric BKID; //买开委托 
        Global_Numeric BKFLG; //买开标志 
        Global_Numeric BKAP; //买开委托成交均价 
        Global_Numeric BHP; //多头最高价 
        Global_Numeric SPID; //卖平委托 
        Global_Numeric SPFLG; //卖平标志 
        Global_Numeric BRP; //多头可用持仓 
        Global_Numeric BZYFLG; //多头止盈标志 
    Begin 
        N = 2; //下单手数 
        M1 = 3; //价位倍数1 
        M2 = 1; //价位倍数2 
        M3 = 3; //价位倍数3 
        BKC = 1; //做多条件 
        BID = Price("Bid1"); //买一价 
        ASK = Price("Ask1"); //卖一价 
        NEWP = Price("New"); //最新价 
        MINP = Price("MinPrice");//最小变动价位 
        BRP = F_BuyRemainPosition(); //多头可用持仓
    
       if(A_IsExchangeOpen() == 1) //如果当前状态是开盘 
        { 
           //----------------------成交判断--------------------// 
          if(BKFLG == 1) //如果有买开委托 
           { 
              if(F_OrderStatus(BKID) == Enum_Filled) //如果买开委托成交 
              { 
                 Commentary("【多头开仓:买开委托成交!】"); 
                 BKAP = F_OrderFilledPrice(BKID); //买开委托成交均价 
                 BKFLG = 2; //买开委托已成交 
              } 
           }
    
          if(SPFLG > 0) //如果有卖平委托 
           { 
              if(F_OrderStatus(SPID) == Enum_Filled) //如果卖平委托成交 
              { 
                 if(SPFLG == 1) //如果是多头止盈卖平委托 
                 { 
                    Commentary("【多头止盈:卖平委托成交!】"); 
                 } 
                 else if(SPFLG == 2) //如果是多头止损卖平委托 
                 { 
                    Commentary("【多头止损:卖平委托成交!】"); 
                 } 
                 BKFLG = 0; //买开标志归0 
                 SPFLG = 0; //卖平标志归0 
                 BZYFLG = 0; //多头止盈标志归0 
              } 
           }
    
          //----------------------委托处理--------------------//
    
          if(BKFLG == 0) //如果没有买开委托 
           { 
              if(BKC == 1) //如果满足做多条件 
              { 
                 Commentary("【多头开仓:买开委托发出!】"); 
                 BKID = A_SendOrder(Enum_Buy,Enum_Entry,N,ASK); //以对价发出N手的买开委托 
                 BKFLG = 1; //已发出买开委托 
              } 
           }
    
          if(BKFLG == 2 && SPFLG == 0) //如果买开委托已成交,且没有卖平委托 
           { 
              if(BZYFLG == 0) //如果多头止盈未开启 
              { 
                 if(NEWP >= BKAP + M1 * MINP) //如果最新价大于等于买开委托成交均价加M1个价位 
                 { 
                    Commentary("【多头止盈:多头止盈开启!】"); 
                    BHP = NEWP; //多头最高价设为最新价 
                    BZYFLG = 1; //多头止盈开启 
                 } 
              } 
              else if(BZYFLG == 1) //如果多头止盈已开启 
              { 
                 BHP = max(NEWP,BHP); //多头最高价 
                 if(NEWP <= BHP - M2 * MINP) //如果最新价小于等于多头最高价减M2个价位 
                 { 
                    if(BRP > 0) //如果有多头可用持仓 
                    { 
                       Commentary("【多头止盈:卖平委托发出!】"); 
                       SPID = A_SendOrder(Enum_Sell,Enum_Exit,BRP,BID); //以对价发出多头可用持仓手数的卖平委托 
                       SPFLG = 1; //已发出多头止盈卖平委托 
                       BZYFLG = 2; //多头止盈已卖平 
                    } 
                 } 
              } 
              if(BZYFLG != 2) //如果多头止盈未卖平 
              { 
                 if(NEWP <= BKAP - M3 * MINP) //如果最新价小于等于买开委托成交均价减M3个价位 
                 { 
                    Commentary("【多头止损:卖平委托发出!】"); 
                    SPID = A_SendOrder(Enum_Sell,Enum_Exit,BRP,BID); //以对价发出多头可用持仓手数的卖平委托 
                    SPFLG = 2; //已发出多头止损卖平委托 
                 } 
              } 
           } 
        } 
    End

    算法交易模型执行效果如下图所示,开仓之后满足止损平仓条件,会自动发出平仓委托:

    手动交易+算法交易案例四:实现自己的止盈止损策略
    超长k线数据案例一:超长k线数据测试 量化交易

    超长k线数据案例一:超长k线数据测试

    前言 问题一:超长的K线数据有什么用? 以上期所的螺纹钢合约为例,螺纹钢2009年挂牌交易至今,已经有超过10年的历史数据。前8年的历史数据囊括了2009年的急涨急跌行情、2011年的震荡行情、201...