1. 本策略简介

传统的双均线交易系统是通过快速均线与慢速均线的交叉来捕捉趋势;当快速均线上穿慢速均线的时候,出现买入信号,指示有一波上涨趋势;当快速均线下穿慢速均线的时候,出现卖出信号,指示有一波下跌趋势。

然而,双均线交易系统在趋势行情中能获得较大的收益;由于市场只有20%的趋势行情,80%是振荡行情,双均线交易系统容易发出假信号导致过多的亏损。

为了将假趋势信号过滤掉,可以将双均线与通道结合起来,此时的“通道”充当二次滤网,虽然在一定程度上过滤了假趋势信号使在振荡行情中减少了损失,但是同时在真趋势行情中也损失了一部分利润;降低风险的同时也降低了利润。

  1. 策略逻辑

双均线通道过滤交易系统需要两层滤网才能交易:第一层是双均线交叉;第二层是突破通道。该交易系统涉及进场、出场和再进场三个步骤。进场:当快速均线上穿慢速均线时,通道为最近12根K线的高点的价格与(1+3%)的乘积,如果价格在未来12根K线内向上突破通道,买入,否则不交易,重新等待下一次均线交叉;当快速均线下穿慢速均线时,通道为最近12根K线的低点的价格与(1-3%)的乘积,如果价格在未来12根K线内向下突破通道,则卖出,否则不交易,重新等待下一次均线交叉。

出场与再进场:当持有多头的时候,如果价格跌破8根K线的低点时,多头平仓同时保存最近10根K线的高点价格high_price,如果平仓之后的15根K线内价格达到high_price,则重建之前的多头头寸,否则不交易;当持有空头的时候,如果价格突破最近8根K线的高点,空头平仓同时保存最近10根K线的低点价格low_price,如果平仓之后的15根K线内价格达到low_price,则重建之前的空头头寸,否则不交易。

  1. 多头策略(MC_MovingAverageCrossOver_L)

input:P_ratio(3),jchl(12),jcbs(12),cchl(8),zjch(10),zjcb(15),pricevalue(close),fastlength(12),slowlength(26);

var:bkx(0),zjckx(0);

value1=xaverage(pricevalue,fastlength);

value2=xaverage(pricevalue,slowlength);

{这里使用指数移动平均线EMA,xaverage函数计算EMA,也可以使用加权移动均线WMA、简单移动均线SMA和自适应移动均线adaptive moving average}

condition1=value1 cross above value2;

{第一层滤网,均线交叉,condition1记录第一层滤网条件是否满足}

if condition1 then begin

bkx=currentbar;

{由于必须在未来jcbs根bar内突破才会交易,否则不交易,所以设置变量bkx来记录从第一层滤网满足开始的bar的数量}

value3=highest(high,jchl)(p_ratio0.01+1);

{value3记录突破的价格是最近12根K线的高点与(1+3%)的乘积,利用输入参数jchl记录bar的数量12,函数highest计算最近12根K线的高点}

end;

if bkx>0 and high>=value3 and (currentbar>bkx and currentbar<=bkx+jcbs)

{这里之所以加入bkx>0这个条件,是因为如果当根bar的最高价格在jcbs根bar内突破通道之后,发出委托单同时将bkx赋值为-1,这样bkx>0就不再成立}

then begin

buy(“breakthrough_b”) next bar at market;

bkx=-1;

end

else if bkx>0 and currentbar>bkx+jcbs then

bkx=-1;

{当currentbar>bkx+jcbs,也就是说在jcbs根bar内如果价格未突破通道,则不交易,此时也需要赋值bkx为-1,使bkx>0不再成立}

//上面的部位是进场逻辑部分

value4=lowest(low,cchl)[1];

{当持多仓的时候,通过value4记录最近cchl根bar的最低价格,lowest函数计算cchl根bar的最低价格; value4是每根bar都更新,只要当根bar跌value4的价格,就平仓}

if marketposition=1 and low<=value4 then begin

sell next bar at market;

value5=highest(high,zjch);

zjckx=currentbar;

{ marketposition=1判断当前持多仓,low<=value4判断是否跌破最近cchl根bar的最低价格;当这两个条件都成立时,平仓同时记录zjckx和value5为后面的再进场做准备;zjckx是记录平仓时的bar的编号,value5是记录平仓时的最近zjch根bar的最高价格}

end;

if zjckx>0 and (currentbar>zjckx and currentbar<=zjckx+zjcb) and high>=value5 then begin

{zjckx>0是用于判断之前有平仓,并且当后面再进场交易之后,zjckx被赋值为-1,那么zjckx>0不再满足,也就不会在zjcb根bar内出现重复再进场的情况;(currentbar>zjckx and currentbar<=zjckx+zjcb) 这个条件是判断是否在zjcb根bar内,如果超出规定的bar的数量,则不再交易}

buy(“zjc_b”) next bar at market;

zjckx=-1;

end

else if zjckx>0 and currentbar>zjckx+zjcb then

zjckx=-1;

  1. 空头策略(MC_MovingAverageCrossOver_S)

input:P_ratio(3),jchl(12),jcbs(12),cchl(8),zjcl(10),zjcs(15),pricevalue(close),fastlength(12),slowlength(26);

var:skx(0),zjckx(0);

{空头策略和多头策略是对称的,唯一的不同是方向的不同,它们的逻辑和思路是一致的}

value1=xaverage(pricevalue,fastlength);

value2=xaverage(pricevalue,slowlength);

{这里使用的是指数移动均线EMA,当然也可以使用简单移动均线SMA,加权移动均线WMA和自适应移动均线adaptive moving average来代替,代替后的效果和应用场景会有一定的差异}

condition1=value1 cross under value2;

if condition1 then begin

{当快速均线下穿慢速均线的时候,第一层滤网形成了,此时通过变量skx来记录一下第一层滤网形成时的bar的编号,通过变量value3来保存第二层滤网的通道线}

skx=currentbar;

value3=lowest(low,jchl)(1-p_ratio0.01);

{lowest和highest函数,在计算时,包含当根bar的数值,它们被用于计算从当根bar开始的指定数量的bar内最小的数值和最大的数值}

end;

if skx>0 and low<=value3 and (currentbar>skx and currentbar<=skx+jcbs) then begin

sellshort(“breakthrough_s”) next bar at market;

skx=-1;

{currentbar>skx and currentbar<=skx+jcbs是用来限制从第一层滤网形成到突破第二层滤网必须在jcbs根bar内完成;skx>0判断第一层滤网是否完成;low<=value3判断价格是否突破第二层滤网;当这三个条件都成立的时候,才会去执行sellshort卖出语句,并且同时将skx赋值为-1,使skx>0不再成立}

end

else if skx>0 and currentbar>skx+jcbs then

skx=-1;

{当currentbar>skx+jcbs判断第二层滤网未在jcbs根bar内突破,此时也将skx赋值为-1,重新判断第一层滤网是否成立,当前第一层滤网失效}

//从这里之前的部分都是进场策略部分,后面的部分是出场和再进场部分

value4=highest(high,cchl)[1];

{通过value4存储最近cchl根bar的最高价格,它是每根bar都更新,但是只有在marketposition=-1的情况下,它的更新才有效果,因为它会影响到high>=value4是否成立}

if marketposition=-1 and high>=value4 then begin

buytocover next bar at market;

value5=lowest(low,zjcl);

zjckx=currentbar;

{当持仓为空头的时候,并且当根bar的最高价格突破value4时,执行平仓并且同时保存两个值,它们将被用于追踪后续的再进场策略;value5用来存储平仓时最近zjcl根bar的最低价格,zjckx用来存储平仓时的bar的编号,因为再进场策略需要限制在指定数量的bar内完成,否则再进场失效}

end;

if zjckx>0 and (currentbar>zjckx and currentbar<=zjckx+zjcs) and low<=value5 then begin

sellshort(“zjc_s”) next bar at market;

zjckx=-1;

{zjckx>0用来判断已经平仓,当前正在执行再进场策略部分;(currentbar>zjckx and currentbar<=zjckx+zjcs)用来限制再进场策略必须在zjcs根bar内完成,否则不再执行再进场策略;low<=value5用来判断当根bar的最低价格是否突破value5;当这三个条件都满足的情况下,执行再进场指令,重建之前的空仓部位,并且同时将zjckx赋值为-1,使策略不再执行再进场判断}

End

else if zjckx>0 and currentbar>zjckx+zjcs then

zjckx=-1;

  1. 小结

多头策略和空头策略中的输入参数可以根据情况进行优化,双均线只是一个判断趋势的传统指标,也可以用其它判断趋势的指标进行替换一下;通道线的作用是充当第二层滤网,也可以使用其它的过滤系统进行替换,它的作用是辅助趋势信号的,使在振荡行情中减少损失,同时带来的负面作用是在趋势行情中也减少了利润;双均线通道过滤交易系统可以改进和优化的地方是可以通过使用其它的趋势指标和二次过滤系统进行优化,进一步可以思考如何在趋势行情中避免减少利润,在振荡行情中避免更多的假信号。

  1. 双均线通道过滤交易系统和传统双均线交易系统的比较

商品合约选择shfe.pbhot(沪铅主力连续)从2010-01-13到2017-06-18,周期为1日,策略属性中设置最大bars数为50(默认的),滑价为2跳的金额(折算成每手金额50),手续费为成交金额的0.004%(和上期所交易手续费一致)。图1是双均线系统权益曲线图,前期由于市场处于振荡行情,过多的假趋势信号使双均线系统频繁交易,导致过多手续费、滑点费用及亏损,权益最低点为78659元,亏损了21341元;2016-04-25号之后,出现了趋势行情,开始扭亏为盈达到权益最高点140729元,上升幅度为53593元。

图2是双均线通道过滤交易系统权益曲线,前期市场处于振荡行情,由于加入了通道过滤,所以并没有频繁的交易;相比双均线系统,双均线通道过滤交易系统产生很少的滑点费用、交易手续费用及亏损,权益最低点为89558元,亏损了10442元,比双均线交易系统少51.1%;虽然从2016-04-25号之后,出现了趋势行情,但是双均线通道过滤交易系统由于加入了过滤,在抓取趋势行情上会比较迟钝,导致没有在趋势行情中获得过多的利润;图2中显示,双均线通道过滤交易系统是从2016-07-08号之后进场,从权益102766元上升到权益最高点150230,上升幅度为47464元,上升幅度比双均线系统小11.4%左右;总体上,在当前行情下,加入通道过滤系统在一定程度上避免了在振荡行情中过多的亏损,但是并没有过多的减少在趋势行情中的利润,这点通过表1的盈利因子可以看出。详细的可以看表1,双均线系统和双均线通道过滤交易系统的绩效对比。

源代码:https://www.fageka.com/i/JW071Lu0242

双均线通道过滤交易系统相关推荐

  1. 【全新升级】SF06(源码):过滤震荡,抓稳趋势,均线构建过滤通道,让利润奔跑(MC,金字塔,TB,文华8 四版本源码)

    致力于分享量化策略,培训视频,Python,算法研究等相关内容. 策略思想: 传统的双均线交易系统是通过快速均线与慢速均线的交叉来捕捉趋势:当快速均线上穿慢速均线的时候,出现买入信号,指示有一波上涨趋 ...

  2. 写一个双均线交易系统

    写一个双均线交易系统需要完成以下步骤: 数据获取:从金融市场获取股票价格数据. 数据预处理:对获取的数据进行清理.格式化等处理. 计算均线:使用算术平均数等方法计算出短期均线和长期均线. 生成交易信号 ...

  3. MQL4:双均线交易系统

    2019独角兽企业重金招聘Python工程师标准>>> 一.交易策略 入场原则: 做多入场:30分钟图上10周期EMA向上交叉20周期EMA 做空入场:30分钟图上10周期EMA向下 ...

  4. python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)

    聚宽 聚宽是一个做金融量化的网站,https://www.joinquant.com,登录注册,如果你写的文章.策略被别人采纳,增加积分,积分用于免费的回测时长.在我的策略,进入策略列表,里面有做好的 ...

  5. 开源量化框架Catalyst中文教程(3)——双均线策略

    GitHub:https://github.com/enigmampc/catalyst 官方文档:https://enigma.co/catalyst/index.html 参考视频:网易云课堂&l ...

  6. 【CTA系列】复合中短周期双均线策略

    本篇文章是基于研究报告的复现作品,旨在记录个人的学习过程和复现过程中的一些思路. 感谢中信期货研究员前辈的宝贵思路. 一.策略简介 1.双均线策略 均线是最经典的传统技术指 标之一 ,最早由美国投资专 ...

  7. python 量化交易_Python量化交易,tushare与talib学习示例演示,双均线(DMA)买卖策略...

    本篇文章为tushare与talib的学习示例,通过双均线策略演示如何使用talib与tushare.下面我们对代码进行详细解析. 引入3个包,分别是talib,tushare和pandas impo ...

  8. PyQt5_pyqtgraph双均线组合工具

    目录 双线组合概念 双线组合交易原则 交易原则翻译为代码逻辑 策略代码实现 运行工具代码 执行 验证策略思想 优化策略 数据 双线组合概念 双线组合又称两条均线组合,是由一条时间周期较短的均线和一条时 ...

  9. Python双均线策略回测(2021-10-12)

    Python双均线策略回测 1.择时策略简介 根据百度百科的解释,择时交易是指利用某种方法来判断大势的走势情况,是上涨还是下跌或者是盘整.如果判断是上涨,则买入持有:如果判断是下跌,则卖出清仓,如果是 ...

最新文章

  1. 【Linux】 iptables vs firewalld
  2. 干燥剂变身“配重剂”,究竟有多少商家在休闲零食市场浑水摸鱼?
  3. 游戏开发模式一:组件模式(Component)
  4. 【下载】《看见新力量》第二期,带你走进数十位科技创业者背后的故事
  5. java不等于正整数怎么输入_关于java:测试输入是否为正整数
  6. ROS与Arduino学习(六)Logging日志
  7. Bootstrap3代码模板
  8. Java高级程序猿技术积累
  9. 抖音记事本代码html,抖音使用教程 抖音表白代码使用方法介绍
  10. .NET Reflector + ILSpy 反编译过程
  11. 2019第七届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)
  12. Kotlin是如何帮助你避免内存泄漏的?
  13. 最全Pycharm教程(40)——Pycharm扩展功能之捆绑插件TextMate
  14. Android绘制波浪线
  15. gitLab数据备份和恢复
  16. python共享文件协同编辑_那些可多人协作编辑的在线文档工具
  17. 成功的人都是自律的普通人
  18. Oracle 11g 新特性 -- RMAN Data Recovery Advisor(DRA)
  19. Apple 在中国的维修和保修政策
  20. 华为认证HCIA-AI人工智能

热门文章

  1. OpenTSDB 查询过滤器
  2. 【转载】用外部程序启动AutoCAD方法的研究(启动闪屏制作与CreateProcess启动操控AutoCAD探索)
  3. 谷歌提供“被遗忘”服务:首日申请过万
  4. 循环神经网络的主要特点,循环神经网络应用举例
  5. 基于AT89S51单片机的智能加湿器系统电路设计
  6. LC-MS/MS蛋白质谱鉴定技术服务
  7. vivo X旗舰系列推出智慧办公Pro,琥珀扫描预装首发成亮点
  8. 改变软件开发生态,云表打造无代码的“倚天剑”
  9. HG1286412-LYH液晶屏(ST7920控制器)描点函数
  10. 视频格式无损/快速转换——ffmpeg(mkv等转mp4)