设为首页收藏本站

 找回密码
 注册
查看: 5760|回复: 1
打印 上一主题 下一主题

请帮主帮忙将此策略实现 [复制链接]

Rank: 2

精华
0
UID
4583
积分
90
帖子
27
主题
2
阅读权限
30
注册时间
2009-6-7
最后登录
2013-8-19
跳转到指定楼层
1#
发表于 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时,强制停止交易。

刚开始学习,请帮主帮忙将此策略实现,谢谢!

Rank: 2

精华
0
UID
4583
积分
90
帖子
27
主题
2
阅读权限
30
注册时间
2009-6-7
最后登录
2013-8-19
2#
发表于 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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-3 00:34

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部