用于回报预测和交易的条件自动编码器
本节主要介绍自编码器在资产定价中的应用。
应用步骤分为:
第一步:创建包含股价和元数据信息的新数据集
第二步:计算预测资产特征
第三步:创建和训练条件式自动编码器架构
第四步:评估结果
part1
数据
from pathlib import Path
import numpy as np
import pandas as pd
from statsmodels.regression.rolling import RollingOLS
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
idx = pd.IndexSlice
sns.set_style('whitegrid')
results_path = Path('results', 'asset_pricing')
if not results_path.exists():
results_path.mkdir(parents=True)
价格数据
prices = pd.read_hdf(results_path / 'data.h5', 'stocks/prices/adjusted')
prices.info(show_counts=True)
out:
元数据
metadata = pd.read_hdf(results_path / 'data.h5', 'stocks/info').rename(columns=str.lower)
metadata.info()
out:
用元数据选股
sectors = (metadata.sector.value_counts() > 50).index
tickers_with_errors = ['FTAI', 'AIRT', 'CYBR', 'KTB']
tickers_with_metadata = metadata[metadata.sector.isin(sectors) &
metadata.marketcap.notnull() &
metadata.sharesoutstanding.notnull() &
(metadata.sharesoutstanding > 0)].index.drop(tickers_with_errors)
metadata = metadata.loc[tickers_with_metadata, ['sector', 'sharesoutstanding', 'marketcap']]
metadata.index.name = 'ticker'
prices = prices.loc[idx[tickers_with_metadata, :], :]
prices.info(null_counts=True)
metadata.info()
close = prices.close.unstack('ticker').sort_index()
close.info()
volume = prices.volume.unstack('ticker').sort_index()
volume.info()
创建周回报
returns = (prices.close
.unstack('ticker')
.resample('W-FRI').last()
.sort_index().pct_change().iloc[1:])
returns.info()
dates = returns.index
sns.distplot(returns.count(1), kde=False);
with pd.HDFStore(results_path / 'autoencoder.h5') as store:
store.put('close', close)
store.put('volume', volume)
store.put('returns', returns)
store.put('metadata', metadata)
因子
MONTH = 21
价格趋势
短期
(一个月累计回报)
dates[:5]
mom1m = close.pct_change(periods=MONTH).resample(