网格交易策略:从原理、应用到实战Python回测

01
引言
随着金融市场的快速发展,量化交易成为投资者追求收益的一种重要手段。在众多的量化交易策略中,网格交易策略(Grid Trading Strategy)因其简单易用、风险控制灵活等优点而备受青睐。网格交易策略的核心思想是“低买高卖”,通过分段买卖来赚取市场波动中的差价。在不同的市场环境下,网格交易都展现出了独特的魅力。然而,尽管网格策略在震荡市场中表现优异,但在趋势行情或极端市场波动中也存在一定的局限性。
本文将详细介绍网格交易策略的基本原理和核心逻辑,分析其优缺点,结合实战案例展示其应用场景,并通过Python代码演示如何基于股票指数在Backtrader平台上进行回测,以帮助读者更好地理解和运用这一策略。

02
基本原理
网格交易策略是一种基于价格波动的量化交易策略。其基本原理是将市场价格按照一定的间隔划分为多个价格层,并在这些价格层之间进行买卖操作。在价格较低的层次买入,在价格较高的层次卖出,从而在震荡市场中通过波动获利。
网格交易策略首先是设定价格区间的上限和下限,并根据该区间划分出多个等距的价格层(网格)。例如,如果价格区间为10元到12元,可以将其划分为0.2元为单位的多个网格(10, 10.2, 10.4,…, 12)。当价格跌破某个网格时买入,当价格上涨超过网格时卖出。例如,价格从10.4下跌到10.2时买入,从10.2上涨到10.4时卖出。该过程重复进行,持续捕捉每个网格内的波动收益。网格交易策略的核心在于不预测市场的具体趋势,而是基于市场的波动性进行操作。只要价格在设定的网格范围内上下波动,策略便能够盈利。
网格交易策略适用于波动性较强的市场,尤其是震荡市或无明显趋势的市场。在这些市场环境下,网格策略能够通过频繁交易赚取差价。而在单边上涨或下跌的市场中,网格策略的表现则相对较差,因为此时价格可能会持续向单一方向偏移,导致买入订单积累而无法卖出获利。
网格交易策略的优点在于无需预测市场方向,只依赖于价格的波动性,且很容易地被程序化,交易者只需设定好网格区间和规则,便可自动进行买卖操作,有助于减少情绪波动带来的主观决策失误。
缺点则表现在:
(1)适应性差。网格交易策略的最大风险在于市场趋势性强烈时效果不佳,尤其在单边上涨或下跌的行情中,可能会造成买单无法及时卖出,或者卖单没有买回的机会。
(2)资金占用高。为了在不同的价格区间内进行操作,网格策略通常要求较高的资金量。尤其是在价格大幅下跌时,可能需要更多的资金进行补仓操作。
(3)交易频繁,手续费高。由于网格策略依赖频繁的买卖操作,手续费和滑点可能会对收益产生较大影响,特别是在交易成本较高的市场环境下。

03
策略回测
在网格交易策略中,寻找合适的网格间距、最低价、最高价等参数,是提高策略效果的关键。手动设置这些参数可能不适合所有市场环境,因此自动化调整这些参数有助于提升策略的灵活性和适应性。自动化寻找这些参数的方法可以通过历史数据的统计分析、技术指标、机器学习优化等手段实现。以下是一些常见的自动化方法和步骤。
自动寻找网格参数的基本思路
要自动化确定网格间距、最低价和最高价,通常需要考虑以下几个关键步骤:
(1)确定价格波动区间:
使用历史价格数据的最大值和最小值作为初步参考,从而确定网格的最低价和最高价。
(2)确定网格间距:
使用市场波动率、历史价格数据的均值和标准差,或根据技术指标如ATR(平均真实波幅)来计算合适的网格间距。
(3)网格优化:
可以使用回测优化技术(如网格搜索或遗传算法)来自动调整这些参数,最大化策略的收益率或某个其他性能指标(如夏普比率)。
import qstock as qs
import pandas as pd
import backtrader as bt # 创建自定义网格交易策略
classGridStrategy(bt.Strategy):params =(('grid_size',0.03), # 网格间距('grid_min',2.23), # 网格最低价('grid_max',3.89), # 网格最高价('order_pct',0.1), # 每次买入卖出的仓位比例)def __init__(self):self.buy_orders =[]self.sell_orders =[]self.grid_levels =[]# 生成网格层次self.grid_levels =[self.p.grid_min + i * self.p.grid_size for i in range(int((self.p.grid_max - self.p.grid_min)/ self.p.grid_size)+1)]def next(self):current_price = self.data.close[0]# 买入条件:当前价格低于某个网格层次且未持有该层次买单for level in self.grid_levels:if current_price <= level andnot any([order for order in self.buy_orders if order.price == level]):size = self.broker.getcash()* self.p.order_pct / current_priceorder = self.buy(price=level, size=size)self.buy_orders.append(order)# 卖出条件:当前价格高于某个网格层次且未持有该层次卖单for level in self.grid_levels:if current_price >= level andnot any([order for order in self.sell_orders if order.price == level]):size = self.broker.getvalue()* self.p.order_pct / current_priceorder = self.sell(price=level, size=size)self.sell_orders.append(order) qs.bt_result(code='上证50ETF',start='20200101',end='20240927',strategy=GridStrategy,startcash=1000000.0,commission=0.0001,
) 

回测期间买入持有该指数ETF的收益如下,该回测样本期间,网格交易策略要远远优于买入持有策略:
df0=qs.data_feed('上证50ETF',index='sz50',start='20200101',end='20240927')
qs.start_backtest(df0) 

上述网格交易策略的网格间距、最低价、最高价等参数均是手动指定的,实际交易中,可能需要自动化寻找这些参数,下面提供两种方法仅供参考,由于篇幅有限,完整代码略(见知识星球)。
方法一:基于历史数据的统计分析
通过分析历史价格数据的统计特征,可以较为直观地确定网格策略的参数。使用历史数据的最大值和最小值,也可以使用一定的历史窗口,比如最近一年的最高和最低价,来动态调整最低价和最高价。将网格参数与时间窗口相结合,根据一定的窗口期(例如过去30天、60天等)的统计特征动态调整网格参数。
classDynamicGridStrategy(bt.Strategy):params =(('lookback',250), # 回看250天确定历史区间('grid_multiple',1.5), # 网格间距倍数,乘以标准差('order_pct',0.1), # 每次买卖的仓位比例)pass qs.bt_result(code='上证50ETF',start='20200101',end='20240929',strategy=DynamicGridStrategy,startcash=1000000.0,commission=0.0001,
) 方法二:基于技术指标(ATR)的网格间距
ATR(平均真实波幅)是衡量市场波动性的技术指标,适合作为动态调整网格间距的工具。在市场波动较大时,ATR值会升高,反之则会降低。因此,ATR可以帮助我们动态调整网格的间距。使用ATR作为网格间距,ATR反映了市场的波动性,可以自适应调整网格间距,使得在波动较大时增大间距,波动较小时减小间距。当ATR值变大时,网格间距随之增大,反之当ATR值减小时,网格间距变小。
classATRGridStrategy(bt.Strategy):params =(('atr_period',20), # ATR的计算周期('grid_multiple',1.5), # 网格间距倍数('lookback',90), # 回看60天确定历史区间('order_pct',0.1), # 每次买卖的仓位比例)pass qs.bt_result(code='上证50ETF',start='20200101',end='20240929',strategy=ATRGridStrategy,startcash=1000000.0,commission=0.0001,
) 
04
结语
网格交易策略以其简洁、适用性广的特点吸引了众多投资者,尤其在震荡行情中有着较为出色的表现。本文介绍了网格交易的基本原理和应用场景,并通过Python代码展示了如何在Backtrader上对股票指数ETF基金进行回测。尽管网格策略有一定的局限性,但通过合理的资金管理和对市场行情的适应性调整,网格策略依然可以为投资者带来稳定的收益。在实际操作中,投资者需结合自己的风险偏好与市场环境,灵活应用网格策略。

关于Python金融量化

专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取qstock源代码、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2可获取相关优惠。

相关文章:
网格交易策略:从原理、应用到实战Python回测
01 引言 随着金融市场的快速发展,量化交易成为投资者追求收益的一种重要手段。在众多的量化交易策略中,网格交易策略(Grid Trading Strategy)因其简单易用、风险控制灵活等优点而备受青睐。网格交易策略的核心思想是“低买高卖”&…...
软考论文《论大数据处理架构及其应用》精选试读
论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…...
fatfs API使用手册
配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…...
9.23作业
仿照string类,自己手动实现 My_string 代码如下 MyString.h #ifndef MYSTRING_H #define MYSTRING_H #include <iostream> #include <cstring>using namespace std;class My_string { private:char *ptr; //指向字符数组的指针int size; …...
Unity3D 房间去重叠化算法详解
前言 在Unity3D游戏开发中,经常需要生成和处理多个房间的场景,特别是在地牢生成、房屋布局或迷宫设计等应用中。为了确保生成的房间不会重叠,我们需要一种有效的去重叠化算法。以下将详细介绍该算法的原理和代码实现。 对惹,这里有…...
mybatis 配置文件完成增删改查(五) :单条件 动态sql查询,相当于switch
文章目录 单条件 动态sql查询写测试方法 疑问总结 单条件 动态sql查询 <select id"selectByConditionBySingle" resultMap"brandResultMap">.select *from tb_brandwhere<choose>/*相当于switch*/<when test"status ! null">…...
全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口
IP地址城市版查询接口 API是指能够根据IP地址查询其所在城市等地理位置信息的API接口。这类接口在网络安全、数据分析、广告投放等多个领域有广泛应用。以下是一些可用的IP地址城市版查询接口API及其简要介绍 1. 快证 IP归属地查询API 特点:支持IPv4 提供高精版、…...
Vue3+FastAPI中Token的刷新机制(含代码示例)
在Vue3和FastAPI的应用中,token刷新机制通常涉及以下几个步骤: 登录过程:用户登录时,后端FastAPI验证用户信息,验证通过后生成一个访问令牌(access token)和一个刷新令牌(refresh t…...
【GAN 图像生成】
理论知识学习: PART 1: 生成对抗网络GAN 深度学习模型,用于生成数据 对抗式训练,生成器v判别器 DCGAN>WGAN>StyleGAN技术不断进化 GAN在艺术创作。数据增强领域应用越来越广泛 应用: GAN在图像合成&#x…...
【自然语言处理】词嵌入模型
词嵌入(Word Embedding) 是一种将词汇表示为实数向量的技术,通常是低维度的连续向量。这些向量被设计为捕捉词汇之间的语义相似性,使得语义相似的词在嵌入空间中的距离也更近。词嵌入可以看作是将离散的语言符号(如单词…...
了解针对基座大语言模型(类似 ChatGPT 的架构,Decoder-only)的重头预训练和微调训练
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 随着自然语言处理(NLP)技术的飞速进步,基于 Transformer 架构的大语言模型在众多任务中取得了显著成就。特别是 Decoder-only 架构,如 GPT 系列模型&…...
cmake如何在编译时区分-std=c++17和-std=gnu++17?检查宏
如何在编译时区分-stdc17和-stdgnu17?检查宏?-腾讯云开发者社区-腾讯云 我正在使用__int128扩展的g。-stdc17的问题是,一些C库不具备对该扩展的全部支持(即std::make_unsigned<>失败)。当使用-stdgnu17时,它工作得很好。 我…...
速通数据结构与算法第七站 排序
系列文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 2 速通数据结构与算法第二站 顺序表 http://t.csdnimg.cn/WVyDb 3 速通数据结构与算法第三站 单链表 http://t.csdnimg.cn/cDpcC 4 速通…...
灵当CRM index.php接口SQL注入漏洞复现 [附POC]
文章目录 灵当CRM index.php接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 灵当CRM index.php接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技…...
修复: Flux女生脸不再油光满面, 屁股下巴 -- 超实用Comfyui小技巧
ComfyUI上目前最强画图模型公认为Flux. 初次用Flux基础模型画真实的女生时, 和SD比起来, 会觉得画出来细节更多, 更真实. 但是当画多了, 就会觉得画出来的女生总是似曾相识. 仔细观察, 会发现一些共同的特征. 人偏老气, 像30~50的女生. 改了提示词也效果不大. 颧骨凸起, 嘴…...
Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地
发现好久之前整理的推荐系统被遗忘在了草稿箱,让它出来见见世面。。。后续空了持续更新 文章目录 1.Background2.Related works2.1 典型推荐模型2.1.1 DIN2.1.2 DIEN2.1.3 SIM2.1.4 MMoE2.1.5 其他 2.2. 生成式推荐 3.Method3.1 统一特征空间3.2 重塑召回排序模型3.…...
金智维KRPA之Excel自动化
Excel自动化操作概述 Excel自动化主要用于帮助各种类型的企业用户实现Excel数据处理自动化,Excel自动化是可以从单元格、列、行或范围中读取数据,向其他电子表格或工作簿写入数据等活动。 通过相关命令,还可以对数据进行排序、进行格式…...
哪款宠物空气净化器能有效去除浮毛?希喂、352实测分享
你是否曾经站在家电卖场里,面对琳琅满目的宠物空气净化器产品而感到无所适从?或者在浏览网上商城时,被海量的参数和功能描述搞得头晕眼花?别担心,你不是一个人。在这个科技飞速发展的时代,选择一台既能满足…...
2024.9.28更换启辰R30汽车火花塞
2024.9.28周六汽车跑了11万公里,实在加速肉,起步顿挫,油耗在8个,决定更换火花塞。第一个火花塞要拆掉进气歧管。第二和第三个可以直接换。打开第二个火花塞一看电极都被打成深坑,针电极都被打凸。我有两个旧的火花塞&a…...
2024上海网站建设公司哪家比较好TOP3
判断一家网建公司的好坏,第一是看公司背景,包括成立时间,工商注册信息等,第二可以去看看建站公司做的案例,例如,网站开发、设计、引流等等的以往案例,了解清楚具体的业务流程。 一、公司背景 …...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
深入理解 React 样式方案
React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...
接口 RESTful 中的超媒体:REST 架构的灵魂驱动
在 RESTful 架构中,** 超媒体(Hypermedia)** 是一个核心概念,它体现了 REST 的 “表述性状态转移(Representational State Transfer)” 的本质,也是区分 “真 RESTful API” 与 “伪 RESTful AP…...
简约商务通用宣传年终总结12套PPT模版分享
IOS风格企业宣传PPT模版,年终工作总结PPT模版,简约精致扁平化商务通用动画PPT模版,素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...
