目录
前言
海龟交易法则的由来
海龟交易法则的组成
海龟交易法则的代码参考
空投福利和谷币介绍
前言
咕噜说:
点赞收益规则已优化。
长文阅读三分钟后,点赞、评论,双方受益!
天下熙熙皆为利往,天下攘攘皆为利去
之前一直想学量化,说到量化肯定离不开《海龟交易法则》,这本书可以在微信读书上找到,有兴趣的朋友可以看一下。目前我还没有看完。这几天我在尝试游戏挖矿,费了好几天时间,后面我会抽空记录一下最近的成果。
海龟交易法则的由来

20世纪80年代初,一群被称为“海龟交易员”的操盘手,诞生在华尔街。他们来自于不同行业,具有不同的个人和专业背景,其中大多数人没有一点金融投资或投资知识,更谈不上操盘经验。但经两周的集中密集式培训后,他们却在随后的几十年中,用同一套系统和策略在不同投资和投资市场屡创佳绩,缔造了一个在整个人类交易历史长河中的神话故事。
其实这个故事的缔造者本身就是一个神奇的人物。他用向家里人借来的1600美元创业,用400美元的交易资金起家,居然创造出2亿美元收益的神话。他就是被人们尊称为“世纪投机大师”,著名的政治活动家-理查德.丹尼斯。
海龟交易法则成功实行后,他认为:只要是一个有正常智力的人,经过培训,严格按他的系统和方法去做,均能在这个市场创造奇迹。但他的合伙人威廉.埃克哈特却坚持认为丹尼斯的想法是错的。于是,他们打了一个赌,以100万美元为赌注,选一批人做实验。1983年,当丹尼斯在新加坡参观完一个海龟养殖场后,突发灵感,决定把这批试验者取名为“海龟”。
之所以以海龟命名是基于两点:第一,海龟天生具有奔向海洋的本能;第二,绝大多数海龟会中途夭折,只有极少数可以长大并颐养天年。这跟金融交易市场的二八法则近似。正如丹尼斯所说的:“我们正在成长为交易员,就像他们正在成长为海龟一样。”
海龟成为交易史上最著名的实验,因为在随后的4年中,“海龟”们取得了年均复利80%的收益率,丹尼斯因此最终赢得了那100万美元。
l 丹尼斯证明了用一套简单的系统和法则,可以使本来很少或根本没有美元交易经验的人成为优秀的交易员。这批普通人在培训后的5年里,创造出了1.75亿美元收益的佳绩。
1998年,根据巴克莱交易集团的跟踪和统计,“海龟”中有3人圆满退休,其余11人作为期货基金经理创造了4.26亿美元的投资收益。在2002年,“海龟”们管理着14亿的美元交易资本,操盘收货1.81亿美元。全球前10位最佳期货交易经理中,有5位是“海龟成员。”
昨天我在币乎上看到一位网友对海龟交易法则的解读很有趣,他是这样解读的:海龟在碰到危险的时候会趴着装死,行情好,能游很快,行情不好,就趴着装死。
个人理解:海龟交易采用的是趋势追踪策略,也就是跟随市场趋势做交易,行情好的时候,在该盈利的地方就盈利;行情不好的时候,在该止损的地方就止损。
海龟交易法则的组成
海龟交易法则是一个完整的交易系统,完整的交易系统包括6部分
1、市场——买卖什么
2、头寸规模——买卖多少
3、入市——何时买卖
4、止损——何时退出亏损头寸
5、离市——何时退出赢利头寸
6、策略——如何买卖
其中简单说明一下入市、退市、止损
入市
分两种
第一种:以20日突破为基础的短期系统
第二种:以55日突破为基础的长期系统
退市
赢利的情况下
◆系统1:反向突破10日退出法则
◆系统2:方向突破10日退出法则
止损
海龟们任何一笔交易风险程度都不得超过2%,也就是在建立一个头寸规模单位(账户总资金的1%)后,反方向波动2个ATR止损,这个止损值是随着增加建立头寸规模单位变化,以做多为例,再建立一个头寸单位后,止损值则增加0.5个ATR。
海龟交易法则的代码(仅供参考)
TurtleTrader代码
建议微信“设置”→“通用”开启“横屏模式”阅读:
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;
}
}
} ElseIf(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
空投福利
谷币的获取方式

凡是点赞、留言评论和eos地址并转发的币友,由君本善良送空投谷币600枚,君本善良是一个乐善好施的人,希望大家多多关注君本善良的币乎号。
空投截止时间
今天23:59分,过时不候。
感谢君本善良提供的空投,感恩!
