```markdown
量化交易中,波动率指标是衡量市场价格波动程度的关键工具。常用的波动率指标可以帮助交易者识别市场的不确定性,并为决策提供支持。以下是常见量化波动指标的源码一览表。
平均真实波幅(ATR)是衡量市场波动性的重要工具,它计算一段时间内的价格波动范围。常见的计算方式是使用过去N天的真实波幅(True Range)的移动平均。
```python import pandas as pd import numpy as np
def ATR(df, period=14): df['H-L'] = df['High'] - df['Low'] df['H-PC'] = abs(df['High'] - df['Close'].shift(1)) df['L-PC'] = abs(df['Low'] - df['Close'].shift(1))
df['TR'] = df[['H-L', 'H-PC', 'L-PC']].max(axis=1)
df['ATR'] = df['TR'].rolling(window=period).mean()
return df['ATR']
```
VIX指数是一种衡量市场预期波动性的工具。它通常用于评估市场恐慌和不确定性,基于S&P 500期权的隐含波动率计算。
```python import yfinance as yf
def get_VIX(): vix_data = yf.download('^VIX', start='2000-01-01', end='2025-01-01') return vix_data['Close'] ```
标准差是一种常见的统计学工具,用于衡量数据点围绕均值的分布程度。在金融中,标准差可用于衡量资产价格的波动性。
python
def standard_deviation(df, period=14):
return df['Close'].rolling(window=period).std()
方向性指数(DX)是通过计算ADX和正负方向性指标(+DI和-DI)来衡量市场的趋势强度。ADX值越高,表明市场趋势越强。
```python def DX(df, period=14): df['+DM'] = df['High'].diff() df['-DM'] = -df['Low'].diff() df['+DM'] = np.where(df['+DM'] > df['-DM'], df['+DM'], 0) df['-DM'] = np.where(df['-DM'] > df['+DM'], df['-DM'], 0)
df['TR'] = df[['High', 'Low', 'Close']].apply(lambda x: max(x['High'] - x['Low'], abs(x['High'] - x['Close'].shift(1)), abs(x['Low'] - x['Close'].shift(1))), axis=1)
df['+DI'] = 100 * (df['+DM'].rolling(window=period).sum() / df['TR'].rolling(window=period).sum())
df['-DI'] = 100 * (df['-DM'].rolling(window=period).sum() / df['TR'].rolling(window=period).sum())
df['DX'] = 100 * abs(df['+DI'] - df['-DI']) / (df['+DI'] + df['-DI'])
return df['DX']
```
波动率突破策略通过计算某个时间窗口内的平均波动率,再结合一个突破阈值,帮助交易者在价格突破某一水平时做出交易决策。
python
def volatility_breakout(df, period=20, multiplier=2):
df['Volatility'] = df['Close'].rolling(window=period).std()
df['Upper_Breakout'] = df['Close'].shift(1) + multiplier * df['Volatility']
df['Lower_Breakout'] = df['Close'].shift(1) - multiplier * df['Volatility']
return df[['Upper_Breakout', 'Lower_Breakout']]
成交量加权波动率(VWAP)将成交量纳入考虑,通过计算每个价格点的成交量权重,提供更精准的波动性度量。
python
def VWAP(df):
df['Cumulative_Volume'] = df['Volume'].cumsum()
df['Cumulative_VWAP'] = (df['Close'] * df['Volume']).cumsum()
df['VWAP'] = df['Cumulative_VWAP'] / df['Cumulative_Volume']
return df['VWAP']
布林带通过计算价格的标准差来评估市场的波动性,通常用于识别过度买入或过度卖出的条件。布林带包括三个部分:上轨、下轨和中轨(通常为20日均线)。
```python def bollinger_bands(df, period=20, multiplier=2): df['SMA'] = df['Close'].rolling(window=period).mean() df['STD'] = df['Close'].rolling(window=period).std()
df['Upper_Band'] = df['SMA'] + (multiplier * df['STD'])
df['Lower_Band'] = df['SMA'] - (multiplier * df['STD'])
return df[['Upper_Band', 'Lower_Band', 'SMA']]
```
波动率是量化交易中重要的市场指标,能够为投资者提供市场不确定性的重要线索。通过这些量化波动指标,交易者可以更好地理解市场的波动性并做出相应的交易决策。上述代码示例展示了如何使用Python来实现不同的波动性指标,供大家参考与实践。 ```