海龟交易系统 海龟交易系统是一个完整的交易系统,它包括市场

来源:雪球App,作者: 刘小度,(https://xueqiu.com/3379235098/174764714)

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

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

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

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

海龟交易认为头寸规模是所有交易系统最重要的部分之一。丹尼斯引入一个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

友情链接