@Channelchan
2017-07-08T15:56:18.000000Z
字数 1395
阅读 32340
WorldQuant根据数据挖掘的方法发掘了101个alpha,据说里面80%的因子仍然还行之有效并运行在他们的投资策略中。Alpha101给出的公式,也就是计算机代码101年真实的定量交易Alpha。他们的平均持有期大约范围0.6-6.4天。平均两两这些Alpha的相关性较低,为15.9%。回报是与波动强相关,但对换手率没有明显的依赖性,直接确认较早的间接经验分析结果。我们从经验上进一步发现换手率对alpha相关性的解释能力很差。
将因子选股结果存成Excel。
import alphalens
factor = DataFrame.stack()
factor_data = alphalens.utils.get_clean_factor_and_forward_returns(factor, prices, quantiles=5)
cond = factor_data['factor_quantile'] == 5
Q5 = factor_data[cond]
stocks = pd.Series(True, index=Q5.index)
stocks = stocks.unstack()
stocks[stocks != True] = False
print(stocks)
stocks.to_excel('alpha.xlsx')
将选股Excel表格导入引擎回测
def init(context):
codes = pd.read_excel('alpha.xlsx')
codes.index = codes.pop('date')
context.codes = codes
scheduler.run_weekly(find_pool, tradingday=1)
def find_pool(context, bar_dict):
codes = context.codes.loc[context.now]
stocks = codes.index[codes == True]
context.stocks = stocks
def handle_bar(context, bar_dict):
pool = context.stocks
if pool is not None:
stocks_len = len(pool)
for stocks in context.portfolio.positions:
if stocks not in pool:
order_target_percent(stocks, 0)
result = []
for codes in pool:
if codes not in result and codes not in context.portfolio.positions:
result.append(codes)
if len(result):
for r in result:
order_target_percent(r, 1.0/stocks_len)