设为首页收藏本站

 找回密码
 注册
查看: 2944|回复: 3

请教版主一个关于ATR止损的问题 [复制链接]

Rank: 1

精华
0
UID
238802
积分
10
帖子
6
主题
4
阅读权限
10
注册时间
2016-8-14
最后登录
2017-8-17
发表于 2016-10-21 21:31:19 |显示全部楼层
我基于双均线策略,加了一个ATR的吊灯止损,先对双均线的两个参数优化,然后优化止损的参数,但优化出来的ATR倍数都很大,都在10以上,但是我查阅很多资料都说是3倍或者2.5-4.0之间。
请问为什么我的倍数这么大?以下是策略,请问有什么问题吗?
Params
        Numeric FastLength(5);
        Numeric SlowLength(20);
       
        Numeric ATRs(3);  //ATR止损倍数
        Numeric ATRLength(20);  //ATR周期
Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
       
        NumericSeries ATR0;
        NumericSeries ATR; //ATR(平均真实波动)
        NumericSeries AvgATR;
        Numeric MyExitPrice; //平仓价格
       
        NumericSeries HighestAfterEntry;  //记录开仓后出现的最高价
        NumericSeries LowestAfterEntry;  //记录开仓后出现的最低价
Begin
        AvgValue1 = AverageFC(Close,FastLength);
        AvgValue2 = AverageFC(Close,SlowLength);
       
        ATR0 = Max(abs(High-Low),abs(Close[1]-High));
        ATR = Max(ATR0,abs(Close[1]-Low));
        AvgATR = AverageFC(ATR,ATRLength);

        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);               
       
        // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
        {
                Buy(1,Open);
        }
       
        If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
        {
                SellShort(1,Open);
        }
        //PlotNumeric("PL",Portfolio_TotalProfit);       
       
        If (BarsSinceEntry == 0)  //开仓Bar
        {
            HighestAfterEntry = High[1];
                LowestAfterEntry =Low[1];  
         }Else  //非开仓Bar时进行以下运算
            {
                   //记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
                   HighestAfterEntry=Max(HighestAfterEntry,High);
                   //记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
                   LowestAfterEntry=Min(LowestAfterEntry,Low);
                 }
               

If (MarketPosition ==1 And BarsSinceEntry >=1)  //有多仓的情况
    {
          If(Low <= HighestAfterEntry-AvgATR*ATRs)
          {
             MyExitPrice=HighestAfterEntry-AvgATR*ATRs;  //止损设置
                 //如果该Bar开盘价即跳空触发,则用开盘价代替
                 If (Open < MyExitPrice)
                 {
                 MyExitPrice=Open;
                 }
          Sell(0,MyExitPrice);
          }
}Else If (MarketPosition ==-1 And BarsSinceEntry >=1)  //有空仓的情况
    {
          If(High >= LowestAfterEntry+AvgATR*ATRs)
          {
             MyExitPrice=LowestAfterEntry+AvgATR*ATRs;  //止损设置
                 //如果该Bar开盘价即跳空触发,则用开盘价代替
                 If (Open>MyExitPrice)
                 {
                 MyExitPrice=Open;
                 }
           BuyToCover(0,MyExitPrice);
     }
}
End

感谢帮助,在此谢过!

Rank: 6Rank: 6

精华
0
UID
208212
积分
2001
帖子
103
主题
24
阅读权限
70
注册时间
2015-5-2
最后登录
2019-6-18
发表于 2016-10-25 10:37:22 |显示全部楼层
因为你的交易策略和原著不一样

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
208212
积分
2001
帖子
103
主题
24
阅读权限
70
注册时间
2015-5-2
最后登录
2019-6-18
发表于 2016-11-5 22:08:32 |显示全部楼层
Params
        Numeric FastLength(2,2,30,1);
        Numeric SlowLength(15,15,60,1);
        
        Numeric ATRs(4,1,15,0.1);  //ATR止损倍数
        Numeric ATRLength(22,2,30,1);  //ATR周期
Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
        
        NumericSeries ATR0;
        NumericSeries ATR; //ATR(平均真实波动)
        NumericSeries AvgATR;
        Numeric MyExitPrice; //平仓价格
        
        NumericSeries HighestAfterEntry;  //记录开仓后出现的最高价
        NumericSeries LowestAfterEntry;  //记录开仓后出现的最低价
Begin
        AvgValue1 = xAverage(Close,FastLength);
        AvgValue2 = xAverage(Close,SlowLength);
        
        ATR0 = Max(abs(High-Low),abs(Close[1]-High));
        ATR = Max(ATR0,abs(Close[1]-Low));
        AvgATR = AverageFC(ATR,ATRLength);

        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);               
        
        // 集合竞价和小节休息过滤
        If(IsCallAuctionTime()) Return;
        
        If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
        {
                Buy(1,Open);
        }
        
        If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
        {
                SellShort(1,Open);
        }
        //PlotNumeric("PL",Portfolio_TotalProfit);        
        
        If (BarsSinceEntry == 0)  //开仓Bar
        {
            HighestAfterEntry = High[1];
                LowestAfterEntry =Low[1];  
         }Else  //非开仓Bar时进行以下运算
            {
                   //记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
                   HighestAfterEntry=Max(HighestAfterEntry,High);
                   //记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
                   LowestAfterEntry=Min(LowestAfterEntry,Low);
                 }
               

If (MarketPosition ==1 And BarsSinceEntry >=1)  //有多仓的情况
    {
          If(Low <= LowestAfterEntry-AvgATR*ATRs)
          {
             MyExitPrice=LowestAfterEntry-AvgATR*ATRs;  //止损设置
                 //如果该Bar开盘价即跳空触发,则用开盘价代替
                 If (Open < MyExitPrice)
                 {
                 MyExitPrice=Open;
                 }
          Sell(0,MyExitPrice);
          }
}Else If (MarketPosition ==-1 And BarsSinceEntry >=1)  //有空仓的情况
    {
          If(High >= HighestAfterEntry+AvgATR*ATRs)
          {
             MyExitPrice=HighestAfterEntry+AvgATR*ATRs;  //止损设置
                 //如果该Bar开盘价即跳空触发,则用开盘价代替
                 If (Open>MyExitPrice)
                 {
                 MyExitPrice=Open;
                 }
           BuyToCover(0,MyExitPrice);
     }
}
End

使用道具 举报

Rank: 2

精华
0
UID
234039
积分
71
帖子
59
主题
9
阅读权限
30
注册时间
2016-5-9
最后登录
2018-5-21
发表于 2017-12-29 16:37:07 |显示全部楼层
怎么没有写止盈的代码?

使用道具 举报

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

bottom

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

GMT+8, 2024-3-29 09:06

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部