CTA量化策略的波动率因子面面观

波动率,简单的说就是一种经济形态,解决的是实体如何波动,波动的结构到底是如何进行等实质类问题。和桌子上摆放的苹果,是通过色、香、味、状来表达自己的存在一样,波动率的概念是对波动这样一种实体进行表达,它的存在实际上到了最后,是一种自然率。

波动率的定义与周期

在金融定义里,波动率定义为资产价格的变化,通常用于度量市场的风险程度。在实际应用中,波动率可由过去价格收益率变化的标准差或者期权合约中的隐含波动率表示。当波动率的上升,市场面临更大的不确定性,从而影响市场价格走势与策略的收益情况。

商品指数的历史波动率的上升,通常由于商品价格的上涨或者下跌所造成,所以根据行为金融学的相关定义,可以把波动率的周期分为由价格上涨带来波动率增加的正波动率周期和由价格下跌带来的波动率增加的负波动率周期,如下图所示:

图1: 波动率周期循环

数据来源:Kathryn M.Kaminski, Aplha K Capital 华泰期货研究所

由Kathryn M.Kaminski(2011)研究发现,不同的价格趋势涨跌带来的波动率上升会加剧市场的不确定性,投资者的行为会难以预测。如果市场风险暴露,突发事件威胁市场价格,投资者会形成羊群及挤兑效应,市场波动率快速拉升并随高波动率进入市场不确定性状态,投资者产生焦虑、恐慌,对价格的波动敏感度提高。当焦虑、恐慌慢慢消失,市场波动率及投资者风险承受能力才回归正常。

当突发事件带来正向的价格波动时,投资者行为会带来过度自信感,通常把这种行为定义为赢家效应,最终会导致市场价格快速升高,类似于资产泡沫时期。但随后过高波动率往往带来快速的反转,使投资者蒙受损失,且如果这种反转足够强烈,隐藏风险暴露于市场,使投资者感觉价格的威胁,会使市场打破正波动周期,直接跳转至负波动率周期。

CTA 策略的波动率使用

商品期货市场的波动率策略主要分为纯波动率策略和整体波动率策略,纯波动率策略即在横截面做多波动率高的品种、做空低波动率的品种(或者做空高波动率的品种、做多低波动率的品种)的对冲组合策略;而整体波动率策略参考图2、3 类似期权买入和卖出跨式组合策略,做多整体市场波动率或做空整体市场波动率。

图 2: 买入跨式组合盈亏图

 

拓展阅读:

1.一个量化策略师的自白(好文强烈推荐)

2.市面上经典的量化交易策略都在这里了!(源码)

3.量化交易领域最重要的10本参考书推荐!

4.期货/股票数据大全查询(历史/实时/Tick/财务等)

5.如何设计量化交易策略?

6.量化交易干货汇总,很干!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我们可以基于Python编写一个商品期货因子截面CTA策略,具体步骤如下: 1. 数据获取:从数据源获取商品期货相关的历史价格数据和市场因子数据,例如商品价格、市场波动、收益等。 2. 数据预处理:对获取的数据进行预处理,包括数据清洗、缺失值处理、标准化等。可以使用Pandas和NumPy库来进行数据预处理。 3. 因子选择:根据市场情况和策略要求,选择与商品期货相关的因子,并对因子进行筛选和排序。 4. 模型构建:根据选择的因子,构建横截面CTA模型,例如使用线性回归模型或支持向量机模型。 5. 模型评估:对构建的模型进行评估,包括回归分析、误差分析、风险控制等。 6. 策略实现:根据模型的预测结果,制定交易策略,例如在预测价格上涨时买入商品期货,预测价格下降时卖出或做空。 7. 回测和优化:对策略进行回测,评估策略的收益和风险,并进行优化,例如调整因子权重、改变交易规则等。 Python中可以使用Pandas、NumPy、Scikit-learn等库来实现上述步骤,具体实现代码如下: ```python import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression from sklearn.svm import SVR # 数据获取 price_data = pd.read_csv('price_data.csv') factor_data = pd.read_csv('factor_data.csv') # 数据预处理 price_data.dropna(inplace=True) factor_data.dropna(inplace=True) price_data['ret'] = price_data['price'].pct_change() factor_data = (factor_data - factor_data.mean()) / factor_data.std() # 因子选择 selected_factors = ['volatility', 'momentum', 'liquidity'] factor_data = factor_data[selected_factors] # 模型构建 X = factor_data.values y = price_data['ret'].values model = LinearRegression() # model = SVR(kernel='linear') model.fit(X, y) # 模型评估 y_pred = model.predict(X) residuals = y - y_pred rmse = np.sqrt(np.mean(residuals**2)) print('RMSE:', rmse) # 策略实现 price_data['pred'] = model.predict(factor_data.values) price_data['signal'] = np.where(price_data['pred'] > 0, 1, -1) price_data['position'] = price_data['signal'].shift(1) price_data['position'].fillna(0, inplace=True) price_data['pnl'] = price_data['position'] * price_data['ret'] total_pnl = price_data['pnl'].sum() print('Total P&L:', total_pnl) # 回测和优化 price_data['cum_pnl'] = price_data['pnl'].cumsum() price_data['strategy_ret'] = price_data['position'] * price_data['ret'] price_data['cum_strategy_ret'] = price_data['strategy_ret'].cumsum() price_data.plot(y=['cum_pnl', 'cum_strategy_ret']) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值