优矿-python计算上证50之间的相关系数

xiaoxiao2021-02-28  160

#线性回归策略 # Import libraries import numpy as np import pandas as pd from statsmodels import regression import statsmodels.api as sm import matplotlib.pyplot as plt import math #编写线性回归函数 def linreg(X, Y): # Running the linear regression X = sm.add_constant(X) model = regression.linear_model.OLS(Y, X).fit() a = model.params[0] b = model.params[1] X = X[:, 1] # Return summary of the regression and plot results X2 = np.linspace(X.min(), X.max(), 100) Y_hat = X2 * b + a plt.scatter(X, Y, alpha=0.3) # Plot the raw data plt.plot(X2, Y_hat, 'r', alpha=0.9); # Add the regression line, colored in red plt.xlabel('X Value') plt.ylabel('Y Value') return b def get_beita(benchmark,asset): #基于stock2=a+b*stock1 asset['ret_asset']=(asset['closePrice']-asset['closePrice'].shift(1))/asset['closePrice'] benchmark['ret_benchmark']=(benchmark['closePrice']-benchmark['closePrice'].shift(1))/benchmark['closePrice'] asset_ret=asset['ret_asset'][1:len(asset)] benchmark_ret=benchmark['ret_benchmark'][1:len(benchmark)] b=linreg(asset_ret.values, benchmark_ret.values) return b ######################################################################################################## start = '2017-05-04' # 回测起始时间 end = '2017-05-04' # 回测结束时间 universe =set_universe("SH50") # 证券池,支持股票和基金 capital_base = 100000 # 起始资金 freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测 refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟 max_history_window=600 def initialize(account): # 初始化虚拟账户状态 pass def handle_data(account): df=pd.DataFrame() for stock in account.universe: asset=pd.DataFrame(account.get_history(600)[stock]) value=[] for stock1 in account.universe: benchmark=pd.DataFrame(account.get_history(600)[stock1]) b=get_beita(benchmark,asset) value.append(b) df[stock]=pd.Series(value) df.index=account.universe print df
转载请注明原文地址: https://www.6miu.com/read-20309.html

最新回复(0)