Hugo2046 发布于2020-10-28
回复 214
浏览 23026
463
本文参考:
+ 华泰证券《指数增强方法汇总及实例——量化多因子指数增强策略实证》
+ 天风证券《基于自适应风险控制的指数增强策略》
配合分析的回测模块比较简单可以直接粘贴这里的代码节约积分,也可以到我的github中[下载](https://github.com/hugo2046/Quantitative-analysis/tree/master/多因子指数增强)
其中特质波动率的构造见[【复现】东吴证券-特质波动率因子](https://www.joinquant.com/view/community/detail/6e4ddf0a1cf3bb17367b463cefe3b5e4)
```
'''
Author: Hugo
Date: 2020-06-10 20:52:43
LastEditTime: 2020-11-02 10:08:02
LastEditors: Please set LastEditors
Description: 读取指数增强研究文档生成的result_df文件进行下单
'''
from jqdata import *
import pandas as pd
import numpy as np
from six import BytesIO # 文件读取
enable_profile() # 开启性能分析
def initialize(context):
set_params()
set_variables()
set_backtest()
run_monthly(Trade, -1, time='open', reference_security='000300.XSHG')
def set_params():
g.result_df = pd.read_csv(
BytesIO(read_file('result_df.csv')), index_col=[0],)
def set_variables():
pass
def set_backtest():
set_option("avoid_future_data", True) # 避免数据
set_option("use_real_price", True) # 真实价格交易
set_benchmark('000300.XSHG') # 设置基准
#log.set_level("order", "debuge")
log.set_level('order', 'error')
# 每日盘前运行
def before_trading_start(context):
# 手续费设置
# 将滑点设置为0
set_slippage(FixedSlippage(0))
# 根据不同的时间段设置手续费
dt = context.current_dt
if dt > datetime.datetime(2013, 1, 1):
set_commission(PerTrade(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
elif dt > datetime.datetime(2011, 1, 1):
set_commission(PerTrade(buy_cost=0.001, sell_cost=0.002, min_cost=5))
elif dt > datetime.datetime(2009, 1, 1):
set_commission(PerTrade(buy_cost=0.002, sell_cost=0.003, min_cost=5))
else:
set_commission(PerTrade(buy_cost=0.003, sell_cost=0.004, min_cost=5))
def Trade(context):
bar_time = context.current_dt.strftime('%Y-%m-%d')
log.info('%s启动' % bar_time)
if bar_time in g.result_df.index:
print('存在')
target_slice = g.result_df.loc[bar_time]
BuyStock(context, target_slice)
def BuyStock(context, target_slice: pd.DataFrame):
order_dict = target_slice.set_index('code')['w'].to_dict()
for hold in context.portfolio.long_positions:
if hold not in order_dict:
order_target(hold, 0)
totalasset = context.portfolio.total_value
for buy_stock, pre in order_dict.items():
order_target_value(buy_stock, pre * totalasset)
```
评论
写得非常好,点赞。我不是泼冷水,我只是谈谈自己的观点,这个方向已经在券商的量化界持续了很多年,但是,我怀疑根本上错了。如果这个方向是对的,AI比我们厉害多了,但是,AI一样解决不了样本外推的有效性问题。
因子化投资可能要回到本源,回到FF3、FF5,立足解释市场,不玩花里胡巧,很有可能FF5已经足够,当然立足于中国特色,我们factor5跟Fama的有所不同,这是合理的。
2020-10-28
@Gyro 您好 同意您的观点 《Size and value in China》提出了中国版的FF3模型即CH-3模型能比FF3更好的解释A股 另Q-factor也是一个很好的一种思路 后续也会陆续试试 复现那几篇论文 谢谢交流
2020-10-28
@zhulondon 有的 东西多 准备拆成几次来发
2020-10-29
很喜欢H大神写的研究文章
把分析思路都写很清楚
2020-10-29
感谢分享, 请问文中用到的回测代码可以分享一下吗
2020-10-31
@Clark.W 方便给个邮箱嘛 我发你
2020-10-31
@Hugo2046 wqj97@126.com 十分感谢!
2020-10-31
@Hugo2046 聚宽也可以分享回测的
2020-10-31
非常感谢分享, 可否提供回测代码?谢谢。
2020-11-01
@Clark.W 已经添加了
2020-11-02
@warzone 已经添加了回测
2020-11-02
@简繁 这位朋友 你不看主帖的吗...
2020-11-02
@qmzp1056 具体是做什么?写策略吗?
2020-11-04