乌龟交易系统是一个有趣的想法,探索趋势追随者和突破交易者。“乌龟”的基本目标是在早期阶段输入趋势-它使用范围突破来计算这些条目的时间。 海龟的双系统突破+趋势追随者 海龟交易策略使用双突破系统进入市场。这背后的想法是从新发展趋势中识别并从中获利。这两个系统协同工作,相互补充。 某种突破后,新趋势经常开始。突破只是价格开始向新方向强劲移动的位置,超出既定范围,突破新高或新低的地方。 这是一个突破交易者想要进入市场的时间。然而事实是,大多数突破并没有发展成足以赚取利润的趋势。 乌龟的快速突破旨在尽早进入趋势。它的目标是在最初的阶段建立这个位置,因为一种新的趋势正在形成。 另一方面,乌龟的缓慢突破系统在更长的时间范围内工作,需要更强烈地指示趋势的存在。这样做的目的是输入比较短时间范围内的趋势更为确定的趋势。 慢速突破信号还允许比快速突破系统更大的回撤趋势。这使它能够保持强劲的趋势,持续时间更长。 快速突破-为期20天的系统 以20天突破的示例。乌龟系统触发买入条目,触发发生的原因是价格突破了20天的区间并创出新高。这发生在标有蓝色箭头的蜡烛上。 随后趋势进一步上升并且在绿色箭头处触发第一累积信号。 随着价格以距离1/2 N的步长向上移动,原始龟系统累积(添加单位),其中N是市场的平均每日移动(参见此处的解释)。这意味着按照1/2?,1个?,1.5倍?等等。 第一绿色箭头的条目的价格和当前价格之间的移动大于8.5×更多?。这会触发另一个买单。 另一个累积信号以1x N触发,因为价格继续在利润方向上升。此时,头寸总数为3个单位,平均入场价为1.0773。添加第三个单元后,趋势再次开始下降。请注意,不会添加其他单位,因此位置大小不会更改。 3个单位的平均价格为1.0773。在标有红色关闭箭头的蜡烛上,价格下降到1.0703。 此时N的值为65点,因此触发止损,因为价格现在比最后入场价格1.0838低2x N(130点)。 使用追踪止损:只要向某个位置添加单位,海龟就会使用追踪止损。这有两个影响。第一个是锁定早期交易的利润,第二个是限制后期交易的下行风险。 所有单位的止损通常位于订单填写的最后入场价格的2x N处。因此,例如,如果最后一个仓位以1.0838和N=65点的价格被填充,这意味着之前添加的单位的止损将全部上调至1.0838-2x N或1.0708。 根据海龟的规定,只有在上一次突破失败时才会进行为期20天的突破。因此,由于这个以止损结束,下一个突破将被交易而不是跳过。 慢速突破-55天系统 缓慢突破类似于快速突破,但是当更长和更大幅度的趋势可能开始时触发。 价格必须突破其55天的范围,并触发买单或卖单具体取决于是分别达到高点还是低点。 与快速突破不同,55天突破在每个信号上交易。另一方面,20天的突破只会在上一次失败时触发,如上所述。 把它们放在一起 乌龟不是一个快速的战略。至少在看到好处之前必须遵循几个月。那是因为它产生了大量的小损失并带来了一些巨大的收益。为了获利,那些巨大的胜利必须足以弥补损失。 这种高失败率意味着海龟交易者必须依靠一些技巧来增加在正确的时间进入的机会。乌龟还依赖强大的风险管理,这是整个战略的一个组成部分。 海龟交易法则代码 海龟交易系统是由理查德丹尼斯创造的,并且在1980年代为交易员提供了出色的工作。但事实证明,该系统需要进行一些调整,以反映新的市场条件并立即生效。也就是说,趋势仍然存在,这意味着存在大量的交易机会。 海龟交易策略的核心是在55天的突破中对期货持仓。55天的突破是价格超过过去55天价格的高点或低点。完整的策略更复杂,但是在本文中,我已经用Python编写了战略的关键,并在Apple Inc.,Kinder Morgan Inc.和Ford Motor Company等股票上交易。 第1步:导入必要的库 #获取收盘价数据 从pandas_datareader导入数据为pdr 将fix_yahoo_finance导入为yf YF。pdr_override() #绘制图表 导入matplotlib。作为plt的pyplot 进口seaborn #数据操作 导入numpy为np 将pandas导入为pd 第2步:定义一个函数来计算股票的策略性能 我们将Apple,Kinder Morgan和Ford Motor的股票代码传递给此功能。 def strategy_performance(stock_ticker): #从yahoo finance获取stock_ticker的数据。 stock=pdr。get_data_yahoo(stock_ticker,start=“2009-01-01”,end=“2017-10-01”) 计算5天的突破和意味着 过去5天的高,低和平均值被计算并存储在数据框库存中。图5是在回测中要优化的自由参数。大熊猫滚动功能用于计算突破和平均值。 #5天高 股票['高']=股票。关闭。转移(1)。滚动(窗口=5)。max() #5天低 股票['低']=股票。关闭。转移(1)。滚动(窗口=5)。min() #5天意味着 股票['avg']=股票。关闭。转移(1)。滚动(窗口=5)。意思是() 入境规则 当股票的收盘价高于过去55天的高点时,我们会对股票做多,当股票的收盘价低于过去55天的低点时,我们会对股票做空。 stock['long_entry']=股票。关闭>股票。高 stock['short_entry']=股票。关闭<股票。低 退出规则 如果股票价格超过过去55天的平均值,我们将退出头寸。 stock['long_exit']=股票。关闭<股票。平均 stock['short_exit']=股票。关闭>股票。平均 位置 我们现在将进入和退出信号存储在一列中。长仓由1表示,短仓由-1表示,或者没有仓位由0表示。如果使用fillna方法在一段时间内没有仓位,我们将继续前一个仓位。 stock['positions_long']=np。楠 股票。loc[股票。long_entry,'positions_long']=1 股票。loc[股票。long_exit,'positions_long']=0 stock['positions_short']=np。楠 股票。loc[股票。short_entry,'positions_short']=-1 股票。loc[股票。short_exit,'positions_short']=0 股票['信号']=股票。positions_long+股票。positions_short 股票=股票。fillna(method='ffill') 战略回报 我们计算了股票的日志收益并乘以信号(1,-1或0)来获得策略回报。 daily_log_returns=np。log(stock。关闭/库存。关闭。班次(1)) daily_log_returns=daily_log_returns*stock。信号。转移(1) #绘制'daily_log_returns'的分布 print stock_ticker daily_log_returns。hist(箱子=50) plt。show() return daily_log_returns。cumsum() 第3步:创建股票组合并计算每只股票的策略表现。 portfolio=['AAPL','KMI','F'] cum_daily_return=pd。DataFrame() 对于股票的投资组合: cum_daily_return[stock]=strategy_performance(stock) #绘制累计每日回报 打印“累积每日报酬” cum_daily_return。情节() #显示情节 plt。show() 如果你想修改策略,那么你可以复制这个代码,它应该很简单。您可以在投资组合中添加更多股票,并评估这些股票的策略表现。 结果的一个限制是它不包括交易成本。了解上述策略涉及大量风险也很重要。您根据最近其他市场参与者的买入或卖出买入或卖出股票。 |
|
来自: 昵称63894306 > 《文件夹1》