策略分享-基于海龟交易模型的优化 暂存

什么是K线?

海龟简介

海龟交易法是著名的公开交易系统,1983年著名的商品投机家理查德. 丹尼斯在一个交易员培训班上推广而闻名于世,它涵盖了交易系统的各个方面。其法则覆盖了交易的各个方面,并且不给交易员留下一点主观想象决策的余地。它具备一个完整的交易系统的所有成分。

海龟交易策略,利用唐安奇通道跟踪趋势产生买卖信号,利用ATR(真实波幅均值)分批加仓或者减仓,并且动态进行止盈和止损

唐奇安通道

在这里插入图片描述

在趋势信号的扑捉上,海龟交易法则使用了一个非常重要的技术指标—唐奇安通道(Donchian channel)。这个通道很类似我们熟悉的布林通道(Bollinger Bands),只是在具体计算方式上有些不一样。

唐奇安通道指标是Richard Donchian发明的,由3条不同颜色的曲线组成,该指标用周期(一般都是20,有的平台系统设置时可以改变的,有的则设置的不可以)内的最高价和最低价来显示市场价格的波动性,当其通道窄时表示市场波动较小,反之通道宽则表示市场波动比较大。

当价格冲破该通道的上轨道时,就是可能的买入信号;反之,冲破下轨时就是可能的卖出信号。

唐奇安通道的各项指标的计算方法为:

上轨=Max(最高低,n)
下轨=Min(最低价,n)
中线=(上轨+下轨)/2

#短周期 上下轨 区间
DonchianHi = HighestFC(High[1],boLength);
DonchianLo = LowestFC(Low[1],boLength);
#长周期 上下轨 区间
fsDonchianHi = HighestFC(High[1],fsLength);
fsDonchianLo = LowestFC(Low[1],fsLength);

头寸计算

什么是ATR?
ATR又称真实波动幅度均值,很明显是衡量市场波动性的一种指标

海龟策略根据账户资金情况结合ATR动态调节投入的保证金计算手数。(保证金就是可以实现一个带杠杆的买卖方式)
什么是期货保证金交易?

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

这个模块非常经典,很多CTA策略都在借鉴使用;

AvgTR = XAverage(TrueRange,ATRLength);
N = AvgTR[1];
TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
TurtleUnits = IntPart(TurtleUnits); // 对小数取整

动态止损

海龟交易策略充分利用了ATR指标,2倍ATR做为波幅来动态调整止损位置:

# 多头持仓,当价格跌破开仓价-2*ATR止损出场
Low <= preEntryPrice - 2 * N 
# 空头持仓,当价格突破开仓价+2*ATR止损离场
High >= preEntryPrice + 2 * N

移动出场

海龟策略用10日的高低点作为离场条件:

ExitLowestPrice = LowestFC(Low[1],teLength);
ExitHighestPrice = HighestFC(High[1],teLength);
#多头持仓,跌破10日低点清空全部仓位
Low < ExitLowestPrice
#空头持仓,突破10日高点清空全部仓位
High > ExitHighestPrice

加仓模块

加仓模块比较有意思,它是一个循环加仓的设定,当有底仓的时候最新价格高于(低于)进场价格的0.5倍ATR并且小于最大加仓次数,则加仓。

while(High >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) // 以最高价为标准,判断能进行几次增仓
{
	  myEntryPrice = preEntryPrice + 0.5 * N;
	  preEntryPrice = myEntryPrice;
	  if(False == Buy(TurtleUnits,myEntryPrice))
  {
	    break;
  }
	  SendOrderThisBar = True;
}

经典海龟模型总结

海龟交易作为经典策略,为交易者提供了完整的策略编写框架。在波动率放大的趋势中使用循环加仓模块可以带来非常爆炸的利润.
但是在波动率较窄的震荡市中可以把脸给你赔肿了。正所谓盈亏同源好坏参半,加仓模块的使用要非常谨慎,好不容易积累的利润因为加仓使得抗波动能力降低,稍有冲击利润回吐明显,最后可能亏损出场。
我认为海龟最大的一个问题就是利润回吐。除了加仓的问题,更多的是出场设计的比较鸡肋。移动止损和10日高低点极不适应市场,过于死板且并不理想。

改进思路

  • 开仓条件过于简单,如今市场的长期单边行情变少,更多的是量价在一定区间内类似均值回归,所以加入过滤模块;
  • 为了保住累计利润增加抗波动能力,屏蔽循环加仓;
  • 删除原有出场模块,使用动态出场替代;

过滤模块

海龟策略本身的参数较多,影响了普适性,模型出现过拟合可能性较高。为了不增加多余的优化参数,我们增加了一个的趋势模块过滤,本身都是通过HHV和LLV(N日最高最低)计算的,所以不用增加可变参数了。

condRHL=HL<>HL[1];
  If(condRHL)
  {
    R_HL=HL[1];
    X=X+1;
    sumAG=sumAG+HL[1];
    If(X>2)
    {
      HLAverage=sumAG/X;
      sumAG=0;
      X=0;
    }
  }

上面的是过滤模块的基础算法,在本这个模型中的使用方法

if(condRHLAverage)
{
  RHLAverage=HLAverage[1];
}
A_condD=HLAverage>RHLAverage and RHLAverage>0 and HLAverage>0;
A_condK=HLAverage<RHLAverage and RHLAverage>0 and HLAverage>0;

img

“宽窄”移动出场

我们知道,海龟的初始开仓分为短周期开仓和长周期开仓,这里我们默认只用短周期开仓,关于长周期的那个区间我们当作调节出场参数的滤波器来使用。

思路:长周期和短周期区间本身就是波动幅度变化的动态指标,持有仓位时如果价格在短区间内波动,使用默认出场参数。如>果突破了长周期,说明波动率开始放大了,这个时候我们开始调节收敛参数,保住利润。因为开仓条件简单,在趋势中即使止盈出场,也有很多机会再次加入趋势。有些模型在趋势中的交易次数太少,一旦踏空可能2,3个月没有信号。趋势拿的稳固然没错,但是交易信号太少,可操作性不大,波段循环操作更为合理一点。

策略源码
在极端的V型反转下也有不错的表现
在这里插入图片描述
一小段波段上使用收敛参数平仓,再开仓保证交易的稳定性
在这里插入图片描述
交易期货合约
image-20210420192919736
回测净值资金曲线
在这里插入图片描述
策略评估指标
在这里插入图片描述
策略盈亏分布图
在这里插入图片描述
image-20210420193248422

总结

  • 一个良好的交易系统一定是要有交易逻辑作为支撑
  • 单个交易系统不可能捕获所有行情,需要有取舍
  • 真实市场下一般需要对多品种交易,为了分散风险,需要选择相关性较弱的投资组合。
  • 投资有风险,入市需谨慎!
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值