目录 前言 海龟交易法则的由来 海龟交易法则的组成 海龟交易法则的代码参考 空投福利和谷币介绍 前言 咕噜说: 点赞收益规则已优化。 长文阅读三分钟后,点赞、评论,双方受益! 天下熙熙皆为利往,天下攘攘皆为利去 之前一直想学量化,说到量化肯定离不开《海龟交易法则》,这本书可以在微信读书上找到,有兴趣的朋友可以看一下。目前我还没有看完。这几天我在尝试游戏挖矿,费了好几天时间,后面我会抽空记录一下最近的成果。 海龟交易法则的由来 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分,过时不候。 感谢君本善良提供的空投,感恩! —- 编译者/作者:问心吧 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
(空投福利)海龟交易法则的由来和介绍(附代码)
2020-12-05 问心吧 来源:区块链网络
LOADING...
相关阅读:
- 《无空投》聊聊我跟sushi的那些事儿;AC让sushi起飞了2020-12-05
- (区块链课堂实录和笔记)从零开始学区块链:区块链的运行原理;挖2020-12-05
- 去中心化衍生品交易协议DerivaDEX启动保险挖矿2020-12-05
- 浒灿:以太坊比特币12.5早间行情走势详解及点位操作指导2020-12-05
- DIBI生态全球战略发布会长沙站圆满落幕2020-12-05