海龟交易系统是一种著名的趋势跟随交易策略
最初由商品交易员理查德·丹尼斯和他的合伙人比尔·埃克哈特在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股指:

我理解海龟交易法则核心在于信心、连续性和纪律,反映出人性的弱点;大多数人是坚持不了的,成功的海龟必定心怀信仰
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/307360
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!