一、参数设置
select_num = 3
commission = 0.0003
stamp_tax = 0.00
period = 'd'
start_date = '2018-01-01'
end_date ='2023-03-15'
二、因子测试结果
1.amount_volatility 成交量波动因子
def amount_volatility(df, window=20):
"""
交易波动因子——成交量波动
成交量波动,即过去一段时间成交量标准差的相反数,同样的,波
动率最小组为因子值最大
组,波动率最大组为因子值最小组,这个因子代表着做多市场情绪稳定
的行业
Factor=-STD(Volume,window)
@param df:
@param window:
@return:
"""
df.sort_values(['股票代码', '交易日期'], ascending=
[True, True], inplace=True) # 根据symbol,open_time排序
for symbol, group_df in df.groupby('股票代码'):
_ = group_df['成交量'].rolling(window).std()
_.fillna(method='bfill', inplace=True)
df.loc[_.index, 'amount_volatility'] = -_
回测结果:
策略评价指标:
累计净值 1.18
年化收益率 0.03
回测开始时间 2018-01-02 00:00:00
回测结束时间 2023-03-15 00:00:00
最大回撤 -0.364
最大回撤开始时间 2018-04-17 00:00:00
最大回撤结束时间 2018-06-15 00:00:00
年化收益/回撤比 0.09
盈利次数 526.0
亏损次数 553.0
买入胜率 0.42
盈亏比 1.48
夏普比率 0.01
回测收益图

2.total_money_volatility 成交金额波动因子
def total_money_volatility(df, window=20):
"""
交易波动因子——成交金额波动
用过去一段时间的成交金额标准差来衡量行业交易情况的稳定程
度,并取相反数,波动
率最小组为因子值最大组,波动率最大组为因子值最小组。
@param df: Factor=-STD(Amount,window)
@param window:
@return:
"""
df.sort_values(['股票代码', '交易日期'], ascending=
[True, True], inplace=True) # 根据symbol,open_time排序
for symbol, group_df in df.groupby('股票代码'):
_ = group_df['成交额'].rolling(window).std()
_.fillna(method='bfill', inplace=True)
df.loc[_.index, 'total_money_volatility'] = -_
策略评价指标:
累计净值 1.45
年化收益率 0.07
回测开始时间 2018-01-02 00:00:00
回测结束时间 2023-03-15 00:00:00
最大回撤 -0.364
最大回撤开始时间 2018-04-17 00:00:00
最大回撤结束时间 2018-06-15 00:00:00
年化收益/回撤比 0.2
盈利次数 526.0
亏损次数 555.0
买入胜率 0.42
盈亏比 1.56
夏普比率 0.02

3.MOM: 动量因子
def momentum(df, window1=20):
"""
@param df:
@param window1:
@return:
"""
df.sort_values(['股票代码', '交易日期'], ascending=
[True, True], inplace=True)
for symbol, group_df in df.groupby('股票代码'):
_ = ta.MOM(group_df['收盘价_复权'],
timeperiod=window1)
_.fillna(method='bfill', inplace=True)
df.loc[_.index, 'momentum'] = _
策略评价指标:
累计净值 0.36
年化收益率 -0.18
回测开始时间 2018-01-02 00:00:00
回测结束时间 2023-03-15 00:00:00
最大回撤 -0.779
最大回撤开始时间 2018-04-17 00:00:00
最大回撤结束时间 2022-11-18 00:00:00
年化收益/回撤比 -0.23
盈利次数 466.0
亏损次数 606.0
买入胜率 0.37
盈亏比 1.51
夏普比率 -0.05

4.价格因子 (正股价格/正股前N日价格均值 )
def price_factor(df, N=30):
df.sort_values(['股票代码', '交易日期'], ascending=
[True, True], inplace=True)
for symbol, group_df in df.groupby('股票代码'):
_ = group_df['正股收盘价'] / group_df['正股收盘
价'].rolling(N).mean()
_.fillna(method='bfill', inplace=True)
df.loc[_.index, 'price_factor'] = _
策略评价指标:
累计净值 0.74
年化收益率 -0.06
回测开始时间 2018-01-02 00:00:00
回测结束时间 2023-03-15 00:00:00
最大回撤 -0.597
最大回撤开始时间 2021-09-01 00:00:00
最大回撤结束时间 2023-03-03 00:00:00
年化收益/回撤比 -0.09
盈利次数 508.0
亏损次数 573.0
买入胜率 0.4
盈亏比 1.48
夏普比率 -0.01

5.收益率因子(正股 N 日收益率)
def return_factor(df, N=30):
df.sort_values(['股票代码', '交易日期'], ascending=
[True, True], inplace=True)
for symbol, group_df in df.groupby('股票代码'):
_ = group_df['正股收盘价'].pct_change().fillna(0)
_ = _.rolling(N).sum()
_.fillna(method='bfill', inplace=True)
df.loc[_.index, 'return_factor'] = _
策略评价指标:
累计净值 0.42
年化收益率 -0.15
回测开始时间 2018-01-02 00:00:00
回测结束时间 2023-03-15 00:00:00
最大回撤
本主题为课程学员专享,成为股票量化投资课程学员后可免费阅读
成为学员