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运行异常的原因。 目录 驱动安装 …...

Java SpringBoot实现PDF转图片
不是单页图片,是多页PDF转成一张图片的逻辑。 我这里的场景是PDF转成图片之后返回给前端,前端再在图片上实现签字,并且可拖拽的逻辑,就是签订合同的场景。 但是这里只写后端多页PDF转图片的逻辑。 先说逻辑,后面直接…...

elasticsearch SQL:在Elasticsearch中启用和使用SQL功能
❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx号 : 「liwu0213」 ☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 :…...

Java 并发编程:线程变量 ThreadLocal
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 029 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...

【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】018 - init_sequence_f 各函数源码分析(二)
【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】018 - init_sequence_f 各函数源码分析(二) 一、arch_cpu_init二、arch_cpu_init系列文章汇总:《【OpenHarmony4.1 之 U-Boot 源码深度解析】000 - 文章链接汇总》 本文链接:《【OpenHarmony4.1 之 U-Boot 2024.07源码深度…...

LVS原理——详细介绍
目录 介绍 lvs简介 LVS作用 LVS 的优势与不足 LVS概念与相关术语 LVS的3种工作模式 LVS调度算法 LVS-dr模式 LVS-tun模式 ipvsadm工具使用 实验 nat模式集群部署 实验环境 webserver1配置 webserver2配置 lvs配置 dr模式集群部署 实验环境 router 效果呈现…...

MYSQL 5.7.36 等保 建设记录
文章目录 前言一、开启审计日志1.1 查看当前状态1.2 开启方式1.3 查看开启后状态 二、密码有效期2.1 查看当前状态2.2 开启方式2.3 查看开启后状态 三、密码复杂度3.1 查看当前状态3.2 开启方式3.3 查看开启后状态 四、连接控制4.1 查看当前状态4.2 开启方式4.3 查看开启后状态…...

fatal: unable to access ‘https://github.com/xxxxx
ubuntu中git克隆项目异常 git clone https://github.com/xxx Cloning into ‘xxx’… fatal: unable to access ‘https://github.com/xxx/xx.git/’: Could not resolve host: github.com 解决办法使用命令: git config --global http.proxy git config --global…...

从零开始的CPP(38)——递归与动态规划
leetcode46 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入&#…...

从战略到系统架构:信息系统设计的全面解析
在当今数字化时代,信息系统已成为企业运营、管理和创新的核心驱动力。信息系统设计的重要性不仅关乎企业的技术实现,更直接影响到企业的战略执行和市场竞争能力。本文将从战略视角出发,深入探讨信息系统设计的全过程,包括从战略制…...

GEE调用中国(China Land Cover Dataset,简称CLCD)1990-2022年30米分辨率的土地分类数据
博客推荐 GEE土地分类:中国30米年度土地覆盖产品annual China Land Cover Dataset, CLCD(面积提取)_30米土地利用数据gee-CSDN博客 简介 中国陆地覆盖数据集(China Land Cover Dataset,简称CLCD)是一个用…...