用Python做一个Mean Rerversion策略

为什么连胜会终止?

为什么明星基金终归于平凡?

几乎所有事物都逃不过均值回归。股价也一样,无论高于还是低于均值,都将大概率回归到均值。

这就是Mean-Reversion均值回归策略的底层逻辑,当股价高于均值时,做空;低于均值时,做多,这是一个震荡市的策略

我们从一个最基本的均值回归模型入手:以SMA(简单移动平均线)作为交易信号。

SMA的计算方法是将某一段时间的收盘价之和除以该周期,可以看成均值。

那偏离均值多少开仓呢?我们再设定一个阈值,当价格偏离均值的程度大于这个阈值时,执行交易。

也就是说当股价高于SMA,并且高出的部分大于这个阈值,就做空股票;反之当股价低于SMA,低出的部分大于这个阈值,就做多股票。当价格回归到SMA附近1%的范围内,平仓。

第一步,导入要用到的库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf

第二步:策略的实现

def SMAMeanReversion(ticker, sma, threshold, shorts=False,
    start_date='2000-01-01', end_date='2020-12-31'):
    yfObj = yf.Ticker(ticker)
    data = yfObj.history(start=start_date, end=end_date)
    data['SMA'] = data['Close'].rolling(sma).mean()
    data['extension'] = (data['Close'] - data['SMA']) / data['SMA']
    
    data['position'] = np.nan
    data['position'] = np.where(data['extension']<-threshold,
        1, data['position'])
    if shorts:
        data['position'] = np.where(
            data['extension']>threshold, -1, data['position'])
        
    data['position'] = np.where(np.abs(data['extension'])<0.01,
        0, data['position'])
    data['position'] = data['position'].ffill().fillna(0)
    
    # Calculate returns and statistics
    data['returns'] = data['Close'] / data['Close'].shift(1)
    data['log_returns'] = np.log(data['returns'])
    data['strat_returns'] = data['position'].shift(1) * \
        data['returns']
    data['strat_log_returns'] = data['position'].shift(1) * \
        data['log_returns']
    data['cum_returns'] = np.exp(data['log_returns'].cumsum())
    data['strat_cum_returns']  =   
        np.exp(data['strat_log_returns'].cumsum())
    data['peak'] = data['cum_returns'].cummax()
    data['strat_peak'] = data['strat_cum_returns'].cummax()
    return data.dropna()

美国航空为标的,SMA周期设置为50天,阈值定为10%。回测的结果buy&hold和均值回归比较如下图:

可以看到,大部分时间均值回归策略的表现逊色于一直持有股票,涨的少,跌的都差不多。

原因之一是有些极端情况下,太强的趋势改变了均值回归的性质,震荡市已经切换到了单边行情,策略机械地执行越跌越买,最后成本被摊地很高。

为了降低这种风险,我们再在代码里加入一个保护变量,也就是一个上限阈值。

比方说阈值定为10%,上限阈值定为15%,当价格和SMA的偏离在10%和15%之间时,策略照常执行。但是一旦这个偏离高于了15%,就不再下单,从而降低了单边行情中越做越错的风险。

来瞅瞅加了保护变量后的策略表现:

加了保护变量后,不仅总收益率提高了,而且年化波动降低了,夏普比率也由此提高。

加入保护变量后,成功躲过2020年初的疫情大跌,而没加保护的策略会在下跌趋势中不断开多仓,导致很大的回撤:

总结:

这是一个以SMA简单移动平均线作为指标的均值回归策略,你也可以用其他的indicator作为均值指标,比如布林带、股票平均回报率、RSI等等。

策略也有一些小瑕疵,一是没有把股息和交易费用考虑进来,二是参数的选择(SMA=50,阈值设为10%)比较随意,没有优化过程。

虽然是一个最简单和基础的均值回归策略,但揭示了此类策略的最主要逻辑。其中的参数可以进一步优化,从而提升策略的表现。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 好的,这是一个关于如何用 Python一个量化交易策略的简单示例。 首先,需要准备好所需的数据。这可以通过使用量化交易软件或者第三方数据源来获取。接下来,你可以使用 Python 的 pandas 库来处理数据并进行分析。 然后,你需要定义你的交易策略。这可以根据市场情况,你的风险承受能力以及其他因素来决定。比如说,你可以使用技术分析工具来确定买入或卖出的时机,或者使用机器学习模型来预测市场走势。 最后,你可以使用 Python 的量化交易库(比如 pyalgotrade、zipline 等)来执行你的交易策略。这些库通常会提供许多实用的功能,比如自动化交易、模拟交易等。 希望这些信息能帮到你! ### 回答2: 量化交易是基于程序化交易的一种交易方法,使用统计学和数学模型来进行决策。Python是一种功能强大且易于学习的编程语言,非常适合编写量化交易策略。 编写一个量化交易策略的主要步骤包括: 1. 数据获取:使用Python的数据接口或API来获取金融市场的实时行情数据。可以使用Python的相关库,如pandas和numpy来进行数据分析和处理。 2. 策略开发:根据市场需求和自己的投资理念,采用相关的量化交易策略方法对数据进行分析和建模,确定交易信号。常用的策略包括均值回归、趋势跟随和市场中性等。 3. 回测测试:使用历史数据对策略进行回测,评估策略的盈利能力和风险水平。可以使用Python的回测框架,如zipline或backtrader来进行回测,计算策略的平均收益率、夏普比率和最大回撤等指标。 4. 实盘交易:在经过充分的回测测试后,可以将策略应用到实盘交易中。可以使用Python的交易API来进行实时交易操作。需要注意风险管理,设置止损和止盈等交易规则。 5. 策略优化:根据实际交易情况,及时调整和优化策略。可以根据交易数据和市场信息,采用机器学习人工智能的方法来优化策略。 使用Python编写量化交易策略具有很多优势: - Python语言简洁易读,易于理解和维护; - Python拥有丰富的第三方库和工具,如pandas、numpy和scikit-learn,用于数据处理和机器学习; - Python拥有成熟的量化交易框架和回测工具,如zipline和backtrader,方便快速开发和测试策略; - Python可以与金融市场的数据接口和交易API进行无缝对接; - Python具有广泛的社区支持和丰富的学习资源,便于解决问题和提高开发效率。 总之,使用Python编写量化交易策略可以提升交易效率和盈利能力,是目前金融市场中的一种重要趋势。 ### 回答3: 量化交易是通过使用计算机程序和数学模型来制定投资决策的一种交易策略Python是一种功能强大且易于学习的编程语言,广泛应用于量化交易领域。下面是一个使用Python编写的简单量化交易策略的示例: 首先,我们需要安装Python的相关库,如pandas用于数据处理,numpy用于数值计算,以及其他一些量化交易库如zipline或者backtrader。 接下来,我们需要获取相应的金融数据,可以从在线API获取或者通过下载历史数据。使用pandas库可以将数据加载到DataFrame对象中,并进行数据清洗和预处理。 然后,我们可以基于所选择的交易策略进行指标计算。例如,使用移动平均线策略,我们可以计算股票价格的短期和长期移动平均,并通过比较两者的关系来产生买入或卖出信号。 接下来,我们可以使用条件语句来执行交易决策。例如,如果短期移动平均线向上穿过长期移动平均线,则产生买入信号。我们可以使用Python的条件语句来执行交易操作,如购买股票或卖出现有持仓。 最后,我们可以使用Python的可视化库如matplotlib来绘制图表,以便对交易结果进行分析和可视化。 总之,使用Python编写量化交易策略可以通过结合数据处理、数值计算、条件语句和可视化等功能,帮助投资者自动化制定投资决策并对交易策略进行测试和优化。这只是一个简单的示例,实际的量化交易策略涉及更多复杂的算法和技术,需要深入的领域知识和开发经验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾艾puppy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值