开拓者期货期权程序化系统交易论坛

标题: 请帮主帮忙将此策略实现 [打印本页]

作者: drasper    时间: 2010-9-27 10:16:15     标题: 请帮主帮忙将此策略实现

时间架构:1min

品种开仓:读取1minBar的前五个BarClosePrice取其Max和Min值 ,如果当前Bar的价格低于前五个BarClosePrice的Min值则市价卖出开仓 ,如果当前Bar的价格高于前五个BarClosePrice的Max值则市价买入开仓。

初始止损设置及 跟踪止损设置:如果是卖出开仓,则当前Bar的价格高于前两个1minBar的highprice的Max值 时市价止损;如果是买入开仓,则当前Bar的价格低于前两个1minBar的lowprice的Min值市价止损。每过一个时间架构向后延伸重新设置一次止损价。

跟踪止损的生效:从开仓Bar之后的第一根Bar开始,跟踪止损生效。

头寸管理:交易时间内允许同时持有多空各一手头寸。

强制平仓:当日14:59开始,停止开仓,全部市价平仓。

强制停止开仓:当日连续N次止损后,当日停止开仓。账户净资产的Drawdown达到账户X时,强制停止交易。

刚开始学习,请帮主帮忙将此策略实现,谢谢!
作者: drasper    时间: 2010-9-27 14:55:52

我写了策略,发现只能进行一个方向的开仓,请版主指教!
Params
      Numeric lots(1);//每单的手数
    Numeric AllowLong(1); //允许多单的数量
    Numeric AllowShort(1);//允许空单的数量
    Numeric AllowCountLoss(5);//允许亏损的次数
    Numeric AllowAmountLoss(5000);//允许亏损的金额

Vars
    Numeric preMP; //历史持仓
   Numeric curMP;//现在持仓
   Numeric max5Close;//最近5根bar收盘价的最大值
   Numeric min5Close;//最近5根bar收盘价的最小值
   Numeric max2High;//最近2根bar最高价的最大值
   Numeric min2Low;//最近2根bar最低价的最小值
   Numeric CountLong(0);//多单统计
   Numeric CountShort(0);//空单统计
   Numeric CountLoss(0);//亏损的次数统计
   Numeric AmountLoss(0);//亏损的金额统计
       
Begin
    preMP = MarketPosition;
    If(Time > 0.145900 && Time < 0.150030 ) // 收盘平仓
    {
        If(preMP == 1){
                   Sell;
                   return;
                }
        else if(preMP == -1){
           BuyToCover;
           return;
         }
          return;
    }
        max5Close= Max(Max(Max(Max(Close[1],Close[2]),Close[3]),Close[4]),Close[5]);//前五个周期的最大值
        min5Close=Min(Min(Min(Min(Close[1],Close[2]),Close[3]),Close[4]),Close[5]);//前五个周期的最小值
       
        max2High= Max(High[1],High[2]);//前两个周期的最大值
        min2Low=Min(Low[1],Low[2]);//前两个周期的最小值

        if(preMp==0){
                if(CountLong<AllowLong){//允许开多单
                   If(Close > max5Close){
                                Buy(lots);
                                CountLong=CountLong+1;
                   }
                }
                if(CountShort<AllowShort){//允许开空单
                   If(Close < min5Close){
                                SellShort(lots);
                                CountShort=CountShort+1;       
                        }
                }
        }       
        Else If(preMP == 1) //多单
        {
        If (Close<min2Low){
                        Sell(lots);
                        CountLong=CountLong-1;
                       
                        //大于预订的亏损次数
                        CountLoss = NumLosTrades();
                        if(CountLoss>=AllowCountLoss) {
                curMP =        MarketPosition;               
                                If(curMP == 1){
                                                Sell;
                                                return;
                                }else if(curMP == -1){
                                                BuyToCover;
                                                return;
                                }
                                return;                         
                        }
                        //大于预订的亏损金额
                        AmountLoss = GrossLoss();
                        if(AmountLoss>=AllowAmountLoss) {
                            curMP =        MarketPosition;       
                                If(curMP == 1){
                                                Sell;
                                                return;
                                        }else if(curMP == -1){
                                                BuyToCover;
                                                return;
                                        }
                                        return;                       
                        }
                }

        }
        Else If(preMP == -1) //空单
    {
        If (Close >max2High){
            BuyToCover(lots);
                        CountShort=CountShort-1;
                       
                        //大于预订的亏损次数
                        CountLoss = NumLosTrades();
                        if(CountLoss>=AllowCountLoss) {
                            curMP =        MarketPosition;       
                                If(curMP == 1){
                                           Sell;
                                           return;
                                }else if(curMP == -1){
                                           BuyToCover;
                                           return;
                                }
                                return;       
                        }
                        //大于预订的亏损金额
                        AmountLoss = GrossLoss();
                        if(AmountLoss>=AllowAmountLoss) {
                            curMP =        MarketPosition;       
                                If(curMP == 1){
                                                Sell;
                                                return;
                                }else if(curMP == -1){
                                                BuyToCover;
                                                return;
                                }
                                return;                       
                        }                       
        }
   }
End




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2