24经典的海龟交易策略重现

海龟交易系统是一种著名的趋势跟随交易策略

最初由商品交易员理查德·丹尼斯和他的合伙人比尔·埃克哈特在1980年代开发

他们招募并培训了一批交易者,称为“海龟”,教授他们这套系统化的交易方法。海龟们遵循一套严格的规则来进行期货市场的交易,这些规则涵盖了市场选择、资金管理、入市、止损和平仓等方面。

最终这批“海龟”有一部分严格遵守策略规则的交易员取得巨大的成功!

今天民工把海龟交易策略写出来,进行一部分期货品种的策略,看看效果如何!

海龟交易系统的组成部分

1. 市场选择:海龟交易系统适用于多种市场,包括外汇、金属、能源、农产品和债券等期货市场。选择市场的原则是多样化投资,以分散风险。

2. 资金管理:海龟们使用一种基于N(即平均真实波幅ATR)的风险管理方法来确定每笔交易的风险金额,通常将账户的1%至2%作为单次交易的最大损失限额。

3. 入市规则:

突破入市:海龟交易采用了一种简单的突破策略,通常是在价格超过过去20天的最高点时买入,或在价格跌破过去20天的最低点时卖出。

长周期突破入市:为了捕捉更大的趋势,还使用了55天的突破策略。

4. 止损规则:

在入市后,海龟们会设置止损点,通常是在入市价格下方2N(多头)或上方2N(空头)的位置。

5. 加仓规则:

如果趋势持续,价格继续朝有利的方向发展,海龟们会在特定条件下进行加仓。例如,价格每增加0.5N,就会增加相同的头寸。

6. 平仓规则:

平仓通常发生在价格反转,触及了10天的最低点(多头)或最高点(空头)时。

海龟交易系统的核心在于它的简单性和系统化。

它通过追踪趋势并在市场达到一定水平时入市,然后设置固定的止损点来限制损失,同时在趋势继续时逐步增加头寸。

这种方法旨在捕捉市场的主要趋势,并通过严格的止损规则来保护资本

策略代码主体:

Params

Numeric RiskRatio(1); // 风险比例 (% Risk Per N),范围0-100

Numeric ATRLength(20); // 平均真实波幅 (ATR) 的计算周期

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;

// 计算ATR

AvgTR = XAverage(TrueRange, ATRLength);

N = AvgTR[1];

// 计算总资产

TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();

// 根据风险比例和N值计算交易单位

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);

// 注释输出N值等信息

Commentary(“N=” + Text(N));

Commentary(“preEntryPrice=” + Text(preEntryPrice));

Commentary(“PreBreakoutFailure=” + IIFString(PreBreakoutFailure, “True”, “False”));

// 如果没有仓位,且不使用过滤条件或过滤条件允许

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;

SellShort(TurtleUnits, myEntryPrice);

SendOrderThisBar = True;

PreBreakoutFailure = False;

}

}

// 长周期突破开仓

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(1, 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(1, 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)

{

myEntryPrice = Open;

preEntryPrice = myEntryPrice;

Buy(1, myEntryPrice);

SendOrderThisBar = True;

}

While(High >= preEntryPrice + 0.5 * N)

{

myEntryPrice = preEntryPrice + 0.5 * N;

preEntryPrice = myEntryPrice;

Buy(1, myEntryPrice);

SendOrderThisBar = True;

}

}

// 多仓止损

If(Low <= preEntryPrice – 2 * N && SendOrderThisBar == false)

{

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)

{

myEntryPrice = Open;

preEntryPrice = myEntryPrice;

SellShort(1, myEntryPrice);

SendOrderThisBar = True;

}

While(Low <= preEntryPrice – 0.5 * N)

{

myEntryPrice = preEntryPrice – 0.5 * N;

preEntryPrice = myEntryPrice;

SellShort(1, myEntryPrice);

SendOrderThisBar = True;

}

}

// 空仓止损

If(High >= preEntryPrice + 2 * N && SendOrderThisBar == false)

{

myExitPrice = preEntryPrice + 2 * N;

myExitPrice = IIF(myExitPrice < Open, Open, myExitPrice); // 大跳空时用开盘价

BuyToCover(0, myExitPrice); // 数量用0的情况下将全部平仓

PreBreakoutFailure = True;

}

}

}

End

策略说明:

入场逻辑

突破开仓:当价格突破唐奇安通道的上轨或下轨时,根据方向开多仓或空仓。

长周期突破开仓:除了常规的短周期突破,还使用较长周期的唐奇安通道作为额外的开仓信号。

出场逻辑

止损:多仓在价格低于进入价格减去2N时止损;空仓在价格高于进入价格加上2N时止损。

止盈:多仓在价格低于一段时间内的最低价时平仓;空仓在价格高于一段时间内的最高价时平仓。

过滤逻辑

过滤条件:如果使用过滤条件且上次交易为失败,则不进行新的交易。

止损逻辑

止损条件:如果多单或空单出现亏损,并且亏损价格小于或大于开盘价时,直接进行止损。

金融民工做了10个品种的测试,时间是从2009年1月5号至今,K线级别为日线,样品为各商品指数,每个商品100万rmb,股指实际测试的时候要在500万以上——rb螺纹钢、i铁矿石、cu铜、j焦炭、ru橡胶、PTA、au黄金、sr白糖、m豆粕、IF股指:

24经典的海龟交易策略重现

我理解海龟交易法则核心在于信心、连续性和纪律,反映出人性的弱点;大多数人是坚持不了的,成功的海龟必定心怀信仰

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/307360
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 48分钟前
下一篇 45分钟前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注