利用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值