15天搭建ETF量化交易系统Day9—玩大A必学网格策略

news2025/1/5 10:09:19

08a1c136c24571eed241c792c7a53892.png

搭建过程

3fee63ddeefeeaf08335c57c8132d987.png

每个交易者都应该形成一套自己的交易系统。

很多交易者也清楚知道,搭建自己交易系统的重要性。现实中,从0到1往往是最难跨越的一步。
授人鱼不如授人以渔,为了帮助大家跨出搭建量化系统的第一步,我们决定推出这个主题系列。
这个系列中,我们用Python从0开始一步步搭建出一套ETF量化交易系统(选择ETF标的是因为对于普通交易者来说,ETF相对于选强势股难度要小,而且没有退市风险)。大家可以跟随着我们的实现路径来一起学习,从过程中掌握方法。
掌握了方法之后,你可以换成期货系统、比特币系统、美股系统,然后在实战中不断去完善自己的系统了。
搭建一套ETF量化交易系统涉及多个模块和组件的协同工作,包括数据源模块、量化策略模块、可视化模块、数据库模块、回测评估模块、自动交易模块等等。
DAY1链接如下:15天搭建ETF量化交易系统Day1—数据源模块
DAY2链接如下:15天搭建ETF量化交易系统Day2—图形显示模块
DAY3链接如下:15天搭建ETF量化交易系统Day3—上手经典回测框架
DAY4链接如下:15天搭建ETF量化交易系统Day4—玩转海龟交易策略
DAY5链接如下:15天搭建ETF量化交易系统Day5—打造实盘量化机器人
DAY6链接如下:15天搭建ETF量化交易系统Day6—打通同花顺自动交易
DAY7链接如下:15天搭建ETF量化交易系统Day7—全自动化交易系统
DAY8链接如下:15天搭建ETF量化交易系统Day8—强化自动交易模块
如果我们的ETF量化交易系统选择的品种是A股的话,这里分享一个客观数据:
A股自2007年首次站上3000点以来,至今16年的时间打了50次“3000点保卫战”。
由此可见,A股大部分时间是处在震荡行情。震荡行情的特点是股价在一个区间内频繁波动、节奏很难踏准。假设某股09年买入是10块,经过了一系列的涨跌之后,到了今年价格还是回到了10块,如果是简单地持有该股的投资方法,意味着十几年的时间不赚不赔。
网格策略是针对于震荡行情所设计的一个策略,可以依赖波动盈利,即使在震荡行情内我们也可以获利。要想做A股的ETF赚钱,必须学习网格策略。

b6bd205022bbf13827581279e0c768c8.png

网格策略

d284e2bb479faebf06cfe4d58ddf2a56.png

网格策略,顾名思义,我们需要划分出一个个的格子,组成网格。然后选择一个标的,可以是基金,也可以是股票。再选择这个标的合理的价格区间,把这个区间内的价格按照一定的间隔,划分成一个一个的格子。每上涨一格,即卖出一份,每下跌一格,即买入一份。类似下图:

63d2ec08cf4103f5034d50edbeed9c55.png

因此,网格策略不依赖于人为的判断,像预设程序一样,在一定区间内的不断低买高卖,高抛低吸,循环往复,在不断地震荡中获得利润。

网格策略的设计分为以下几步:

  • 划定网格范围。确定网格的最高点和最低点,也就是划定震荡的范围。

  • 等分网格数量。在最高价和最低价之间等分成网格。等分的间距一般为该股的日平均振幅。

  • 标定网格价格。在网格线上都有一个价位,当股价触及这个价位时按这个价位买卖股票。

  • 分配操作资金。将投入的总资金除以网格数量,得到每个网格可交易的资金量。比如投入1万元,那么最高点的网格持有1万元可用资金和0元股票市值,最低点的网格持有1万元的股票市值和0元可用资金。

我们设计后的网格图下图所示。

30aeed380cfcdd2e5a3d4d13e0cde37d.png

实际操作中,当股价处于什么网格,那么对比该网格的可用资金,相应地买卖股票以调整仓位。也就是跌一格就买,涨一格就卖,赚的是一格的利润。如下图所示。

e3aa98032defebb2fc79e5ec7905fdf3.png

网格策略的缺点:

  • 使用于震荡行情会有较好的效果。如果由震荡转为趋势行情的话,会出现比较尴尬的情况:“上升趋势突破高点后无筹码”,“下跌趋势跌破低点满仓亏损”。

  • 资金的使用率较低,即首仓买入时,剩下的资金要作为下跌时加仓使用,而上涨时还需要卖出。资金利用率低意味着收益率低。因此网格数量不能太多,否则资金被分散太多。

  • 频繁交易对手续费和滑点比较敏感。

0302d3e2e5ca910688073352e57ddeac.png

代码设计

128de011e935ab540b80c9a1ffe00c15.png

接下来我们设计一个网格策略,使用Backtrader来回测下网格策略的使用效果。策略大致思想如下:

首先动态地得到该股60分钟级别数据的60周期的最低价移动序列,选择最低价作为基准的原因是我更偏向于做反转类的行情。

Backtrader的关键代码为:

self.lowest = bt.indicators.Lowest(self.data.low, period=60, subplot=False)

然后划定网格的间距为1%,太小的网格虽然能够覆盖更多的波动,但是带来的是频繁的交易,也会更大程度受到手续费和滑点额影响。网格的数量为10个,其中有2个是埋在最低价之下的,为的是防范下跌趋势跌破低点这个风险。

Backtrader的关键代码为:

pct_levels = [x for x in np.arange(1 - self.params.grid_perc * 2, 1 + self.params.grid_perc * 8, self.params.grid_perc)]

将最低价移动序列与网格相乘即得到了动态的网格价格区间。

Backtrader的关键代码为:

self.price_levels = [self.lowest * x for x in pct_levels]

每个交易日判断的逻辑比较简单,判断当前股价的上一格和下一格的价位,跌一格就买,涨一格就卖。使用Backtrader中的order_target_percent函数来调整目标仓位。

Backtrader的关键代码为:

self.order_target_percent(
    target=((len(self.price_levels) - 1)-self.last_price_index) / (len(self.price_levels) - 1))

我们回测516350半导体最近一个月60分钟数据,初始资金是10万的话最终可以做到10.5万的市值。回测效果如下所示:

ee514f771d9fe0dc5b307366576b03fc.png

02c62db6885304a2221ab2698d3504e8.png

总结

cacab8087efbf2f7dd3dc9825a28241b.png

本文是采用了网格绑定固定涨跌幅的方法,在一定程度上可以让网格大小跟随股价的变化情况自动调整。也有一些优化策略是将网格绑定波段指标,原理上大同小异。

学会了网格策略的思想之后,接下来我们就可以把这个策略融入到我们的交易系统里面了!

说明

此系列为连载专栏,完整代码会上传知识星球《玩转股票量化交易》!作为会员们的学习资料。

想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!

非星球会员需要的话,需要单独联系我购买!

知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览

8950d689a1c7c1a1092d7e8e248a5953.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1855078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode用vue框架2,续写登陆页面逻辑,以及首页框架的搭建

目录 前言: 一、实现登录页信息验证逻辑 1.实现登录数据双向绑定 2.验证用户输入数据是否和默认数据相同 补充知识1: 知识点补充2: 二、首页和登录页之间的逻辑(1) 1. 修改路由,使得程序被访问先访问首页 知识点补充3&am…

[每周一更]-(第102期):认识相机格式Exif

文章目录 EXIF数据包含的信息读取EXIF数据的工具和库EXIF数据读取示例(Go语言)想法参考 相机拍摄的照片,在照片展示行无水印信息,但是照片属性中会包含比较丰富的信息,相机品牌、型号、镜头信息等,这些我们…

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述 基于NURBS曲线的数据拟合算法,非均匀有理B样条(Non-Uniform Rational B-Splines,简称NURBS&#xf…

电子商务的未来:大数据||论主流电商大数据采集API接口的重要性

每天全球生成2.5万亿字节。金融交易,用户出版物和众多内容,数据对于组织了解消费者的行为和实际需求极为重要。 在一个互联、动态和竞争激烈的多元世界中,能够预测技术和市场变化的组织在竞争中生存下来。这是大数据管理的真正目标&#xff0…

鸿蒙生态伙伴SDK市场正式发布,驱动千行百业鸿蒙原生应用开发

6月21-23日,华为开发者大会(HDC 2024)在东莞举办。在22日举办的【鸿蒙生态伙伴SDK】论坛中,正式发布了【鸿蒙生态伙伴SDK市场】(以下简称:伙伴SDK市场),伙伴SDK市场是为开发者提供各…

PHP转Go系列 | ThinkPHP与Gin的使用姿势

大家好,我是码农先森。 安装 使用 composer 进行项目的创建。 composer create-project topthink/think thinkphp_demo使用 go mod 初始化项目。 go mod init gin_demo目录 thinkphp_demo 项目目录结构。 thinkphp_demo ├── LICENSE.txt ├── README.md …

JVM专题三:Java代码如何运行

通过前面的第一篇文章,对JVM整体脉络有了一个大概了解。第二篇文章我们通过对高级语言低级语言不同特性的探讨引出了Java的编译过程。有了前面的铺垫,咱们今天正式进入Java到底是如何运行起来的探讨。 目前大部分公司都是使用maven作为包管理工具&#x…

Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!

代码仓库 会同步代码到 GitHub https://github.com/turbo-duck/flink-demo 当前章节 继续上一节的内容:https://blog.csdn.net/w776341482/article/details/139875037 上一节中,我们需要使用 nc 或者 telnet 等工具来模拟 Socket 流。这节我们写一个 …

基于YOLOv5的火灾检测系统的设计与实现(PyQT页面+YOLOv5模型+数据集)

基于YOLOv5的火灾检测系统的设计与实现 概述系统架构主要组件代码结构功能描述YOLOv5检测器视频处理器主窗口详细代码说明YOLOv5检测器类视频处理类主窗口类使用说明环境配置运行程序操作步骤检测示例图像检测视频检测实时检测数据集介绍数据集获取数据集规模YOLOv5模型介绍YOL…

python输入、输出和变量

一、变量 变量是存储数据的容器。在 Python 中,变量在使用前不需要声明数据类型,Python 会根据赋值自动推断变量类型。 定义变量: 二、输入(Input) input() 函数用于获取用户输入。默认情况下,input() 会…

在阿里云使用Docker部署MySQL服务,并且通过IDEA进行连接

阿里云使用Docker部署MySQL服务,并且通过IDEA进行连接 这里演示如何使用阿里云来进行MySQL的部署,系统使用的是Linux系统 (Ubuntu)。 为什么使用Docker? 首先是因为它的可移植性可以在任何有Docker环境的系统上运行应用,避免了在不通操作系…

Android intent 打开链接跳转到外部浏览

前言: 各位同学大家好, 最近接到一个比较诡异的需求 ,不是通常的webview 加URL显示网页 是需要跳转到外部浏览器 ,我这边处理好了就分享给大家 效果图 : 点几就跳转到外部浏览器 如图 具体代码实现: 点击打开链接并跳转外部浏览器方法 public void openBrowser(Con…

urfread刷SQL|left join|175. 组合两个表

175. 组合两个表 题目描述 左连接 因为不是所有人都有地址 如果只是用join,那么只会匹配到有地址的人。没有地址的人,就不会显示在结果中。 如果使用左连接,会把左表都显示在结果中,如果谁匹配不到右表,就为空值。 所…

Excel做简单的趋势预测

这种方法不能代替机器学习,时序分析等,只是为后面的时序预测提供一个经验认识。 step1 选中序号列(或时间列)与预测列如图1所示: 图1 step2 工具栏点击“数据”,然后再“数据”下点击“预测模型”&#x…

CARLA自动驾驶模拟器基础

CARLA 使用服务器-客户端架构运行,其中 CARLA 服务器运行模拟并由客户端向其发送指令。客户端代码使用 API 与服务器进行通信。要使用 Python API,您必须通过 PIP 安装该模块: pip3 install carla-simulator # Python 3World and client 客…

AG32 MCU是否支持DFU下载实现USB升级

1、AG32 MCU是否支持DFU下载实现USB升级呢? 先说答案是NO. STM32 可以通过内置DFU实现USB升级,AG32 MCU目前不支持。但用户可以自己写一个DFU, 作为二次boot. 2、AG32 MCU可支持的下载方式有哪些呢? 我们AG32裸机下载只支持uart和…

文华财经T8自动化交易程序策略模型指标公式源码

文华财经T8自动化交易程序策略模型指标公式源码: //定义变量 //资金管理与仓位控制 8CS:INITMONEY;//初始资金 8QY:MONEYTOT;//实际权益 8QY1:MIN(MA(8QY,5*R),MA(8QY,2*R)); FXBL:N1; DBKS:8QY1*N1;//计算单笔允许亏损额度 BZDKS:MAX(AA-BB,N*1T)*UNIT; SZDKS:MAX…

ChatGPT原理和训练【 ChatGPT是由OpenAI开发】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

骑马与砍杀-战团mod制作-基础篇-武器模型入骑砍(二)

骑马与砍杀战团mod制作-基础-武器模型入骑砍笔记(二) 资料来源 学习的资料来源: b站【三啸解说】手把手教你做【骑砍】MOD,基础篇,链接为: https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sour…

秋招突击——6/22——复习{区间DP——加分二叉树,背包问题——买书}——新作{移除元素、实现strStr()}

文章目录 引言复习区间DP——加分二叉树个人实现 背包问题——买书个人实现参考实现 新作移除元素个人实现参考思路 找出字符串中第一个匹配项的下标个人实现参考实现 总结 引言 今天做了一个噩梦,然后流了一身汗,然后没起来,九点多才起床背…