海龟交易系统

2023-03-02 15:25:39 0

海龟交易系统

海龟交易系统是一个完整的交易系统,它包括市场----买卖什么,头寸规模----买卖多少,市----何时买卖止损----何时退出亏损的头寸,离市----何时退出赢利的头寸,策略----如何买卖等。

海龟交易系统有三个特点:其一,是一个完整的交易系统,其法则覆盖了交易的各个方面。对于交易中所涉及到的每项决策,系统都会给出答案。其二,是一个机械化的交易系统。正是由于其交易系统的完整性,所以,系统不给交易员留下一点主观想象决策的余地。其三,是一个被检测可以赚钱的交易系统。正是由于此,不管交易员在赚钱还是亏钱时都容易接受信号。

以下,对海龟交易系统作一简要的阐述:

对于市场,海龟们交易的是美国芝加哥和纽约交易所具有流动性的期货品种。

海龟交易认为头寸规模是所有交易系统最重要的部分之一。丹尼斯引入一个N的概念来表示某个特定市场根本的波动性,并用一个基于波动性的常数百分比用作头寸规模风险的测算标准。这样提高了多样化的收益,并且增加了赢利交易弥补亏损交易的可能性。

海龟用两个相关的系统入市,这两个系统都以唐奇安的通道突破系统为基础,比如:系统一:以20日突破为基础的偏短线系统和系统二:以50日突破为基础的较简单的长线系统。20日突破可定义为超过前20天的最高价或最低价。另外,在入市系统上,海龟引入了增加单位和连续性的定义。它认为,一年中大部分利润可能仅仅来自于两三次大的赢利交易,因此增加单位和连续性显得尤为重要。

海龟认为退出亏损头寸绝对是至关重要的。有两点说明:第一,在你建立头寸之前,你应该预先确定退出的点位;其二,如果市场的波动触及你的价位,你就必须每一次都毫无例外地退出。另外,海龟使用以N为基础的止损以避免净值的大幅损失,它能够适应市场的波动性,并使更不稳定的市场有更宽的止损。

海龟对于赢利头寸使用以突破为基础的离市策略。赢利头寸的正确退出是交易最重要的方面之一,也是海龟系统中唯一最难的部分。人具有一种想要早点离市的强烈倾向,但这恰恰使大幅赢利变成微弱赢利的交易。在大幅赢利的交易中,遵守纪律和坚持原则的能力是成功老道的交易员的特征。

海龟交易策略包括入市指令、快速波动的市场、同步入市信号、买强卖弱和更换期满合约等。

最后,海龟法则建议进一步学习的范围,包括交易心理学、资金管理和交易研究等。

关于海龟交易法则所得出的结论,我们引用理查德.丹尼斯说过的话:“我总是说你们可以在报纸上发表我的交易法则,没有人会遵循它们。关键在于连续性和纪律。几乎任何人都能够罗列一张交易法则的清单,其中的80%与我们教授给我们的学员的一样。他们所不能做的是带给他们自信,甚至在情况恶化时仍坚持那些法则。”

总之,海龟交易法则在于有信心有纪律连续地应用所学到的法则,这就是海龟们作为交易员成功的秘诀。

关于海龟的核心:

1、掌握优势:找到一个期望值为正的交易策略,因为从长期看,他能创造正的回报。

2、管理风险:控制风险,守住阵地,否则你可能等不到创造成果的一天。

3、坚定不移:唯有坚定不移的执行你的策略,你才能真正获得系统的成效。

4、简单明了:从长久看,简单的系统比复杂的系统更有生命力。

这四点原则,可以说是道出了交易系统的本质:根据市场规律、人性特点尤其是群体行为的特点,找到具有正期望的出入市方法,这就是所谓的优势;管理仓位、分配资金,在将破产风险控制在可接受的范围内的前提下尽可能提高回报;没有坚定不移的执行纪律,再好的系统,也无法发挥它应有的效果;大道至简,过于复杂的系统往往只对某种市场、某段时间有效,不具备长期的生命力。

附:海龟交易策略代码
Params
    Numeric RiskRatio(1);                   // % Risk Per N ( 0 - 100)
    Numeric ATRLength(20);                  // 平均波动周期 ATR Length
    Numeric boLength(20);                   // 短周期 BreakOut Length
    Numeric fsLength(55);                   // 长周期 FailSafe Length
    Numeric teLength(10);                   // 离市周期 Trailing Exit Length
    Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件
Vars
    Numeric MinPoint;                       // 最小变动单位
    NumericSeries AvgTR;                    // ATR
    Numeric N;                              // N 值
    Numeric TotalEquity;                    // 按最新收盘价计算出的总资产
    Numeric TurtleUnits;                    // 交易单位
    NumericSeries DonchianHi;               // 唐奇安通道上轨,延后1个Bar
    NumericSeries DonchianLo;               // 唐奇安通道下轨,延后1个Bar
    NumericSeries fsDonchianHi;             // 唐奇安通道上轨,延后1个Bar,长周期
    NumericSeries fsDonchianLo;             // 唐奇安通道下轨,延后1个Bar,长周期
    Numeric ExitHighestPrice;               // 离市时判断需要的N周期最高价
    Numeric ExitLowestPrice;                // 离市时判断需要的N周期最低价
    Numeric myEntryPrice;                   // 开仓价格
    Numeric myExitPrice;                    // 平仓价格
    Bool SendOrderThisBar(False);           // 当前Bar有过交易
    NumericSeries preEntryPrice(0);         // 前一次开仓的价格
    BoolSeries PreBreakoutFailure(false);   // 前一次突破是否失败
Begin
    // 集合竞价过滤
    If(!CallAuctionFilter()) Return;

    If(BarStatus == 0)
    {
        preEntryPrice = InvalidNumeric;
        PreBreakoutFailure = false;
    }

    MinPoint = MinMove*PriceScale;
    AvgTR = XAverage(TrueRange,ATRLength);
    N = AvgTR[1];
    TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
    TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
    TurtleUnits = IntPart(TurtleUnits); // 对小数取整

    DonchianHi = HighestFC(High[1],boLength);
    DonchianLo = LowestFC(Low[1],boLength);

    fsDonchianHi = HighestFC(High[1],fsLength);
    fsDonchianLo = LowestFC(Low[1],fsLength);

    ExitLowestPrice = LowestFC(Low[1],teLength);
    ExitHighestPrice = HighestFC(High[1],teLength);

    Commentary("N="+Text(N));
    Commentary("preEntryPrice="+Text(preEntryPrice));
    Commentary("PreBreakoutFailure="+IIFString(PreBreakoutFailure,"True","False"));

    // 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作
    If(MarketPosition == 0 && ((!LastProfitableTradeFilter) Or (PreBreakoutFailure)))
    {
        // 突破开仓
        If(High > DonchianHi && TurtleUnits >= 1)
        {
            // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = min(high,DonchianHi + MinPoint);
            myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            preEntryPrice = myEntryPrice;
            Buy(TurtleUnits,myEntryPrice);
            SendOrderThisBar = True;
            PreBreakoutFailure = False;
        }

        If(Low < DonchianLo && TurtleUnits >= 1)
        {
            // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = max(low,DonchianLo - MinPoint);
            myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            preEntryPrice = myEntryPrice;
            SendOrderThisBar = True;
            SellShort(TurtleUnits,myEntryPrice);
            SendOrderThisBar = True;
            PreBreakoutFailure = False;
        }
    }

    // 长周期突破开仓 Failsafe Breakout point
    If(MarketPosition == 0)
    {
        Commentary("fsDonchianHi="+Text(fsDonchianHi));
        If(High > fsDonchianHi && TurtleUnits >= 1)
        {
            // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = min(high,fsDonchianHi + MinPoint);
            myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            preEntryPrice = myEntryPrice;
            Buy(TurtleUnits,myEntryPrice);
            SendOrderThisBar = True;
            PreBreakoutFailure = False;
        }

        Commentary("fsDonchianLo="+Text(fsDonchianLo));
        If(Low < fsDonchianLo && TurtleUnits >= 1)
        {
            // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
            myEntryPrice = max(low,fsDonchianLo - MinPoint);
            myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
            preEntryPrice = myEntryPrice;
            SellShort(TurtleUnits,myEntryPrice);
            SendOrderThisBar = True;
            PreBreakoutFailure = False;
        }
    }

    If(MarketPosition == 1) // 有多仓的情况
    {
        Commentary("ExitLowestPrice="+Text(ExitLowestPrice));
        If(Low < ExitLowestPrice)
        {
            myExitPrice = max(Low,ExitLowestPrice - MinPoint);
            myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
            Sell(0,myExitPrice);    // 数量用0的情况下将全部平仓
        }Else
        {
            If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
            {
                If(Open >= preEntryPrice + 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                {
                    myEntryPrice = Open;
                    preEntryPrice = myEntryPrice;
                    Buy(TurtleUnits,myEntryPrice);
                    SendOrderThisBar = True;
                }

                while(High >= preEntryPrice + 0.5*N) // 以最高价为标准,判断能进行几次增仓
                {
                    myEntryPrice = preEntryPrice + 0.5 * N;
                    preEntryPrice = myEntryPrice;
                    Buy(TurtleUnits,myEntryPrice);
                    SendOrderThisBar = True;
                }
            }

            // 止损指令
            If(Low <= preEntryPrice - 2 * N && SendOrderThisBar == false) // 加仓Bar不止损
            {
                myExitPrice = preEntryPrice - 2 * N;
                myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
                Sell(0,myExitPrice); // 数量用0的情况下将全部平仓
                PreBreakoutFailure = True;
            }
        }
    }Else If(MarketPosition ==-1) // 有空仓的情况
    {
        // 求出持空仓时离市的条件比较值
        Commentary("ExitHighestPrice="+Text(ExitHighestPrice));
        If(High > ExitHighestPrice)
        {
            myExitPrice = Min(High,ExitHighestPrice + MinPoint);
            myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
            BuyToCover(0,myExitPrice);    // 数量用0的情况下将全部平仓
        }Else
        {
            If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)
            {
                If(Open <= preEntryPrice - 0.5*N) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
                {
                    myEntryPrice = Open;
                    preEntryPrice = myEntryPrice;
                    SellShort(TurtleUnits,myEntryPrice);
                    SendOrderThisBar = True;
                }

                while(Low <= preEntryPrice - 0.5*N) // 以最低价为标准,判断能进行几次增仓
                {
                    myEntryPrice = preEntryPrice - 0.5 * N;
                    preEntryPrice = myEntryPrice;
                    SellShort(TurtleUnits,myEntryPrice);
                    SendOrderThisBar = True;
                }
            }

            // 止损指令
            If(High >= preEntryPrice + 2 * N &&SendOrderThisBar==false) // 加仓Bar不止损
            {
                myExitPrice = preEntryPrice + 2 * N;
                myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
                BuyToCover(0,myExitPrice); // 数量用0的情况下将全部平仓
                PreBreakoutFailure = True;
            }
        }
    }
End

关键字:  海龟交易系统 海龟交易系统是一个完整的交易系统,它包括市场----买卖什么,头寸规模----买卖多少,市----何时买卖止损----何...  雪球