设为首页收藏本站

 找回密码
 注册
查看: 955|回复: 1

原始跟踪止损止盈策略有个问题,想咨询下 [复制链接]

Rank: 1

精华
0
UID
288309
积分
18
帖子
7
主题
7
阅读权限
10
注册时间
2020-1-31
最后登录
2021-4-2
发表于 2020-7-14 11:39:14 |显示全部楼层
Vars
    Numeric MinPoint;           // 一个最小变动单位,也就是一跳
    Numeric MyEntryPrice;       // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
    Numeric TrailingStart1(50); // 跟踪止损启动设置1
    Numeric TrailingStart2(80); // 跟踪止损启动设置2
    Numeric TrailingStop1(30);  // 跟踪止损设置1
    Numeric TrailingStop2(20);  // 跟踪止损设置2
    Numeric StopLossSet(50);    // 止损设置
    Numeric MyExitPrice;        // 平仓价格
    NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
    NumericSeries LowestAfterEntry;         // 开仓后出现的最低价
Begin
    ...
    If(BarsSinceentry == 0)
    {
        HighestAfterEntry = Close;
        LowestAfterEntry = Close;
        If(MarketPosition <> 0)
        {
            HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);   // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
            LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);     // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
        }
    }else
    {
        HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
        LowestAfterEntry = Min(LowestAfterEntry,Low);    // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
    }
    Commentary("HighestAfterEntry="+Text(HighestAfterEntry));
    Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
    MinPoint = MinMove*PriceScale;
    MyEntryPrice = AvgEntryPrice;
    If(MarketPosition==1) // 有多仓的情况
    {
        If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint)   // 第二级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)
            {
                MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;
                If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                Sell(0,MyExitPrice);
            }
        }else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
            {
                MyExitPrice = HighestAfterEntry[1] - TrailingStop1*MinPoint;
                If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                Sell(0,MyExitPrice);
            }
        }else if(Low <= MyEntryPrice - StopLossSet*MinPoint)//可以在这里写上初始的止损处理
        {
            MyExitPrice = MyEntryPrice - StopLossSet*MinPoint;
            If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            Sell(0,MyExitPrice);
        }
    }else if(MarketPosition==-1) // 有空仓的情况
    {
        If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint)   // 第二级跟踪止损的条件表达式
        {
            If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
            {
                MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint;
                If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                BuyToCover(0,MyExitPrice);
            }
        }else if(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
            {
                MyExitPrice = LowestAfterEntry[1] + TrailingStop1*MinPoint;
                If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
                BuyToCover(0,MyExitPrice);
            }
        }else If(High >= MyEntryPrice + StopLossSet*MinPoint)//可以在这里写上初始的止损处理
        {
            MyExitPrice = MyEntryPrice + StopLossSet*MinPoint;
            If(Open > MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
            BuyToCover(0,MyExitPrice);
        }
    }
    ...
End

举例:这个代码里为什么要 MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint
不能直接MyExitPrice = HighestAfterEntry - TrailingStop2*MinPoint  。

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
发表于 2020-7-14 18:17:04 |显示全部楼层
因为判断是否会跟踪出场的条件是:
  1.   If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
  2.             {
  3.                 MyExitPrice = HighestAfterEntry[1] - TrailingStop1*MinPoint;
  4.                 If(Open < MyExitPrice) MyExitPrice = Open;      // 如果该Bar开盘价有跳空触发,则用开盘价代替
  5.                 Sell(0,MyExitPrice);
  6.             }
复制代码
注意这个Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint
那么如果用当前HighestAfterEntry的话,如果当前K线有个很低的最低价时,是不是有可能会触发跟踪出场,而实际不应该? 这些内容建议您找TB以前录制的培训视频看看吧,里面都会详细讲解到的。

使用道具 举报

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

bottom

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

GMT+8, 2024-3-29 03:05

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部