股票学习网

股票行情网,股票入门,和讯股票,股票查询 - - 股票学习网!

海龟法则详细教学(海龟法则公式)

2023-04-15 03:20分类:SAR 阅读:

 

前面已经讲了海龟交易法则的市场选择、头寸规则以及关键N的计算发放,

今天周末继续写完,我们讲一下海龟的开仓、加仓、止损、止盈等核心内容,海龟作为一套完整的体系是很有学习和借鉴的必要的,个人觉得它的仓位管理模式还是很不错的,也是现在很多体系变通在应用的。当然学习它并不一定要完全去复制它,大家也可以在他的模式上进一步优化策略,只要有标准应该都是好的。当然程序化的好处就是可以用历史数据验证你的思路和策略。

今天开始谈入市

入市

海龟用两个相关的系统入市,这两个系统都以唐奇安的通道突破系统(Donchian’s channel breakout system)为基础。

在考虑某个交易系统时,一般的交易员通常是考虑入市信号方面的问题。他们相信,入市是所有交易系统最重要的一个方面。

他们可能会很吃惊地发现,海龟们所用的是基于理查德.唐奇安传授的通道系统的非常简单的入市系统。

海龟们得到了两种不同却有关系的突破系统法则,我们称这两个系统为系统一和系统二。我们完全可以按照自己的意愿自行决定将净值配置在何种系统上。我们中的一些人选用系统二交易所有的净值,一些人分别用净值的50%选择系统一,50%选择系统二,而其他人则选择了不同的组合。

系统一----以20日突破为基础的偏短线系统

系统二----以50日突破为基础的较简单的长线系统

添油:唐奇安通道(Donchian channel)这个策略可以称得上是所有日内策略的鼻祖。其最早大名远扬是在1970年,美国有个公司对当时最流行的机械交易系统进行了模拟测试和比较研究,其研究结果表明,在所有测试对象中唐奇安通道规则最为成功。1983年,他被推举为首届“最佳获利奖”得主,并将此奖项改为唐奇安奖。后来美国又有个著名的“海龟法则”造就了不少千万富翁。当时海龟法则是保密的,过了十几年,海龟法则解密,人们才发现他们用的是修正版的唐奇安通道规则。 唐奇安通道规则为:当最高价高于前X个K的最大最高价时,做多;当最低价低于前X个K的最小最低价时,做空。如果你想对往后回溯多少K进行优化,你会发现在不同市场会得到不同的结果,甚至同一市场不同时期最优值也是不同的。但是一般默认值为20。为什么默认的X是20呢?这又有个典故——神奇数字。Donchian在开发唐奇安通道的期间,碰巧阅读到整形外科医生Maxwel Maltz博士在1960年所作的“心理控制论”(这本书在1989年被重新发现)。Maltz博士称在整形外科手术过程中,患者最少需要21日来看到自己的新的容颜。而很多我观察到的现象都显示了其最起码需要21日来使得新事物代替旧事物。这一事实震惊了Donchian,21个自然日就等于15个交易日!当绝大多数交易者都在认为趋势可能已经变化时(他们认为看到了市场的新颜),主要趋势却已做好了继续运行的准备。代码(金字塔语言)://策略:唐奇安通道//类型:皆可//中间变量INPUT:X(20,1,100,1),nmin(10,1,100,1),ss(1,1,100,1);X周期高点:=ref(hhv(h,X),1);//X是参数,自行调整X周期低点:=ref(LLV(L,X),1);手数:=ss;开仓时间:=time>opentime(1) and time平仓时间:=time>=closetime(0)-nmin*100;{nmin为参数,closetime(0)-nmin*100表示 收盘时间-提前N分钟 N由nmin控制}//交易条件:开多平空条件:=C>X周期高点 and 开仓时间 and holding<=0;开空平多条件:=C周期低点 and 开仓时间 and holding>=0;//交易系统收盘平多:sell(平仓时间 and holding>0, 0, thisclose);收盘平空:sellshort(平仓时间 and holding<0,0,thisclose);平空:sellshort(开多平空条件 and holding<0, 手数,limitr,X周期高点);平多:sell(开空平多条件 and holding>0,手数,limitr,X周期低点);开空:buyshort(开空平多条件 and holding=0,手数,limitr,X周期低点);开多:buy(开多平空条件 and holding=0, 手数,limitr,X周期高点);本文以日内策略为例,但是这个策略不限于在日内使用。交易条件中去掉开仓时间、平仓时间项,即可作为中长线策略。这个策略是现有众多策略的鼻祖,以此为基础的变种策略玲琅满目。重要的是学习其思想。

网上给大家找了段源码方便学习理解。

{唐奇安通道}

{N:=20;T:=10;} M1:MA(C,N);

HPB:=REF(HHV(H,N),1); LPB:=REF(LLV(L,T),1); {多头交易}

BUYIN:=H>HPB AND C>M1; BUYEXIT:=L<LPB; SINGAL:=IF(BUYIN,1,IF(BUYEXIT,-1,0));

CURRSIGN:=REF(SINGAL,BARSLAST(SINGAL));UPTREND:=CURRSIGN= 1; DWTREND:=CURRSIGN=-1; {跟踪止损}

空平:IF(DWTREND,HPB,DRAWNULL),COLORBLUE,LINETHICK2;多止:IF(UPTREND,LPB,DRAWNULL),COLORRED,LINETHICK2;信号持续:IF(DWTREND,BARSLAST(UPTREND),BARSLAST(DWTREND)),NODRAW,COLORMAGENTA;DRAWICON(BARSLAST(DWTREND)=1,多止,7);DRAWICON(BARSLAST(UPTREND)=1,空平,8);DRAWKLINE(H,O,L,C);

加醋:首先海龟是突破开仓策略,第二它也是站在巨人的肩膀上,借鉴了唐奇安通道加入了仓位管理。大家多自问为什么是20和50,还有它是什么级别的策略???

突破

突破定义为价格超过特定天数内的最高价或最低价。因此,20日突破可定义为超过前20天的最高价或最低价。

海龟总是在日间突破发生时进行交易,而不会等到每日收盘或次日开盘。在开盘跳空的情况下,如果市场开盘超过了突破的价位,海龟一开盘就会建立头寸。

系统一入市----只要有一个信号显示价格超过前20天的最高价或最低价,海龟就会建立头寸。如果价格超过20天的最高价,那么,海龟就会在相应的商品上买入一个单位,建立多头头寸。如果有一个信号显示价格跌破了最近20天的最低价,海龟就会卖出一个单位建立空头头寸。

如果上次突破已导致赢利的交易,系统一的突破入市信号就会被忽视。注意:为了检验这个问题,上次突破被视为某种商品上最近一次的突破,而不管对那次突破是否实际被接受,或者因这项法则而被忽略。如果有赢利的10日离市之前,突破日之后的价格与头寸方向相反波动了2N,那么,这一突破就会被视为失败的突破。

上次突破的方向与这项法则无关。因此,亏损的多头突破或亏损的空头突破将使随后新的突破被视为有效的突破,而不管它的方向如何(即多头或空头)。

然而,如果系统一的入市突破由于以前的交易已经取得赢利而被忽略,还可以在55日突破时入市,以避免错过主要的波动。这种55日突破被视为自动保险突破点(Failsafe Breakout point)。

如果你还没有入市,在任何特定点位都会有一些价位会触发空头入市,在另外一些不同的较高价位会触发多头入市。如果上次突破失败,那么,入市信号会更接近于现价(即,20日突破),如果上次突破成功,在这种情况下入市信号可能会远得多,位于55日突破处。

系统二入市----只要有一个信号显示价格超过了前55日的最高价或最低价就建立头寸。如果价格超过55日最高价,那么,海龟就会在相应的商品上买入一个单位建立多头头寸。如果有一个信号显示价格跌破了最近55日的最低价,海龟就会卖出一个单位建立空头头寸。

无论以前的突破是成功还是失败,所有系统二的突破都会被接受。

添油:海龟突破开仓后行情并不是一直向那个方向直奔而去的,有可能反复,着就会存在反复突破20日高点的情况,也会存在明天的新高又是20日的高点,因为不能每个新高都加仓所以就存在必须忽略首次开仓后面的连续开仓信号。

加醋:因为突破策略的弊端,开仓点和止损点之间的回撤是很头痛的,所以在海龟中他们的头寸比例是很低的,需要能承受多次的试仓错误。

增加单位(加仓)

海龟在突破时只建立一个单位的多头头寸,在建立头寸后以1/2N(即二分之一N----译注)的间隔增加头寸。这种1/2N的间隔以前面指令的实际成交价为基础。因此,如果初始突破指令降低了1/2N,那么,为了说明1/2N的降低,新指令就是突破后的1N加上正常的1/2N个单位的增加间隔。

在达到最大许可单位数之前,这样都是正确的。如果市场波动很快,有可能在一天之内就增加到最大4个单位。

添油:海龟的加仓策略比较简单,就是利用了之前介绍的波动性N或ART,每N/2就加仓一次。最多加3次,加到4个单位。

加醋:海龟把开仓到加满在很短的时间就可以完成,也就是一旦出现趋势性行情,不管大小他都吃到尽量多的鱼腹部分,当然坏处就是一但碰到大震荡波动行情,就亏死你,最好的方式就是一边歇着喝茶去,等大趋势来了再入市。当然用它的思路,这时闲置资金可以调到其它趋势性品种上去玩。再换个思路你可以用个巨大的均线去标定大趋势,比如120均线或200均线。或瀑布线多头排列了再动手。

连续性

海龟被告知在接受入市信号时要非常连续,因为一年中大部分利润可能仅仅来自于两三次大的赢利交易。如果一个信号被忽略或错过,就可能极大地影响全年度的收益。

交易记录最好的海龟连续地应用这些交易法则。交易记录最差的海龟以及所有那些在丹尼斯的培训课程中掉队的海龟,都是在法则给出信号时在建立头寸上缺少连续性。

添油:小亏大赚,试错失败就跑路,对了就加仓到满。

加醋:这就是为什么程序化模型要加载到指数上,而不是单个合约或主连上,避免跳空和不连续性,信号会计算不准确。

止损

海龟使用以N为基础的止损以避免净值的大幅损失。

有一种说法,“有老交易员,也有无所畏惧的交易员,但却没有无所畏惧的老交易员。”不使用止损的交易员会破产。

海龟总是使用止损。

对于大多数人来说,始终抱着亏损的交易终究会反转的愿望比干脆退出亏损头寸并承认交易失败要容易得多。

有一件事情我们要非常清楚----退出亏损头寸绝对是至关重要的。长期来看,不会止住亏损的交易员是不会成功的。几乎所有失去控制并危及金融机构自身(比如,巴林银行、长期资本管理公司以及其他)健康的交易例子,都涉及到因为没有止住小的亏损而放任其逐渐变成巨额亏损的交易。

关于止损,最重要的是在你建立头寸之前,你已经预先确定退出的点位。如果市场的波动触及你的价位,你就必须每一次都毫无例外地退出。在这一立场上摇摆不定最终会导致灾难。

海龟的止损

有了止损并不意味着海龟总是让经纪人设置实际的止损指令。

因为海龟持有如此大量的头寸,所以,我们不想因为让经纪人设置止损指令而泄露我们的头寸或我们的交易策略。相反,我们被鼓励设定某个价位,一旦达到该价位,我们就会使用限价指令或市价指令退出头寸。

这些止损是无可商议的离市。如果某种商品在止损价进行交易,那么,我们就退出头寸;每次,每一次,一定。

止损的设置

海龟以头寸风险为基础设置止损。任何一笔交易都不能出现2%以上的风险。

因为价格波动1N表示1%的帐户净值,容许风险为2%的最大止损就是价格波动2N。海龟的止损设置在多头头寸入市价格以下的2N,空头头寸入市价格以上的2N。

为了保证全部头寸的风险最小,如果另外增加单位,前面单位的止损就提高1/2N。这一般意味着全部头寸的止损将被设置在踞最近增加的单位的2N处。然而,在后面单位因市场波动太快造成“打滑(skid)”或者因开盘跳空而以较大的间隔设置的情况下,止损就有所不同。

备选止损策略----双重损失

海龟被传授了一项会带来更好收益的备选止损策略,但是,由于它会造成更多亏损从而导致盈亏比例较低,因此,这项策略执行起来更难。这项策略称为双重损失(the Whipsaw)。

与每笔交易承受2%的风险不同的是,止损被设置在1/2N即帐户风险的1/2%处。如果某个单位已被止损,而市场回到了原来的入市价,该单位就会被重新建立头寸。有些海龟用这种方法交易,取得了良好的成效。

双重损失也有额外的好处,即,在增加新的单位时不需要改变原有单位的止损,因为在最大4个单位时全部风险决不会超过2%。

海龟系统止损的好处

由于海龟的止损以N为基础,因此,它们能够适应市场的波动性。更不稳定的市场有更宽的止损,但是,每个单位的合约也会更少。这等于是把风险分散在所有的入市决策上,这样会导致更好的多样化和更为健全的风险管理。

添油:海龟的止损策略总结起来大致分3类,第一2N,第二加仓后2N对标的跟进和变化,并且他会随着加仓次数的增加要增加止损点位,不然就会变成2N之和了。第三账户总资金的亏损率,这个还是要根据资金量才能得出和不同。

加醋:止损是个强制性硬指标,保障你能多赌几次,对了的加仓把之前亏损补回来,错了就每次少输一点,赌徒的概率原则。

离市或者说是止盈

海龟对于赢利头寸使用以突破为基础的离市策略。

还有一个古老的说法:“落袋为安,你永远不会破产。”海龟不会同意这种说法。过早地退出赢利头寸,即过早地“落袋为安”,是采用趋势跟随系统交易时最为常见的错误之一。

价格从来不会直来直去;因此,如果你想赶上一段趋势就有必要让价格背离你运动。在趋势的早期,这通常可能意味着眼看着10%到30%可观的利润逐渐成为小幅亏损。在趋势的中期,这可能意味着眼看着80%到100%的利润下降30%到40%。减轻仓位“锁定利润”的诱惑可能会非常巨大。

海龟们知道,你在何时落袋为安会造成盈亏之间的不同。

海龟系统在突破时建立头寸。大多数的突破并不会形成趋势。这意味着海龟所做的大多数交易都会导致亏损。如果赢利的交易所挣的钱平均下来不够弥补这些亏损的话,那么,海龟就已经亏钱了。每个能够赢利的交易系统都有不同的最佳离市点。

我们来看海龟系统。如果你在利润为1N时退出赢利头寸而在亏损为2N时退出亏损头寸,你就需要两倍的赢利才能弥补亏损交易所带来的损失。

在交易系统的各个组成部分之间存在着复杂的关系。这意味着你不能只考虑赢利头寸的正确离市,而不考虑入市、资金管理以及其他因素。

赢利头寸的正确退出是交易最重要的方面之一,也是最不为人理解的一个方面。然而,它会造成盈亏之间的不同。

海龟的离市(止盈)

系统一离市对于多头头寸为10日最低价,对于空头头寸为10日最高价。如果价格波动与头寸背离至10日突破,头寸中的所有单位都会退出。

系统二离市对于多头头寸为20日最低价,对于空头头寸为20日最高价。如果价格波动与头寸背离至20日突破,头寸中的所有单位都会退出。

海龟在入市时一般不会设置离市止损指令,但会在日间盯着价格,一旦交易价格穿过离市突破价,就开始打电话下离市指令。

艰难的离市

对于大多数的交易员,海龟系统离市或许是海龟系统法则中唯一最难的部分。等待10日或20日新低出现通常可能意味着眼睁睁地瞅着20%、40%甚至100%的可观利润化为泡影。

人们具有一种想要早点离市的强烈倾向。你需要极强的纪律性才能为了继续持有头寸直到真正的大幅波动到来而眼看着你的利润化为泡影。在大幅赢利的交易中,遵守纪律和坚持原则的能力是成功老道的交易员的特征。

添油:这里是人们比较纠结和矛盾的两点,一种观点,更多的盈利应该用更多的回撤来避免大趋势行情的中途下车,另一种观点是较大行情会产生较大乖离率一但反转会快速下跌,这类行情最好是用自适应均线吃到头部,避免大的回撤,海龟的10周期最低价或20周期最低点同样面临这个问题,也就是它下面一段说的30%-40%的回撤。

加醋:可不可以加入一个其它策略避免这种情况发生。就或者加入很多因子做成自适应止损标准。仓位越重,手数越多,乖离率越大止盈就越敏感,拐头就平仓,同时再加入如果操作失误如何处理的策略会不会更好!!!

 

金字塔加仓与倒金字塔加仓成本对比

 

给大家做了个张图,用实例看一下金字塔加仓和倒金字塔加仓的成本对比,行情时做多的,从1000元突破20日均线开仓多头头寸开始,一直加到1400,假如行情涨到1500后回撤到1400平仓,倒金字塔的成本只有1133,而金字塔加仓的成本则需要1266. 作图好麻烦啊,大家觉得有用的记得给个肯定。

策略

包括海龟系统交易法则其余指导方针的集锦。

著名建筑师梅斯.范.德洛在谈及设计中的局限时曾经说过,“上帝就在细微之处。”这句话同样适用于交易系统。 还有一些你在使用海龟交易法则中可能会造成明显的交易赢利差异的细节。

入市指令

我们在前面曾经提到,理查德.丹尼斯和威廉姆斯.埃克哈特建议海龟在下指令时不要使用止损。他们建议我们观察市场,并且在价格触及止损价位时下指令。

我们还被告知,一般比较好的做法是设置限价指令而不是市价指令。这是因为,限价指令能比市价指令提供较好的成交价格和较少的价格下降机会。

任何市场随时都有一个买价和一个卖价。买价是买家愿意买入的价格,卖价是卖家愿意卖出的价格。无论何时,只要买价变得比卖价高就会产生交易。在成交量充沛时,市价指令总是会以买价或卖价成交,而较大的单子有时只能以更差的价格成交。

一般会有一定数量的相对随机价格波动发生,这有时被称为反弹。使用限价指令的观点是将指令设置在稍低于反弹极限之处,而不只是设置一个市价指令。如果单子较小,限价指令就不会引起市场波动,如果单子较大,限价指令几乎总会使市场波动更小。

对于限价指令,需要一些技巧才能确定最好的价格,但是经过训练,你应该能使用限价指令得到比使用市价指令更好的接近市价的成交价。

快速波动的市场

有时,市场非常快速地波动,穿过了指令价格。如果你设置了限价指令,那么,它就不会成交。在市场快速波动的条件下,在短短的几分钟内,市场中每张合约就可以驱动成千上万的资金。 这时,海龟得到建议不要恐慌,在下指令前等待市场交易并稳定下来。

大多数交易新手发现这样很难做到。他们会恐慌并下达市价指令。他们在可能最坏的时候总是这么做,并且经常在一天中的最高价或最低价以最差的价格结束交易。

在快速波动的市场中,流动性会暂时缺失。在快速上涨的市场情况下,卖家会停止卖出,有意持仓等待更高的价格,直到价格不再上涨他们才会重新开始卖出。在这种情况下,卖价会大幅上升,买卖差价会加大。

现在,随着卖家不断抬高卖价,买家被迫支付高得多的价格,最终,价格移动得太远太快,结果新的卖家进场导致价格启稳,而且通常迅速反转并暴跌回一半。

在快速波动的市场中所下的指令,通常的结果是在抬高的最高价成交,正好是处于随着新的卖家的进场市场开始启稳的点位。

作为海龟,在下指令之前我们会等到有信号显示至少出现了暂时的价格反转,这样通常会得到比市价指令要好得多的成交价。如果市场在超过我们的止损价的某个点位启稳,那么,我们就会退出市场,不过,我们这样做时不会惊慌失措。

同步入市信号

很多时候市场只有很小的波动,作为交易员,除了监控现有的头寸之外,我们几乎无所事事。我们可能有好多天不下一条指令。别的时候我们会稍微忙一些,因为连续几个小时会有信号间歇地出现。在这种情况下,我们只会在交易机会到来时才进行交易,直到达到相应市场的头寸限制为止。

随后有几天,似乎所有的事情都同时发生了,我们会在一两天内从空仓到满仓。通常,相关市场中的多种信号会加剧这种疯狂的节奏。

尤其在市场跳空开盘,穿过入市信号时,情况更是如此。原油、燃油以及无铅汽油,所有都可能在同一天内发出跳空开盘信号。对于期货合约,同一市场的许多不同月份的合约同时发出信号也是极为常见的。

买强卖弱

如果信号突然出现,我们总是在最强的市场买入,在最弱的市场成批地卖空。

同时,我们也会只在一个市场上建立一个单位的头寸。例如,我们会挑选最强的具有足够的成交量和流动性的合约月份,而不是同时买入二月份、三月份和四月份的原油。

这是非常重要的!在相关的一组中,最佳的多头头寸是最强的市场(该市场在同一组中几乎总是要胜过较弱的市场)。相反,空头方面最大的赢利交易来自于相关一组中最弱的市场。

作为海龟,我们用各种各样的量度标准来确定市场的强弱。最简单最常用的方式就是查看图表,通过视觉检查弄清楚哪个市场“看起来”比较强(或比较弱)。

有些人会确定价格自突破后已上涨了几个N,并买入波动最大的市场(以N表示)。

其他人会从现价中减去三个月前的价格,然后除以目前的N值得到所有市场的标准化数据。最强的市场具有最大值,最弱的市场具有最小值。

这些方法中的任何一种都效果良好。重要的是持有在最强的市场上多头头寸,在最弱的市场上持有空头头寸。

更换期满合约

当期货合约期满时,在更换新合约之前有两个主要的因素需要考虑。

首先,有很多近期月份合约趋势良好但远期月份合约却没有表现出同样级别价格波动的例子。因此,除非新合约的价格波动符合现有头寸的条件,否则不要更换新合约。

其次,应该在期满合约的成交量和未平仓头寸下降太多之前更换合约。多少算太多取决于单位规模。一般的规则是,海龟在期满前数周将现有合约更换为新的合约月份,除非(现在持有的)近期月份合约比远期月份合约的表现明显要好。

最后

最后,我们得出关于完整的海龟交易系统法则的结论。你或许会想,这些法则并不是很复杂。 但是,知道这些法则并不足以使你致富。你必须能遵循这些法则。

记住理查德.丹尼斯说过的话:“我总是说你们可以在报纸上发表我的交易法则,没有人会遵循它们。关键在于连续性和纪律。几乎任何人都能够罗列一张交易法则的清单,其中的80%与我们教授给我们的学员的一样。他们所不能做的是带给他们自信,甚至在情况恶化时仍坚持那些法则。”----摘自《华尔街点金人》,约翰.施瓦格。 或许,最能证明这个观点的正确性的是海龟们自己的成绩;他们中的许多人并没有赚钱。这并非因为法则不起作用;这是因为他们不能也没有遵循法则。由于这同一个事实,读这本小册子的人中只有很少的人将用海龟交易法则在交易中取得成功。再说一遍,这并非是因为法则不起作用。这是因为读者简直不会拥有遵循它们的信心。

遵循海龟法则是非常困难的,因为海龟法则依赖于捕捉相对罕见的大级别趋势。结果是,两次赢利之间可能会经过许多个月份,有时甚至要经过一两年。在这期间,很容易找到理由来怀疑这套系统,进而停止遵循法则。

如果法则不再起作用可怎么办?

如果市场已经改变了可怎么办?

如果法则错过某些重要的东西可怎么办?

我怎样才能真正地确信这些法则会起作用?

第一期海龟培训班中有一位学员(该学员在第一学年结束前从培训班中除名)早就怀疑有些知识有意不传授给培训班,最终他相信有些隐藏的秘诀里克是不会披露的。这位特别的交易员无法面对一个简单的事实,即,他的拙劣表现归因于他自己的疑虑和不安全感,是这些导致了他无力遵循法则。

另一个问题是想要改变法则的倾向。海龟中有很多人努力降低交易系统的风险,他们用巧妙的方法改变法则,有时却适得其反。

 

 

1引言

对于纯多头或空头的方向性策略而言,只有当证券价格是均值回归或趋势的,交易策略才能盈利。否则,如果价格是随机游走的,交易将无利可图(法玛有效市场假说)。换句话说,目前各种纷繁复杂的所谓量化策略大都可以归结为均值回归或趋势追踪策略。趋势追踪策略认为价格会沿着一定的趋势继续走,也常称为“惯性”或“动量”策略,很多技术指标就是基于动量的思想来设定的。今天为大家介绍著名的趋势交易策略——“海龟交易法则”,着重介绍如何使用Python对海龟的交易规则进行量化回测,尤其是对Pandas的综合运用。关于海龟原理的详细介绍和相关轶事感兴趣的可阅读原书和网上相关资料,在微信公众号后台回复“海龟交易”可下载《海龟交易法则》高清中文PDF。

2海龟交易法则简介

海龟交易法则可以认为是一个完整的交易系统,具备一个完整的交易系统所应该有的所有成分,包括市场、入市、头寸规模、止损/止盈、退出、买卖策略等:

市场:买卖什么?

头寸规模:买卖多少?

入市:什么时候买卖?

止损:什么时候放弃一个亏损的头寸?

离市:什么时候退出一个盈利的头寸?

策略:如何买卖?

趋势追踪——唐奇安通道

海龟交易法则利用唐奇安通道的突破点作为买卖信号指导交易,简单而言唐奇安通道是由一条上轨线、中线和下线组成,上轨线由N1日内最高价构成,下轨线由N2日内最低价计算,当价格冲破上轨是可能的买入信号,反之,冲破下轨时是可能的卖出信号。

买卖单位及首次建仓

海龟交易系统本质上是一个趋势跟随的系统,但是最值得学习的是资金管理尤其是分批建仓及动态止损的部分。书中提到了N值仓位管理法,其中N值与技术指标平均真实波幅 ATR计算类似。ATR是真实波幅TR的20日平均值,而TR是当前交易日最高价和最低价之差 、前一交易日收盘价与当前交易日最高价之差、前一交易日收盘价与当前交易日最低价之差三者中的最大值,用公式表示为:

TR=Max(High−Low,abs(High−PreClose),abs(PreClose−Low)),技术指标库TA-Lib提供了直接计算ATR的函数。

建仓单位:

Unit=(1%∗账户总资金)/N

首次建仓的时候,当捕捉到趋势,即价格突破唐奇安上轨时,买入1个unit。其意义就是,让一个N值的波动与你总资金1%的波动对应,如果买入1unit单位的资产,当天震幅使得总资产的变化不超过1%。

例如:

现在你有1万元资金,1%波动就是100元。假如某股票的N(ATR)值为0.1元,100÷0.1元=1000股。也就是说,你的第一笔仓位应该是在其突破上轨(假设为3元)时立刻买入1000股,耗资3000元。

动态止损或清仓条件

当股价跌破10日唐奇安通道下沿,清空头寸结束本次交易。当价格比最后一次买入价格下跌2N时,则卖出全部头寸止损。

接上面的例子,最后一次加仓价格为3.2。假如此时N值0.2元。当价格下跌到 3.2 - 2*0.2 = 2.8元时,清仓。持仓成本为 (3+3.1+3.2)*1000/3000 = 3.1元。此时亏损 (3.1-2.8)*3000 = 900元, 对于1万来说 这波亏损9%。

原始的海龟交易采用唐奇安通道来追踪趋势,在趋势比较明显的行情表现不错,但是在震荡的行情中效果不佳,当然这是所有趋势型策略的通病。下面着重使用Python对唐奇安通道进行可视化,并利用简化版的海龟交易法则进行简单的历史回测。

2

3海龟交易规则Python实现

#先引入后面可能用到的包(package) import pandas as pd import numpy as np import talib as ta from datetime import datetime,timedelta import matplotlib.pyplot as plt %matplotlib inline #正常显示画图时出现的中文和负号 from pylab import mpl mpl.rcParams['font.sans-serif']=['SimHei'] mpl.rcParams['axes.unicode_minus']=False #使用tushare获取交易数据 #设置token import tushare as ts #注意token更换为你在tushare网站上获取的 token='输入你的token' pro=ts.pro_api(token) index={'上证综指': '000001.SH', '深证成指': '399001.SZ', '沪深300': '000300.SH', '创业板指': '399006.SZ', '上证50': '000016.SH', '中证500': '000905.SH', '中小板指': '399005.SZ', '上证180': '000010.SH'} #获取当前交易的股票代码和名称 def get_code(): df = pro.stock_basic(exchange='', list_status='L') codes=df.ts_code.values names=df.name.values stock=dict(zip(names,codes)) #合并指数和个股成一个字典 stocks=dict(stock,**index) return stocks #获取行情数据 def get_daily_data(stock,start,end): #如果代码在字典index里,则取的是指数数据 code=get_code()[stock] if code in index.values(): df=pro.index_daily(ts_code=code,start_date=start, end_date=end) #否则取的是个股数据 else: df=pro.daily(ts_code=code, adj='qfq',start_date=start, end_date=end) #将交易日期设置为索引值 df.index=pd.to_datetime(df.trade_date) df=df.sort_index() #计算收益率 df['ret']=df.close/df.close.shift(1)-1 return df

下面以沪深300指数为例,对唐奇安通道和买卖突破信号进行可视化。

hs=get_daily_data('沪深300','20180101','')[['close','open','high','low','vol']] #最近N1个交易日最高价 hs['up']=ta.MAX(hs.high,timeperiod=20).shift(1) #最近N2个交易日最低价 hs['down']=ta.MIN(hs.low,timeperiod=10).shift(1) #每日真实波动幅度 hs['ATR']=ta.ATR(hs.high,hs.low,hs.close,timeperiod=20) hs.tail()

下面使用简化版的海龟交易法则进行历史回测,即不考虑仓位管理和动态止损/止盈条件,以唐奇安通道突破作为买入卖出信号。

交易规则为:

(1)当今天的收盘价,大于过去20个交易日中的最高价时,以收盘价买入;

(2)买入后,当收盘价小于过去10个交易日中的最低价时,以收盘价卖出。

def my_strategy(data): x1=data.close>data.up x2=data.close.shift(1)<data.up.shift(1) x=x1&x2 y1=data.close<data.down y2=data.close.shift(1)>data.down.shift(1) y=y1&y2 data.loc[x,'signal']='buy' data.loc[y,'signal']='sell' buy_date=(data[data.signal=='buy'].index).strftime('%Y%m%d') sell_date=(data[data.signal=='sell'].index).strftime('%Y%m%d') buy_close=data[data.signal=='buy'].close.round(2).tolist() sell_close=data[data.signal=='sell'].close.round(2).tolist() return (buy_date,buy_close,sell_date,sell_close) #对K线图和唐奇安通道进行可视化 from pyecharts import * grid = Grid() attr=[str(t) for t in hs.index.strftime('%Y%m%d')] v1=np.array(hs.loc[:,['open','close','low','high']]) v2=np.array(hs.up) v3=np.array(hs.down) kline = Kline("沪深300唐奇安通道",title_text_size=15) kline.add("K线图", attr, v1.round(1),is_datazoom_show=True,) # 成交量 bar = Bar() bar.add("成交量", attr, hs['vol'],tooltip_tragger="axis", is_legend_show=False, is_yaxis_show=False, yaxis_max=5*max(hs["vol"])) line = Line() line.add("上轨线", attr, v2.round(1),is_datazoom_show=True, is_smooth=True,is_symbol_show=False,line_width=1.5) line.add("下轨线", attr, v3.round(1),is_datazoom_show=True, is_smooth=True,is_symbol_show=False,line_width=1.5) #添加买卖信号 bd,bc,sd,sc=my_strategy(hs) es = EffectScatter("buy") es.add( "sell", sd, sc, ) es.add("buy", bd, bc,symbol="triangle",) overlap = Overlap(width=2000, height=600) overlap.add(kline) overlap.add(line) overlap.add(bar,yaxis_index=1, is_add_yaxis=True) overlap.add(es) grid.add(overlap, grid_right="10%") grid

(注:运行上述代码得到的是动态交互图,可调整时间区间)

#关掉pandas的warnings pd.options.mode.chained_assignment = None def strategy(stock,start,end,N1=20,N2=10): df=get_daily_data(stock,start,end) #最近N1个交易日最高价 df['H_N1']=ta.MAX(df.high,timeperiod=N1) #最近N2个交易日最低价 df['L_N2']=ta.MIN(df.low,timeperiod=N2) #当日收盘价>昨天最近N1个交易日最高点时发出信号设置为1 buy_index=df[df.close>df['H_N1'].shift(1)].index df.loc[buy_index,'收盘信号']=1 #将当日收盘价<昨天最近N2个交易日的最低点时收盘信号设置为0 sell_index=df[df.close<df['L_N2'].shift(1)].index df.loc[sell_index,'收盘信号']=0 df['当天仓位']=df['收盘信号'].shift(1) df['当天仓位'].fillna(method='ffill',inplace=True) d=df[df['当天仓位']==1].index[0]-timedelta(days=1) df1=df.loc[d:].copy() df1['ret'][0]=0 df1['当天仓位'][0]=0 #当仓位为1时,买入持仓,当仓位为0时,空仓,计算资金净值 df1['策略净值']=(df1.ret.values*df1['当天仓位'].values+1.0).cumprod() df1['指数净值']=(df1.ret.values+1.0).cumprod() df1['策略收益率']=df1['策略净值']/df1['策略净值'].shift(1)-1 df1['指数收益率']=df1.ret total_ret=df1[['策略净值','指数净值']].iloc[-1]-1 annual_ret=pow(1+total_ret,250/len(df1))-1 dd=(df1[['策略净值','指数净值']].cummax()-df1[['策略净值','指数净值']])/df1[['策略净值','指数净值']].cummax() d=dd.max() beta=df1[['策略收益率','指数收益率']].cov().iat[0,1]/df1['指数收益率'].var() alpha=(annual_ret['策略净值']-annual_ret['指数净值']*beta) exReturn=df1['策略收益率']-0.03/250 sharper_atio=np.sqrt(len(exReturn))*exReturn.mean()/exReturn.std() TA1=round(total_ret['策略净值']*100,2) TA2=round(total_ret['指数净值']*100,2) AR1=round(annual_ret['策略净值']*100,2) AR2=round(annual_ret['指数净值']*100,2) MD1=round(d['策略净值']*100,2) MD2=round(d['指数净值']*100,2) S=round(sharper_atio,2) df1[['策略净值','指数净值']].plot(figsize=(15,7)) plt.title('海龟交易策略简单回测',size=15) bbox = dict(boxstyle="round", fc="w", ec="0.5", alpha=0.9) plt.text(df1.index[int(len(df1)/5)], df1['指数净值'].max()/1.5, f'累计收益率: 策略{TA1}%,指数{TA2}%;n年化收益率:策略{AR1}%,指数{AR2}%;n最大回撤: 策略{MD1}%,指数{MD2}%;n 策略alpha: {round(alpha,2)},策略beta:{round(beta,2)}; n夏普比率: {S}',size=13,bbox=bbox) plt.xlabel('') ax=plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') plt.show() #return df1.loc[:,['close','ret','H_N1','L_N2','当天仓位','策略净值','指数净值']]

下面对上证综指、沪深300、创业板指数、中国平安、东方通信和贵州茅台进行简单回测,看看海龟交易规则唐奇安的择时效果如何,具体指标看图。

strategy('上证综指','20050101','')

strategy('沪深300','','')

strategy('创业板指','','')

strategy('沪深300','20180101','')

strategy('中国平安','20050101','',N1=20,N2=10)

strategy('东方通信','20130101','',N1=20,N2=10)

strategy('贵州茅台','20050101','',N1=20,N2=10)

上述回测没有考虑使用N值的仓位管理和动态止损,下面是在万矿平台上加入了仓位管理进行回测,与上面简单使用Pandas的回测框架相比(图形比较丑陋),贵州茅台的各项回测指标看上去更理想了,最大回撤也只有21%。具体实现代码可参考万矿平台社区上面的分享。此外,聚宽、优矿等量化平台上也提供了相应了策略回测模板,实现代码大同小异,感兴趣的可以进一步了解。

4结语

本文简要介绍了海龟交易法则的基本原理,使用Python对其买卖信号进行了可视化分析,并利用Pandas对相关指数和个股运用简化版的海龟交易规则进行了历史回测。由回测结果可看出,该简化的趋势追踪策略对于某些标的在某些区间效果表现不错,但对于某些标的或某些时期则效果不佳。当然,本文旨在回顾经典策略,展示Pandas在金融量化分析的综合运用,为Python在金融量化中的运用起到抛砖引玉的效果,不作出任何选股或策略推荐。值得注意的是,任何策略都具有一定的局限性,尤其是知道和使用该策略的交易者多了,其作用自然比该理念刚出现的的效果差得多。正如技术分析指标,刚出现的时候很有效,但被大家所熟知或应用后,自然效用就大打折扣(相对于多因子模型中的Alpha被大家挖掘后渐渐成了risk factor)。但所谓新理念、新策略一定是站在前人的肩膀上,因此不能因为经典策略回测效果不佳而全盘否定,如何改进、细化和升级,使之更适合当下的市场才是我们要面对的问题

关于Python金融量化

专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、量化投资前沿分析框架,与博主直接交流、结识圈内朋友等。

 

最近看了柯蒂斯费思写的《海龟交易法则》,这本书披露了一种投资法则。

这本书源于一个打赌,交易大师理查德丹尼斯和他的朋友埃克哈特打赌,优秀的交易者可以通过培训而来

于是丹尼斯招募志愿者,并把自己的交易方法传授给这些人,然后给每人100万美元的交易账户。

本书的作者就是这个项目培训出来的优秀交易者。

海龟法则具体内容

其实这个法则并不神秘,也不复杂,甚至很多人都知道。

但是唯一的区别是,交易员是否能够严格遵守在培训中学到的简单法则。

它买入的依据有两条:

1、以20日突破为基础的短期系统

2、以55日突破为基础的长期系统

当股价突破的时候马上买入,不用等到收盘或第二天开盘。

海龟需要在股价突破的时候买入一个单位的头寸,然后价格每上涨1/2 N,则再买入一个头寸,直到头寸达到单个股票封顶值。

N代表某个股票的真实波动幅度均值

它的计算公式如下:

真实波动幅度=Max(H-L, H-PDC, PDC-L)

其中:H=当日最高价 L=当日最低价 PDC=前一日收盘价

N= (19×PDN+TR) / 20

PDN为前一日的N值。

卖出的依据也是两条:

系统1采用10日突破退出法则:对多头头寸来说,在价格跌破过去10日最低点时退出

系统2则采用20日突破退出法则:对多头来说是20日向下突破时退出

海龟系统的退出策略是整个系统中最难忍受的一个环节。

必须等待市场创下10日或20日新低才能退出,这往往意味着20%、40%甚至100%的巨额利润瞬间蒸发。

止损的依据:

任何一笔交易的风险程度都不得超过2%。

在2%的风险限制下,价格变动的上限就是2N。海龟们止损标准就是2N。

对多头头寸来说,止损价比入市价低2N。

海龟的趋势跟踪策略

趋势跟踪的基本策略就是在一个上扬趋势刚刚开始的时候买入,在这个趋势即将结束之前退出。

海龟们使用的特殊方法叫作突破法,有时候也被称为唐奇安通道法。

他们要做的就是回顾过去一段时间,根据价格变化找出一两个高点,然后看一下是否是突破。

实际上大趋势很少出现,这意味着趋势跟踪策略的失败概率要远大于成功概率

对一个典型的趋势跟踪系统来说,可能有65%~70%的交易是赔钱的。

这就要求我们在盈利的时候,尽可能多地获利,然后在赔钱的时候,控制损失。

这样才会有一个正的期望收益

像海归一样思考

这本书里还介绍了我们常见的几种认知偏差:

1、避免结果偏好

好的交易者考虑的是现在,而避免对未来考虑过多。新手则想预见到未来:如果他们赢了,他们会认为自己预测对了,感觉自己像个英雄;

2、避免近期偏好

大多数交易者不仅对未来考虑过多,对过去同样考虑过多。他们会念念不忘过去所做的事,过去所犯的错误,还有过去那些失败的交易

3、避免预测未来

交易中充满了不确定性。你不知道一笔交易会不会赚钱。你充其量只能相信,从长期来看,你的回报将大于你的风险水平。

从概率角度考虑问题,不要预测未来:不要试图作出正确的预测,唯有使用概率对你有利的方法,你才能在长期内获得成功。

 

各位书友大家好,欢迎继续来到老齐的读书圈,咱们今天继续学习海龟交易法,昨天说了,没有一套系统是完美的,可以让收益更高,风险更低,这个根本做不到。所以你必须要学会在交易中保护自己,就像一个拳击手那样,先要确保自己12回合中不要被对手KO掉。即使你的系统再有效,但如果在你开始赚钱之前,就输掉了所有的钱,那么后面的盈利也都跟你没关系了。

每个交易系统都有他说适应的市场环境,比如布林带系统就适用于震荡,而双重均线系统,则在震荡市里面会表现的很灾难。相反,双重均线善于抓住大趋势,但布林带策略则很容易错失这些大机会,你以为是到顶该回落了,但他却突然加速开始上扬,即使你再去追,也早已把你甩下了好几个身位。

所以未来哪个交易系统更好用,其实并不好说。一切皆有可能。那么有人说我要把均线系统和布林带系统结合使用呢,震荡市的时候靠布林带,上涨大趋势的时候用均线系统,这样简直完美。但是实际情况是,你左右挨耳光的可能性更大。也就是说你最后不但没有获得超额收益,反而还要损失应有的回报。因为你总要判断市场状态,而判断就会有错,错了就会影响收益。你不可能抓到每一个趋势转换的接口,如果你要有这个本事,那也不用什么系统了。很快你就是世界首富了。

但是有一个方法却是可行的,也就是说你分散投资,把你的交易分成两部分,一个用布林带策略,一个用双重均线策略。这两个交易独立开展,绝不交叉。这样你的心态会比较好,而且能够规避掉一些风险。所利用的就是回报大于风险的夏普比率,在震荡的时候均线策略会很赔钱,但是赔掉的应该没有布林带赚到的多,而一旦趋势突破了,布林带没有跟上趋势,但你的双重均线系统却在趋势当中,布林带损失掉的利润,也被均线系统对冲了。两个策略同时进行,虽然不会给你带来更多的收益,但却可以让收益更加平滑一些,虽然赚的时候少赚了一点,但亏的时候也少亏了不少,这样能够确保你始终站在拳击台上。否则你万一用了均线策略,而市场正好赶上漫长的震荡市,你可能真的会提前输光内裤。

老齐多说一句,其实资产配置的思路也是如此,老齐自己做价值投资,我习惯于优选个股的基金和指数风格的基金都买一点,不求赚钱利润最大,只是希望能够应对不同的市场环境。比如去年底配了精选蓝筹股的兴全轻资产,结果今年成了我的收入主要来源。而去年情况则跟今年完全相反,去年是量化很赚钱,兴全轻资产这样的蓝筹基金根本不赚钱。所以学会把收益分散到各种市场环境中,是一个成熟投资者应有的表现。成熟的投资者都是靠系统赚钱,这样他心里很踏实,而新手往往急功近利,总想赌一把。而实际上,十赌九输。比如现在老齐虽然看好创业板的投资机会,也做到了重仓,但我依然会保有国泰估值优势和兴全轻资产的一定份额,不图急功近利,只为让收益看上去更加平滑。这样有利于我的长期投资。而不是赌博式投资。这才是一个稳健的,可以长期坚持的系统。交易也是如此,必须要让自己的交易适应不同的市场状况,这样才能确保你能做的长久。即使踢中国队,巴西也不可能不带后卫,更不可能堆10个前锋。事实证明,前锋堆得太多效果未必就好。

所以与其在一个系统上,加入两套玩法,还不如把钱分开,通过两套系统来交易。一些对冲基金,可能会用到4-5套系统,同时交易,这样他们的收益就能更加平滑。波动性是投资者的大敌,很多人炒股票炒不好,不是说股票市场没给大家机会,而是你没有解决波动性的问题。其实股票市场的年均回报是最高的,基金的年均回报更是超过20%,这么赚钱的东西,你都没赚到钱,就是因为太急功近利了,总想赚大钱,快钱,总想牛市前去抓那个涨幅最大的品种,结果就是完美的错过了涨幅,而被暴跌击垮。

另外,随着你的账户越来越大,你一定要选择一个流动性更好的产品。你有10万块钱的时候可以随便交易,买什么都行,等你有10个亿了就不是这样了,很多东西你可能买进去容易退出来难,这也是为什么基金们不敢去做太小市值的股票,一旦他们把价格买起来了,就不容易脱身了。

如果您是个股市老鸟的话,这本书读到这应该发现,其实并没有什么太多的新东西,所谓的交易系统也都是比较简单的,跟大家印象中的独孤九剑,降龙十八掌有很大的差距,其实交易的江湖里就是这样,一定要做到内外兼修,所谓内,就是你的心智,所谓外才是这些技巧,如果你内心达不到,学再多的东西也是白搭,这些花里胡哨的技术分析,不但不会让你赚到钱,反而可能给你造成严重的亏损。作者也说,他经常听某些交易高手夸夸奇谈,说自己找到了一个交易的圣杯,一个系统的正确率高达90%,投资入市几个月就能赚取200%的回报,但后来无一例外的发现,这些当年自吹自擂的交易高手,全都赔了钱,甚至还赔了很多的钱。这种自负心理,本身就是一种错误,太想战胜市场了,让你产生了严重的认知偏差。你越想发力,就越会留下破绽,对于市场缺少敬畏之心,到头来一定会被市场的教训。而在结果不如意之后,便会心性大乱,从而更是会一败涂地。

所以平和,保守才是交易之道,我们讲李嘉诚的时候也说,老超人总是告诫别人,未谋胜先谋败,先把失败的可能想明白了,胜利也就随之而来了,但现实中大量的交易者,只想着贼吃肉,却从不考虑贼挨打,以至于一次错误,就造成了满盘皆输。所以,最厉害的交易者,并不是他的手段有多么牛逼,而是他的心境升华到了一定境界,当你无所谓贪婪和恐惧的时候,你就站在了更高的维度上面,这时候你再看那些场内的交易者们的行为,发现就是一群小丑。并不是你多么高明而赚到钱,而是因为别人的愚蠢,把钱白送给你。什么时候你能想明白这些,就说明你已经升华了。

之前有人做过测试,在大学里股票做得最好的老师,不是经济系的更不是金融系的,他们甚至业绩连中等都算不上,真正股票做得好的老师,多来自哲学系和心理系,索罗斯就是一位哲学博士。所以从这个意义上来说,千万别听经济学家讲投资,因为他们知识都懂,但却根本不懂市场。如果投资能赚钱,谁还苦逼苦的去讲课啊。

作者19岁成为海龟学员,之后他一直在做各种尝试,失败的次数太多了,但他却认为每一次失败都是奔向成功的重要一步,就像错误的交易,是交易系统中的一部分一样,慢慢的,磨练了他的心境,他也找到了正确的方向。甚至最后他认为,自己在失败中学到的东西更多。当你不怕犯错了,当你不怕出丑了,反而发现自己赚到的钱越来越多。这就跟孩子学说话一个道理,有人说大人学语言不那么容易,是因为我们的学习能力退化了,作者说不是的,大人学语言之所以慢,是因为他们害怕出丑,害怕犯错,而孩子则不怕,在一句一句的错误发音中,逐渐找到了语言的感觉,而大人越怕犯错,就越不敢发音,不敢发音,当然就学不好语言。

这本书的最后,给出了具体的海龟交易系统,甚至是公式,以及如何买,如何卖,怎么止损,无非就是我们书里讲过的突破法,但针对某个特殊的品种,核心参数做了稍微修改,比如短期系统他用20日均线突破法,而长期系统他用了55日均线突破法。涨过均线就买入,跌破均线就卖出,然后用10日均线平仓,上一次交易赚钱了,那么就忽略一次交易。如果上次赔钱了,这次就要操作,价格上穿均线买入,下穿均线卖出。这些都有案例指导,但对于目前的市场,特别是股市可能并不适用,大家有兴趣可以找来看看,这就是本书的全部内容了,交易并不复杂,复杂的是人性。所以在你变得毫无人性之前,还是谨慎参与交易。这是老齐最后的忠告。明天我们开始新的学习

 

https://www.xusbuy.com

上一篇:如何买卖基金(好卖基金)

下一篇:股票300010行情(股票)

相关推荐

返回顶部