网格交易策略(Grid Trading)

策略介绍

网格策略本质上是一种低吸高抛的策略。标的物价格越低,吸纳的头寸越多;标的物价格越高,卖出的头寸越多。网格策略巧妙地借鉴了日常生活中渔翁撒网扑鱼的思路,对低位震荡市场进行撒网、加仓(标的物价格下跌时)、减仓(标的物价格上涨时)、收网(平仓)等操作,实现了一个基本上不需要看基本面(如果标的物是股票)和价格走势的获利系统。

本策略设置买卖价格各4档,在不同价格上设置不同的仓位,并且加入止盈和止损机制。

实现方法

首先,我们要确定一个撒网(建仓)时间和基准价。撒网需要选择在低位震荡行情相对底部的位置。一般的思路是比较当前的标的物价格与该时间点之前某个时间段内的价格均值,如果当前价格小于价格均值的一个下限,我们基本上就可以认为当前是处于相对底部的位置,可以进行撒网操作,并记录下撒网的价格基准。

确定好了基准价,我们就可以建立网格图表了。

如上图,我们建立了一个买卖的网格。以基准价建仓,建仓仓位为50%。在高于基准价时,价格每上涨5%,就卖出一部分仓位;在低于基准价时,价格每下跌3%,就增加一部分仓位。当价格上涨到卖4档或更高时,全仓卖出;当价格下跌到买4档或更低时,全仓买入。

我们设定买卖档位时,价格是非对称的,跌3%买,而涨5%卖。这样非对称的设定,是为了在期望值上使得整个系统的收益要大于0。

优点

网格交易法,加入了明确的仓位控制,并根据价格的变化采取高抛低吸的策略,在震荡的市场中十分有效。在网格的设定上,使用者可以根据市场情形的不同而灵活设定。比如,在熊市中,我们应当使用大网格,防止过早满仓;在震荡行情中,应当缩小网格,尽量多的抓住每一个小的波动。

缺点

由于网格策略由于本质上是一个低吸高抛的策略(类似于动量反转),在单边行情中,它存在一定的风险(俗称“破网”)。在大熊市中,可能会早早的满仓,并且一直没有离场信号,持续亏损。而在大牛市中,却一直仓位很低甚至空仓,资金使用率很低,收益跑不过基准。

如上图中,由于我们的基准价比较低,当价格大幅上涨时,很快突破了网格的最高档位,我们根据策略全仓卖出,一大波行情只抓住了一个开头,收益甚微。反过来,如果是个大幅下降的行情,我们会在很高的位置就满仓,套牢,损失不可估量。

因此,一个好的网格策略,必须要设计好相应的止损机制,并且能够对市场行情加以判断,适当做出调整。同时,需要在适当的时候对网格的基准价以及档位设置进行调整,以适应当前市场的变化。

回测

  • 参数设置:
时间段 2015-01-01至2015-10-01
回测频率(context.frequency) 1d
网格参数设置 见上文实现方法
  • 回测结果:

从上图我们可以看出,网格策略在这一个震荡时间段运行的非常好,在基准下跌20%的情况下,策略居然跑出了20%的收益。这就是网格策略的特性,在震荡中,通过对仓位的调整,不停的低买高卖,从波动中赚取收益。

但是,如果我们维持上面的参数不变,只是拉长回测时间,情况却有所不同。

价格持续上升,到后来突破了网格的上界(破网),并且一直没有回来,导致策略一直处于空仓,后面的上涨完全没有吃到。所以,我们在使用网格策略的过程中,要结合行情。在震荡的行情中,找到合适的基础价撒网。在大牛或者大熊市中,则要考虑更换其他的策略,或者结合其他的指标,来动态的分析。当价格长时间处于网格的上界或者下界之外时,我们要考虑重新设置基础价格,以适应行情的变化。

总结

网格交易策略把价格的变化和仓位的控制很好的结合到了一起,简单而又实用,在震荡波动的行情中尤为突出,能很好的做到高抛低吸,赚取价差。网格的宽度要结合行情进行调整,震荡行情适当收窄,趋势行情适当放宽。基准价的设定也很关键,而且在必要时可以重新设置。

实盘测试收益很低!代码有问题???

WeQuant交易策略—网格交易的更多相关文章

  1. AMA指标原作者Perry Kaufman 100+套交易策略源码分享

    更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 AMA技术指标与原作者 Kaufman 说起 Perry Kaufman 这个名字,不少读者会 ...

  2. 用matplotlib和pandas绘制股票MACD指标图,并验证化交易策略

    我的新书<基于股票大数据分析的Python入门实战>于近日上架,在这篇博文向大家介绍我的新书:<基于股票大数据分析的Python入门实战>里,介绍了这本书的内容.这里将摘录出部 ...

  3. 3. 量化交易策略 - https://github.com/3123958139/blog-3123958139/README.md

    3. 量化交易策略 * 输入数据 - 只取最原始可靠的,如 * date * open * high * low * close * volume * 输出数据 - 根据数理统计取权重,把 o, h, ...

  4. 高频交易策略[z]

    Market Order以最高速下市价单(market order)是买方最基本的策略 Looking for Price Discrepancies 这个就是高频统计套利(high frequenc ...

  5. 高频交易策略之Penny Jump[z]

    高频交易策略之Penny Jump 今天假设有一个笨笨的大型机构投资人(共同基金,银行,退休基金....),他想要买进一只股票,但又不想挂市价买进,所以就在市场里面挂了一张要买进的大单.这时候所有市场 ...

  6. 系统交易策略 hylt

    最令我尴尬的事情,莫过于很多朋友来到网站,不知道我说的是什么.大多数人以为鬼仆是推销软件的.其实这里理解是错的,特别是一些软件制作与经销商,更出 于推销的目的,故意夸大产品性能,模糊交易系统与一般行情 ...

  7. BotVS趋势交易策略-RSI

    BotVS趋势交易策略-RSI, 基于Python实现. RSI简单买卖测试, 默认 70-100卖出,0-30买入 参数 代码 import math def adjustFloat(v): ret ...

  8. 金融量化分析【day112】:量化交易策略基本框架

    摘要 策略编写的基本框架及其实现 回测的含义及其实现 初步学习解决代码错误 周期循环的开始时间 自测与自学 通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易.毕竟就像学游泳,有些东西讲是 ...

  9. 【海龟汤策略】反趋势交易策略源代码分享(基于BOTVS)

    策略介绍: 海龟之汤,简称“龟汤”,是个与海龟交易法则相反的交易策略,它利用了跟势交易(特别是海龟方式)在很多假突破方面的缺陷来获利(把海龟做成汤吃掉).上世纪八十年代早期,有个非常著名的交易员团体— ...

随机推荐

  1. jvm005 从jvm的角度谈谈线程的实现

    一.线程的实现 在谈谈线程之前,我们要先知道线程是何物?在学习操作系统时,我们得知进程和线程的概念,接下来我们将开始揭示线程. 什么是进程?通过任务管理器我们就看到了进程的存在.而通过观察,我们发现只 ...

  2. neo4j 数据库导入导出

    工作中需要将 A 图数据库的数据完全导出,并插入到 B 图数据库中.查找资料,好多都是通过导入,导出 CSV 文件来实现.然而,经过仔细研究发现,导出的节点/关系 都带有 id 属性 ,因为 A B ...

  3. Python基础之常用模块(三)

    1.configparser模块 该模块是用来对文件进行读写操作,适用于格式与Windows ini 文件类似的文件,可以包含一个或多个节(section),每个节可以有多个参数(键值对) 配置文件的 ...

  4. 记录Centos一些坑

    首先说一下写这篇博客的初衷. 最近去客户现场出差,搭建一套服务端的自动构建环境. 准备支持的环境有CentOS 7.5.java8.Tomcat 8.maven3.3.9.TBA 2.1.9.4 等等 ...

  5. [C++ Calculator 项目] 文件读入与可视化实现

    Calculator V1.1 注:这是C++计算器项目第三.四部分-文件读写与可视化 [基于原代码重构而得] 源文件已上传至Github 文件读写 可视化 文件读写: Ⅰ.在原基础代码上增加了-f参 ...

  6. Mybaits简诉

    先组织一下语言!Mybatis是一个框架,一个数据持久化的框架,作用就是SQL语句的映射!减少了JDBC繁琐的数据操作与类型转换!简而言之,就是方便.轻巧!什么是持久化,持久,恩,JDBC就是一个数据 ...

  7. MySQL系列(二)---MySQL事务

    MySql 事务 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 什么是事务(transaction) 保证成批操作要么完全执行,要么完全不执行,维护数据的完整性.也 ...

  8. eclipse 打包 jar 到 Linux上运行

    1.选择需要打包的项目,右键 Export 2.选择Runnable JAR file,然后点击 Next 3.选择jar包运行的main类,以及定义jar包的名字,保存的地方 4.将 导出来的 ja ...

  9. MyBatis+PageHelper实现分页

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7256105.html 前面讲到Spring+SpringMVC+MyBatis深入学习及搭建(十七)--Sp ...

  10. cesium 获取点击点的高程

    var picklHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);picklHandler .setInputAct ...