018 | backtrader回测反转策略
什么是反转策略?
反转策略(Reversal Strategy)是一种试图捕捉市场价格趋势逆转的交易策略。与趋势跟随策略不同,反转策略的核心理念是“物极必反”,即价格在经过一段时间的单边趋势后,往往会出现逆转的机会。交易者通过识别这些即将到来的反转点,在市场趋势反转时进行买卖操作,从而获取利润。
反转策略的理论基础
-
超买与超卖:
- 反转策略假设,当资产价格过度上涨或下跌时,市场往往会进入超买或超卖状态。在超买状态下,价格通常会向下反转;在超卖状态下,价格则可能向上反转。
-
均值回归理论:
- 均值回归理论支持反转策略的一个重要假设,即价格在偏离其长期均值后,最终会回归到这一均值。因此,当价格过度偏离均值时,交易者可以预期价格将反转回归。
-
市场情绪与行为金融学:
- 反转策略还基于行为金融学的理论,即市场参与者的情绪和心理往往会导致价格的过度波动。情绪的极端化会推动价格超越其合理水平,随后市场理性会恢复,价格发生反转。
反转策略的关键要素
-
识别反转信号:
- 反转策略的核心在于准确识别价格的反转点。常用的反转信号包括:
- 技术指标:如RSI(相对强弱指数),当RSI进入超买(70以上)或超卖(30以下)区域时,预示着价格可能会反转。
- 反转形态:如双顶、双底、头肩顶、头肩底等形态,往往预示着价格趋势的逆转。
- 支撑位和阻力位:价格在接近重要支撑或阻力位时可能会反转。
- 反转策略的核心在于准确识别价格的反转点。常用的反转信号包括:
-
入场策略:
- 在确认反转信号后,交易者在价格反转方向上进行操作。例如,当价格从超卖区反弹时,买入资产;当价格从超买区回落时,卖出资产或做空。
-
风险管理:
- 反转策略涉及较高风险,因此风险管理至关重要。常用的风险管理手段包括设置止损位,以防止价格未如预期反转而继续朝不利方向发展。
-
退出策略:
- 在价格成功反转并达到预期目标后,交易者需要及时退出持仓。退出策略可以基于价格达到新的支撑或阻力位,或技术指标显示价格即将进入超买或超卖状态。
反转策略的实现
以下是一个基于 backtrader 的反转策略示例代码,该策略使用 RSI 指标来识别超买和超卖的情况,从而进行交易决策。
import backtrader as btclass ReversalStrategy(bt.Strategy):params = (('rsi_period', 14), ('rsi_overbought', 70), ('rsi_oversold', 30))def __init__(self):self.rsi = bt.indicators.RSI(self.data.close, period=self.params.rsi_period)def next(self):if not self.position:if self.rsi < self.params.rsi_oversold: # 超卖,买入信号self.buy()elif self.rsi > self.params.rsi_overbought: # 超买,卖出信号self.sell()else:if self.position.size > 0 and self.rsi > 50: # 多头且RSI回升至中性区间,卖出self.sell()elif self.position.size < 0 and self.rsi < 50: # 空头且RSI跌至中性区间,买入平仓self.buy()# 创建回测引擎
cerebro = bt.Cerebro()# 将数据添加到回测引擎
data = bt.feeds.PandasData(dataname=index_data)
cerebro.adddata(data)# 添加策略
cerebro.addstrategy(ReversalStrategy)# 设置初始资金
cerebro.broker.setcash(100000.0)# 启动回测
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())# 绘制结果
cerebro.plot()

图表各部分的解读:
-
价格走势(主图):
- 主图展示了标的资产的价格走势,其中有绿色三角形(买入信号)和红色倒三角形(卖出信号)。这些信号是根据RSI指标生成的,当价格达到超买或超卖状态时,策略进行买卖操作。
-
成交量(Volume):
- 图表底部的柱状图展示了成交量的变化情况,显示出市场的交易活跃度,特别是在买卖信号触发时,可以观察到成交量的变化。
-
资金与资产价值变化(上方部分):
- 图表上方部分显示了策略回测期间账户资金和总资产价值的变化。红色线条代表账户中的现金,蓝色线条代表总资产价值(包括持仓资产)。
- 从起始资金100,000元开始,最终资金为99,982.52元,表明策略在整个回测期间略有亏损。
-
交易盈亏点(Trades - Net Profit/Loss):
- 图表中间部分用红色和蓝色圆点表示了每次交易的盈亏情况。蓝色圆点表示盈利交易,红色圆点表示亏损交易。
- 图中可以看到,交易信号频繁,但盈亏点分布较为平均,最终策略略有亏损。
-
RSI指标(底部):
- 图表底部展示了RSI(相对强弱指数)指标的变化,RSI是用于识别超买和超卖状态的重要指标。
- 当RSI低于30时(超卖),策略生成买入信号;当RSI高于70时(超买),策略生成卖出信号。
- 起始资金:100,000元
- 最终资金:99,982.52元
- 策略表现:回测结果显示,这个基于RSI的反转策略在这段时间内略微亏损,资金减少了17.48元。尽管策略捕捉到了一些反转机会并进行了频繁交易,但整体效果并不显著,可能是由于市场的整体波动性不足或反转信号不够强烈。
这张图表提供了一个反转策略的实际应用示例,展示了该策略在识别和利用价格反转机会时的表现,并对资金产生了轻微的负面影响。这说明在实际交易中,反转策略的效果很大程度上取决于市场环境以及反转信号的可靠性。
代码详解:
- RSI 指标:RSI 是相对强弱指数,用于衡量资产价格的超买和超卖状态。通常,当 RSI 超过70时,认为市场超买;当 RSI 低于30时,认为市场超卖。
- 买入信号:当 RSI 低于30,进入超卖区,策略生成买入信号,预期价格将反转上涨。
- 卖出信号:当 RSI 高于70,进入超买区,策略生成卖出信号,预期价格将反转下跌。
- 退出信号:当持仓时,如果 RSI 回到中性区间(50附近),则考虑平仓。
优点和缺点
优点:
- 高回报潜力:如果能够成功捕捉到市场的反转点,反转策略可以在趋势初期进入并获得较大的利润。
- 较短的持仓时间:反转策略通常在市场达到极端点时进场,较短时间内即可平仓获利。
缺点:
- 难以准确预测:市场反转点往往难以精确预测,存在较大的不确定性,容易出现假反转信号。
- 适应性差:反转策略在强趋势市场中表现不佳,频繁反转的操作可能导致多次亏损。
- 高风险:由于反转点难以预测,反转策略往往需要承担较高的市场风险。
反转策略的应用场景
-
股票市场:
- 在股票市场中,反转策略可以用于捕捉个股或市场指数的短期调整或反转,特别是在价格波动剧烈的市场中更为有效。
-
外汇市场:
- 外汇市场的波动性和流动性较强,反转策略可以用来捕捉短期的反转机会,但需要结合其他指标来确认信号的有效性。
-
商品期货市场:
- 在商品期货市场中,价格的反转往往与供需关系或外部因素的变化有关,反转策略可以帮助交易者在价格极端时入场或出场。
总结
反转策略是一种试图捕捉市场价格转折点的交易策略,通过在市场超买或超卖状态下进行反向操作,交易者可以在市场反转时获取利润。然而,由于反转点的预测难度较大,该策略具有较高的风险和不确定性。因此,在应用反转策略时,交易者需要结合其他技术分析工具和严格的风险管理措施,以提高交易成功的概率并减少潜在的损失。
相关文章:
018 | backtrader回测反转策略
什么是反转策略? 反转策略(Reversal Strategy)是一种试图捕捉市场价格趋势逆转的交易策略。与趋势跟随策略不同,反转策略的核心理念是“物极必反”,即价格在经过一段时间的单边趋势后,往往会出现逆转的机会…...
《图解HTTP》全篇目录
前言 目前,国内讲解 HTTP 协议的书实在太少了。在我的印象中,讲解网络协议的书仅有两本。一本是《HTTP 权威指南》,但其厚度令人望而生畏;另一本是《TCP/IP 详解,卷 1》,内容艰涩难懂,学习难度…...
基于VS2019(Release_x64)+Qt的软件开发—环境配置
前置博客: 基于C高级编程语言的软件开发随记——环境变量-CSDN博客 (一)一种避免设置大量环境变量的VS2019环境配置方法 Ⅰ 解决方案资源管理器->VC目录->在包含目录/库目录中添加对应的include/lib文件夹($(So…...
【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识
【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识 1. 使用VScode进行SSH远程连接服务器2. 端口映射及实例参考文献 这一博客主要介绍使用VScode进行服务器远程连接及端口映射。 1. 使用VScode进行SSH远程连接服务器 安装V…...
240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank
A. 最终效果 B. 可通过鼠标点击打开文件,但会跳转到about:blank import gradio as gr import subprocessdef open_pptx():pptx_path /Users/liuguokai/Downloads/240528-工业大模型1.pptxtry:subprocess.Popen([open, pptx_path])return "PPTX file opened s…...
go在linux上安装
1.首先要确定Linux架构 uname -m如果你的系统是 armv7l(32-bit ARM),你需要下载 armv6l 版的Go语言。 如果你的系统是 aarch64(64-bit ARM),你需要下载 arm64 版的Go语言。 如果你的系统是 x86_64…...
算法日记day 35(动归之分割等和子集|最后一块石头的重量2)
一、分割等和子集 题目: 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分…...
FPGA使用sv生成虚拟单音数据
FPGA使用sv生成虚拟单音数据 之前一直使用matlab生成虚拟的数据,导出到txt或是coe文件中,再导入到fpga中进行仿真测试。 复杂的数据这样操作自然是必要的,但是平日使用正弦数据进行测试的话,这样的操作不免复杂,今日…...
Linux shell编程:监控进程CPU使用率并使用 perf 抓取高CPU进程信息
0. 概要 本文将介绍一个用于监控一组进程CPU使用率的Shell脚本,,当检测到某进程的CPU使用率超出阈值时,使用 perf 工具抓取该进程的详细信息。 本shell脚本为了能在普通嵌入式系统上运行做了妥协和优化。 1. shell脚本流程的简要图示&#…...
Linux网络编程的套接字分析(其一,基本知识)
文章目录 套接字的类型流套接字数据报套接字原始套接字 套接字地址获取套接字地址 协议族和地址族 套接字的类型 Linux系统的套接字有三类:流套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAM)。 流套接字 用于面向连接…...
后端Web开发之Maven
1.java项目构建工具maven介绍 Maven是apache旗下的一个开源项目。Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源(源代码开放)软件基金会也是一一个专门为支持开源项目而生的非盈利性组织。 apache开源项目…...
前端创新实践:用JavaScript打造网页扫码新体验
引言 简述扫码技术在现代网页应用中的普及和重要性。引入JavaScript实现网页扫码功能的创新性和实用性。 扫码技术概述 介绍扫码技术的原理和在不同平台(如微信、支付宝)的应用。讨论扫码技术对用户体验和业务流程的影响。 JavaScript实现网页扫码的…...
AWS CLI命令行
参考文档:在 macOS 上安裝,更新和卸載 AWS CLI 版本 1 - AWS Command Line Interface...
领导力培养的底层逻辑
领导力就是从人们从他们现在的地方,到他们从未去过的地方的能力--基辛格 ## 1. 领导力的一些观点 ## 2. 五种习惯十大承诺 ## 3. 需要领导的场景 ## 4.0 组织中谁需要领导力 ## 5.0 领导力培养 领导力培养的底层逻辑可以简单描述为以下几个方面: 管理…...
【MATLAB第107期】基于MATLAB的Morris局部敏感性分析模型(无目标函数)
【MATLAB第107期】基于MATLAB的Morris局部敏感性分析模型(无目标函数) 更正: 局部敏感性分析方法 一、原理介绍 1.基本原理: Morris方法采用概率均匀抽样的方式估计每个模型输入因子在输出结果中的重要性,通过比较系…...
Tomcat搭建JSPServlet
一、Tomcat环境搭建 1. 将项目变为Web项目 选中项目,点击Help中的Find Action 搜索Add Framework Support 勾选Web Application 出现这些文件就是成功了 2. 配置Tomcat 点击Edit Configurations 点击加号,选择Tomcat Server Local Deployment栏下点击…...
32位定点数和32/64位浮点数的二进制生成方法
问题由来 定点数和浮点数在嵌入式软件处理和FPGA算法方面使用比较普遍,但是遇到FPGA实现32位定点数的处理,想要仿真时,突然发现全网都在讲浮点数和定点数的格式和理论,几乎没有生成的快捷方法,好在一片文章出现了一点…...
STM32利用arm-dsp库进行FIR低通滤波【详细】
arm-dsp库官方已经封装好了,使用的时候需要把dsp库移植到工程里面,具体怎么移植网上可以找到教程 这里直接说怎么用FIR的流程: 一、Matlab里面生成所配置的阶数和系数 1、在Matlab命令窗口输入fdatool,回车,会弹出一个新窗口 2…...
Efficient-KAN 源码详解
Efficient-KAN源码链接 Efficient-KAN (GitHub) 改进细节 1.内存效率提升 KAN网络的原始实现的性能问题主要在于它需要扩展所有中间变量以执行不同的激活函数。对于具有in_features个输入和out_features个输出的层,原始实现需要将输入扩展为shape为(batch_size, out_featur…...
Jlink commander使用方法(附指令大全)
Jlinkcmd它可以方便用户在非仿真的情况下,hold内核、单步、全速、设置断点、查看内核和外设寄存器、读取flash代码等等,方便大家拥有最高的权限查看在运行中的MCU情况,查找非IDE仿真情况下,MCU运行异常的原因。 目录 驱动安装 …...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
