当前位置: 首页 > news >正文

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

76bfd5f604fe9f5e99554aed298b0bf8.gif

01

引言

随着金融市场的快速发展,量化交易成为投资者追求收益的一种重要手段。在众多的量化交易策略中,网格交易策略(Grid Trading Strategy)因其简单易用、风险控制灵活等优点而备受青睐。网格交易策略的核心思想是“低买高卖”,通过分段买卖来赚取市场波动中的差价。在不同的市场环境下,网格交易都展现出了独特的魅力。然而,尽管网格策略在震荡市场中表现优异,但在趋势行情或极端市场波动中也存在一定的局限性。

本文将详细介绍网格交易策略的基本原理和核心逻辑,分析其优缺点,结合实战案例展示其应用场景,并通过Python代码演示如何基于股票指数在Backtrader平台上进行回测,以帮助读者更好地理解和运用这一策略。

b9ccb906e5a1ccc369cb849e4653c0dc.gif

02

基本原理

网格交易策略是一种基于价格波动的量化交易策略。其基本原理是将市场价格按照一定的间隔划分为多个价格层,并在这些价格层之间进行买卖操作。在价格较低的层次买入,在价格较高的层次卖出,从而在震荡市场中通过波动获利。

网格交易策略首先是设定价格区间的上限和下限,并根据该区间划分出多个等距的价格层(网格)。例如,如果价格区间为10元到12元,可以将其划分为0.2元为单位的多个网格(10, 10.2, 10.4,…, 12)。当价格跌破某个网格时买入,当价格上涨超过网格时卖出。例如,价格从10.4下跌到10.2时买入,从10.2上涨到10.4时卖出。该过程重复进行,持续捕捉每个网格内的波动收益。网格交易策略的核心在于不预测市场的具体趋势,而是基于市场的波动性进行操作。只要价格在设定的网格范围内上下波动,策略便能够盈利。

网格交易策略适用于波动性较强的市场,尤其是震荡市或无明显趋势的市场。在这些市场环境下,网格策略能够通过频繁交易赚取差价。而在单边上涨或下跌的市场中,网格策略的表现则相对较差,因为此时价格可能会持续向单一方向偏移,导致买入订单积累而无法卖出获利。

网格交易策略的优点在于无需预测市场方向,只依赖于价格的波动性,且很容易地被程序化,交易者只需设定好网格区间和规则,便可自动进行买卖操作,有助于减少情绪波动带来的主观决策失误

缺点则表现在:

(1)适应性差。网格交易策略的最大风险在于市场趋势性强烈时效果不佳,尤其在单边上涨或下跌的行情中,可能会造成买单无法及时卖出,或者卖单没有买回的机会。

(2)资金占用高。为了在不同的价格区间内进行操作,网格策略通常要求较高的资金量。尤其是在价格大幅下跌时,可能需要更多的资金进行补仓操作。

(3)交易频繁,手续费。由于网格策略依赖频繁的买卖操作,手续费和滑点可能会对收益产生较大影响,特别是在交易成本较高的市场环境下。

2ef244c664f583ec7e3ec58c77668a87.gif

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,
)

fb3a9fa92d274c8e1065547ab7ed1d3e.png

f59c149082f5e9239c12170bc915b341.png

回测期间买入持有该指数ETF的收益如下,该回测样本期间,网格交易策略要远远优于买入持有策略:

df0=qs.data_feed('上证50ETF',index='sz50',start='20200101',end='20240927')
qs.start_backtest(df0)

6caf4f4dbc49584159a527de2370e702.png

012960f359a84d26b1f4c7679c746b74.png

上述网格交易策略的网格间距、最低价、最高价等参数均是手动指定的,实际交易中,可能需要自动化寻找这些参数,下面提供两种方法仅供参考,由于篇幅有限,完整代码略(见知识星球)。

方法一:基于历史数据的统计分析

通过分析历史价格数据的统计特征,可以较为直观地确定网格策略的参数。使用历史数据的最大值和最小值,也可以使用一定的历史窗口,比如最近一年的最高和最低价,来动态调整最低价和最高价。将网格参数与时间窗口相结合,根据一定的窗口期(例如过去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,
)

2a5c1bd979d8663a11273dd403d26d4b.gif

04

结语

网格交易策略以其简洁、适用性广的特点吸引了众多投资者,尤其在震荡行情中有着较为出色的表现。本文介绍了网格交易的基本原理和应用场景,并通过Python代码展示了如何在Backtrader上对股票指数ETF基金进行回测。尽管网格策略有一定的局限性,但通过合理的资金管理和对市场行情的适应性调整,网格策略依然可以为投资者带来稳定的收益。在实际操作中,投资者需结合自己的风险偏好与市场环境,灵活应用网格策略。

85e4eb4a7997cc4c2ecbe8dc35e89afc.png

关于Python金融量化

18e3b1eb23da8dc951e5f7c634d2fbac.png

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

09f5ab1587a5edd6aa5d4e866f8a9363.jpeg

相关文章:

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

01 引言 随着金融市场的快速发展&#xff0c;量化交易成为投资者追求收益的一种重要手段。在众多的量化交易策略中&#xff0c;网格交易策略&#xff08;Grid Trading Strategy&#xff09;因其简单易用、风险控制灵活等优点而备受青睐。网格交易策略的核心思想是“低买高卖”&…...

软考论文《论大数据处理架构及其应用》精选试读

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法&#xff0c;以模型构造、模型转换和精化为核心&#xff0c;提供了一套软件设计的指导规范。在模型驱动架构环境下&#xff0c;通过创建出机器可读和高度抽象的模型实现对不同问题域的描述&#xff0c;这些模型…...

fatfs API使用手册

配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…...

9.23作业

仿照string类&#xff0c;自己手动实现 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游戏开发中&#xff0c;经常需要生成和处理多个房间的场景&#xff0c;特别是在地牢生成、房屋布局或迷宫设计等应用中。为了确保生成的房间不会重叠&#xff0c;我们需要一种有效的去重叠化算法。以下将详细介绍该算法的原理和代码实现。 对惹&#xff0c;这里有…...

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 特点&#xff1a;支持IPv4 提供高精版、…...

Vue3+FastAPI中Token的刷新机制(含代码示例)

在Vue3和FastAPI的应用中&#xff0c;token刷新机制通常涉及以下几个步骤&#xff1a; 登录过程&#xff1a;用户登录时&#xff0c;后端FastAPI验证用户信息&#xff0c;验证通过后生成一个访问令牌&#xff08;access token&#xff09;和一个刷新令牌&#xff08;refresh t…...

【GAN 图像生成】

理论知识学习&#xff1a; PART 1&#xff1a; 生成对抗网络GAN 深度学习模型&#xff0c;用于生成数据 对抗式训练&#xff0c;生成器v判别器 DCGAN>WGAN>StyleGAN技术不断进化 GAN在艺术创作。数据增强领域应用越来越广泛 应用&#xff1a; GAN在图像合成&#x…...

【自然语言处理】词嵌入模型

词嵌入&#xff08;Word Embedding&#xff09; 是一种将词汇表示为实数向量的技术&#xff0c;通常是低维度的连续向量。这些向量被设计为捕捉词汇之间的语义相似性&#xff0c;使得语义相似的词在嵌入空间中的距离也更近。词嵌入可以看作是将离散的语言符号&#xff08;如单词…...

了解针对基座大语言模型(类似 ChatGPT 的架构,Decoder-only)的重头预训练和微调训练

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 随着自然语言处理&#xff08;NLP&#xff09;技术的飞速进步&#xff0c;基于 Transformer 架构的大语言模型在众多任务中取得了显著成就。特别是 Decoder-only 架构&#xff0c;如 GPT 系列模型&…...

cmake如何在编译时区分-std=c++17和-std=gnu++17?检查宏

如何在编译时区分-stdc17和-stdgnu17&#xff1f;检查宏&#xff1f;-腾讯云开发者社区-腾讯云 我正在使用__int128扩展的g。-stdc17的问题是&#xff0c;一些C库不具备对该扩展的全部支持(即std::make_unsigned<>失败)。当使用-stdgnu17时&#xff0c;它工作得很好。 我…...

速通数据结构与算法第七站 排序

系列文章目录 速通数据结构与算法系列 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 前言 免责声明&#xff1a;请勿利用文章内的相关技…...

修复: Flux女生脸不再油光满面, 屁股下巴 -- 超实用Comfyui小技巧

ComfyUI上目前最强画图模型公认为Flux. 初次用Flux基础模型画真实的女生时, 和SD比起来, 会觉得画出来细节更多, 更真实. 但是当画多了, 就会觉得画出来的女生总是似曾相识. 仔细观察, 会发现一些共同的特征. 人偏老气, 像30~50的女生. 改了提示词也效果不大. 颧骨凸起, 嘴…...

Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

发现好久之前整理的推荐系统被遗忘在了草稿箱&#xff0c;让它出来见见世面。。。后续空了持续更新 文章目录 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数据处理自动化&#xff0c;Excel自动化是可以从单元格、列、行或范围中读取数据&#xff0c;向其他电子表格或工作簿写入数据等活动。 通过相关命令&#xff0c;还可以对数据进行排序、进行格式…...

哪款宠物空气净化器能有效去除浮毛?希喂、352实测分享

你是否曾经站在家电卖场里&#xff0c;面对琳琅满目的宠物空气净化器产品而感到无所适从&#xff1f;或者在浏览网上商城时&#xff0c;被海量的参数和功能描述搞得头晕眼花&#xff1f;别担心&#xff0c;你不是一个人。在这个科技飞速发展的时代&#xff0c;选择一台既能满足…...

2024.9.28更换启辰R30汽车火花塞

2024.9.28周六汽车跑了11万公里&#xff0c;实在加速肉&#xff0c;起步顿挫&#xff0c;油耗在8个&#xff0c;决定更换火花塞。第一个火花塞要拆掉进气歧管。第二和第三个可以直接换。打开第二个火花塞一看电极都被打成深坑&#xff0c;针电极都被打凸。我有两个旧的火花塞&a…...

2024上海网站建设公司哪家比较好TOP3

判断一家网建公司的好坏&#xff0c;第一是看公司背景&#xff0c;包括成立时间&#xff0c;工商注册信息等&#xff0c;第二可以去看看建站公司做的案例&#xff0c;例如&#xff0c;网站开发、设计、引流等等的以往案例&#xff0c;了解清楚具体的业务流程。 一、公司背景 …...

TDesign组件库+vue3+ts 如何视觉上合并相同内容的table列?(自定义合并table列)

背景 当table的某一列的某些内容相同时&#xff0c;需要在视觉上合并这一部分的内容为同个单元格 如上图所示&#xff0c;比如需要合并当申请人为同个字段的列。 解决代码 <t-table:data"filteredData":columns"columns":rowspan-and-colspan"…...

BACnet协议-(基于ISO 8802-3 UDP)(2)

1、模拟设备的工具界面如下&#xff1a; 2、使用yet another bacnet explorer 用作服务&#xff0c;用于发现设备&#xff0c;界面如下&#xff1a; 3、通过wireshark 抓包如下&#xff1a; &#xff08;1&#xff09;、整体包如下&#xff1a; &#xff08;2&#xff09;、m…...

android 根据公历日期准确节气计算年月日时天干地支 四柱八字

1 年柱 判断当前日期是否超过本年的立春 未超过年份-1 已超过按当前年份计算 2月柱 当前日期是否超过当月的第一个节气 未超过-1 超过当前月份计算 节气对日柱时柱没影响。 获取某年某月第一个节气的准确日期 private int sTerm(int y, int n) {int[] sTermInfo…...

VMware虚拟机连接公网,和WindTerm

一、项目名称 vmware虚拟机连接公网和windterm 二、项目背景 需求1&#xff1a;windows物理机&#xff0c;安装了vmware虚拟机&#xff0c;需要访问公网资源&#xff0c;比如云服务商的yum仓库&#xff0c;国内镜像加速站的容器镜像&#xff0c;http/https资源。 需求2&#xf…...

游戏盾SDK真的能无视攻击吗

游戏盾SDK真的能无视攻击吗&#xff1f;在当今的互联网环境中&#xff0c;游戏行业蓬勃发展&#xff0c;但同时也面临着日益严峻的安全挑战。DDoS攻击、CC攻击、外挂作弊等恶意行为频发&#xff0c;不仅威胁着游戏的稳定性和公平性&#xff0c;也严重影响了玩家的游戏体验。为了…...

【QT】亲测有效:“生成的目标文件包含了过多的段,超出了编译器或链接器允许的最大数量”错误的解决方案

在使用dlib开发人脸对齐功能时&#xff0c;出现了”生成的目标文件包含了过多的段&#xff0c;超出了编译器或链接器允许的最大数量的错误“。 主要功能代码如下&#xff1a; #include <QApplication> #include <QImage> #include <QDebug>#include <dlib…...

什么是 Apache Ingress

Apache Ingress 主要用于管理来自外部的 HTTP 和 HTTPS 流量&#xff0c;并将其路由到合适的 Kubernetes 服务。 容器化与 Kubernetes 是现代云原生应用程序的基础。Kubernetes 的主要职责是管理容器集群&#xff0c;确保它们的高可用性和可扩展性&#xff0c;同时还提供自动化…...

SpringBoot助力墙绘艺术市场创新

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…...

Antlr的使用

概念 ANTLR&#xff08;ANother Tool for Language Recognition&#xff09;是一个强大的解析器生成工具&#xff0c;用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR通过定义文法&#xff08;grammar&#xff09;来识别、构建和访问语言中的元素。 ANTLR为包括Jav…...

HealChat心理大语言模型 丨OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…...

php网站开发示例/市场推广和销售的区别

非阻塞Connect对于select时应注意问题 http://www.cnitblog.com/zouzheng/archive/2010/11/25/71711.html 对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接&#xff0c;首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建soc…...

wordpress广告从哪获取/网络营销方式与工具有哪些

https://blog.csdn.net/hanchao5272/article/details/79435730 git log 退出方法&#xff1a; 英文状态下按Q...

java 框架用来做网站/最新军事头条

项目中原始数据都是DWG格式&#xff0c;里面只有两个层&#xff0c;一个0层&#xff0c;一个TX层&#xff0c;0层存储了图廓信息&#xff0c;所有其他要素信息全部存在TX层中&#xff0c;包括房屋&#xff0c;植被&#xff0c;道路&#xff0c;水系&#xff0c;独立地物等等。没…...

使用flash做网站/世界比分榜

7转载于:https://www.cnblogs.com/wuguangzong/p/10925016.html...

龙岩做网站开发价格/挖掘关键词工具

最近在学习在windows平台用flask框架提供Restful API服务&#xff0c;需要使得flask的windows应用能够开机自动运行&#xff0c;并且后台运行&#xff0c;所以通过service来实现。 首先尝试的是在自己派生的serivice类的中直接调用 create_app(debugTrue).run(host0.0.0.0, po…...

欧莱雅的网络营销策划方案/合肥seo代理商

7:30&#xff1a;起床。英国威斯敏斯特大学的研究人员发现&#xff0c;那些在早上5:22―7:21 分起床的人&#xff0c;其血液中有一种能引起心脏病的物质含量较高&#xff0c;因此&#xff0c;在7:21之后起床对身体健康更加有益。  打开台灯。“一醒来&#xff0c;就将灯打开&…...