LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > (空投福利)海龟交易法则的由来和介绍(附代码)

(空投福利)海龟交易法则的由来和介绍(附代码)

2020-12-05 问心吧 来源:区块链网络

目录

前言

海龟交易法则的由来

海龟交易法则的组成

海龟交易法则的代码参考

空投福利和谷币介绍

前言

咕噜说:

点赞收益规则已优化。

长文阅读三分钟后,点赞、评论,双方受益!

天下熙熙皆为利往,天下攘攘皆为利去

之前一直想学量化,说到量化肯定离不开《海龟交易法则》,这本书可以在微信读书上找到,有兴趣的朋友可以看一下。目前我还没有看完。这几天我在尝试游戏挖矿,费了好几天时间,后面我会抽空记录一下最近的成果。

海龟交易法则的由来


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分,过时不候。

感谢君本善良提供的空投,感恩!

—-

编译者/作者:问心吧

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...