利用Carver价格突破策略,捕捉市场交易机会

引言

在金融市场中,价格的突破往往伴随着强烈的趋势,是投资者捕捉机会的关键点。突破策略因此成为一种广受欢迎的趋势跟随策略,用于在价格超出特定区间时入场或出场,以此捕捉潜在的盈利机会。

本文将介绍 Carver 突破指标策略,并通过 Python 和 Backtrader 量化框架来实现回测。Carver 突破策略的核心在于识别价格突破的边界条件,判断价格是否超出波动区间。本文将详细解释策略逻辑、实现代码,并进行交易回测,最后对回测结果进行分析。

 本文使用qstock获取数据、可视化和量化回测,关于 qstock 更详细的使用方法,  请参考 qstock 专题系列文章(点击跳转)。加入Python金融量化知识星球,可以获取qstock最新版及教程、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2咨询可获取8.5折优惠。:

【qstock开源了】数据篇之行情交易数据

【qstock数据篇】行业概念板块与资金流

【qstock量化】数据篇之股票基本面数据

【qstock量化】数据篇之宏观指标和财经新闻文本

【qstock量化】动态交互数据可视化

【qstock量化】技术形态与概念热点选股池

【手把手教你】使用qstock实现量化策略选股

【手把手教你】使用qstock进行量化回测

  基于qstock的量化复盘与自动盯盘

qstock 玩转问财:一行代码实现条件选股

实战解析:如何利用backtrader进行突破交易策略的量化回测

Carver突破策略的核心逻辑

Carver 突破指标通过以下步骤实现对突破点的识别:

  • 计算滚动最高价和最低价:在特定周期内计算最高和最低价格区间。 

  • 计算滚动均值:使用最高价和最低价的均值作为参考,便于观察价格在区间中的相对位置。 

  • 计算缩放后的价格:将当前价格相对于区间上下限进行缩放,得出当前价格在区间内的位置。

  • 生成买入或卖出信号:当价格接近上限或下限时,认为可能发生突破,从而生成交易信号。

策略实现代码

1. 计算滚动最高、最低价及缩放价格 首先,我们使用 Python 代码计算滚动最高、最低价格及缩放后的价格,生成初步的策略信号。

import pandas as pd
import numpy as np
import qstock as qs
df=qs.get_data('cybETF',start='20110101',end='20241108')
window = 20
# 计算20天滚动最高价和最低价
df['Rolling_Max'] = df['close'].rolling(window=window).max()
df['Rolling_Min'] = df['close'].rolling(window=window).min()
# 计算滚动均值
df['Rolling_Mean'] = (df['Rolling_Max'] + df['Rolling_Min']) / 2

# 计算缩放后的价格
df['Scaled_Price'] = (df['close'] - df['Rolling_Min']) / (df['Rolling_Max'] - df['Rolling_Min'])

# 设定买入和卖出阈值
buy_threshold = 0.9
sell_threshold = 0.1

# 生成信号
df['Signal'] = np.where(df['Scaled_Price'] > buy_threshold, 'Buy', 
                        np.where(df['Scaled_Price'] < sell_threshold, 'Sell', 'Hold'))
qs.line(df[['close','Rolling_Max','Rolling_Min','Rolling_Mean']][-250:])

7f9244ec27b401bf5d4c53d826d77650.jpeg

2. 使用 Backtrader 进行量化回测

为了更真实地模拟交易情况,我们将使用 Backtrader 量化框架来实现该策略,以下是完整的代码实现。

import backtrader as bt
from datetime import datetime
class CarverBreakoutStrategy(bt.Strategy):
    params = (
        ('period', 20),  # 设置滚动窗口的时间周期
        ('buy_threshold', 0.9),  # 买入阈值
        ('sell_threshold', 0.1),  # 卖出阈值
    )

    def __init__(self):
        # 定义指标:滚动最大、最小值和均值
        self.highest = bt.ind.Highest(self.data.close, period=self.params.period)
        self.lowest = bt.ind.Lowest(self.data.close, period=self.params.period)
        self.scaled_price = (self.data.close - self.lowest) / (self.highest - self.lowest)
    def next(self):
        # 获取当前的持仓
        position_size = self.position.size
        # 检查买入条件
        if self.scaled_price[0] > self.params.buy_threshold:
            # 满仓买入 100 的整数倍股数
            if position_size == 0:  # 当前无仓位
                size = int(self.broker.getcash() / self.data.close[0] / 100) * 100
                if size > 0:
                    self.buy(size=size)
        
        # 检查卖出条件
        elif self.scaled_price[0] < self.params.sell_threshold:
            # 卖出所有持仓
            if position_size > 0:
                self.close()
qs.bt_result('晓程科技',start='2014-01-01',end='2024-11-08',strategy=CarverBreakoutStrategy)

323551612f64aa2fda696231d3fe45eb.jpeg

88304ef8825b80897163260dcc807034.jpeg

7bfb251332eec882f23cc776e70aace8.jpeg

00f7364335ade46c3394b1b3b1ffb851.jpeg

下面是同一标的相同回测期间使用买入持有的回测结果:

df0=qs.data_feed('晓程科技',index='cyb',start='2014-01-01',end='2024-11-09')
qs.start_backtest(df0)

ea293990fa9b2a48527c47d56fa36e88.jpeg9733dad9dc723de613076fc8abeb7d14.jpeg

从回测结果看,Carver 突破策略与买入持有策略相比,年化收益率显著提升(16.8% 对比 5.2%),且累计收益达到 407.5%,远超买入持有的 70.5%,表现出强劲的收益能力。然而,Carver 突破策略的波动率较高(42.8%),最大回撤为 -55.6%,尽管低于买入持有的 -83.68%,但风险依然较大。夏普比率为 0.57,低于买入持有的 1.04,显示出在风险调整后收益的优势较弱。Calmar 比率为 0.30,表明策略在面临较大波动的同时仍具备一定的回报能力。整体来看,Carver 突破策略适合追求高回报的投资者,但需承受较高的波动和回撤。

结语

Carver 突破策略利用了滚动价格区间的突破效应,是一种简单但有效的趋势跟随型策略。在市场趋势明显时,该策略能帮助投资者抓住上涨或下跌动量,获得超额收益。本文通过 Backtrader 框架将该策略落地,并对策略进行了详尽回测分析。然而需要注意的是,该策略的效果可能受限于特定市场环境,在市场趋势明显时该策略能有效发挥作用,但在震荡市场中策略效果可能不佳。

在实际应用中,可结合不同的指标或进行参数优化来提高策略的稳健性。希望本文的介绍能帮助您深入理解和实现突破策略,并在量化交易实践中获得更优效果。

4102cb9335aaf2560696fbfdcc41f0c5.png

关于Python金融量化

543b2458c36b95d86c4166e8d6285488.png

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

2589311b958736d9b025bf5afddd6e67.jpeg

# 简介 qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析开源库,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(backtest)四个模块。其中数据模块(data)数据来源于东方财富网、同花顺、新浪财经等网上公开数据。qstock致力于为用户提供更加简洁和规整化的金融市场数据接口,其中可视化模块为用户提供基于web的交互图形简单操作接口;选股模块提供了同花顺的技术选股和公众号策略选股,包括RPS、MM趋势、财务指标、资金流模型等,回测模块为大家提供向量化(基于pandas)和基于事件驱动的基本框架和模型。 读者直接在cmd或anaconda prompt上输入“pip install qstock ”进行安装,或输入“pip install -upgrade qstock”进行更新。 qstock是免费开源金融量化库,已在pypi官网和GitHub上发布,更新至1.3.5版本,添加了问财的数据访问功能,通过qstock.wencai('选股条件')调用。使用“pip install qstock ”进行安装,通过’pip install –upgrade qstock’进行更新。目前部分策略选股和策略回测功能仅供知识星球会员使用,会员可在知识星球置顶帖子上获取 qstock 的离线安装包。 关于 qstock 更详细的使用方法,请参考微信公众号Python金融量化 qstock 专题系列文章: 【qstock开源了】数据篇之行情交易数据 【qstock数据篇】行业概念板块与资金流 【qstock量化】数据篇之股票基本面数据 【qstock量化】数据篇之宏观指标和财经新闻文本 【qstock量化】动态交互数据可视化 【qstock量化】技术形态与概念热点选股池 【手把手教你】使用qstock实现量化策略选股 【手把手教你】使用qstock进行量化回测 基于qstock的量化复盘与自动盯盘 下面为大家介绍qstock各模块的具体调用方式和应用举例。 ```python #导入qstock模块 import qstock as qs ``` # 数据模块 # 行情交易数据接口 ## 实时行情数据 获取指定市场所有标的或单个或多个证券最新行情指标 realtime_data(market='沪深A', code=None): - market表示行情名称或列表,默认'沪深A股', '沪深京A':沪深京A股市场行情; '沪深A':沪深A股市场行情;'沪A':沪市A股市场行情 '深A':深市A股市场行情;北A :北证A股市场行情;'可转债':沪深可转债市场行情; '期货':期货市场行情;'创业板':创业板市场行情;'美股':美股市场行情; '港股':港股市场行情;'中概股':中国概念股市场行情;'新股':沪深新股市场行情; '科创板':科创板市场行情;'沪股通' 沪股通市场行情;'深股通':深股通市场行情; '行业板块':行业板块市场行情;'概念板块':概念板块市场行情; '沪深指数':沪深系列指数市场行情;'上证指数':上证系列指数市场行情 '深证指数':深证系列指数市场行情;'ETF' ETF基金市场行情;'LOF' LOF 基金市场行情 - code:输入单个或多个证券的list,不输入参数,默认返回某市场实时指标 如code='中国平安',或code='000001',或code=['中国平安','晓程科技','东方财富'] ### 某市场所有标的最新行情 ```python #获取沪深A股最新行情指标 df=qs.realtime_data() #查看前几行 df.head() ``` ```python #获取期货最新行情指标 df=qs.realtime_data('期货') #查看前几行 df.head() ``` ```python #获 -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值