代码详解
P.S:记录下第一个搞明白的模型哦!
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.graphics.api as smg
import patsy
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from scipy import stats
import seaborn as sns
import datetime, os, warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
start = datetime.datetime(2019,1,1)
end = datetime.datetime(2019,12,31)
from pandas_datareader.data import DataReader
def load_data():
if os.path.exists('000001.csv'):
data_ss = pd.read_csv('000001.csv')
data_tlz = pd.read_csv('300005.csv')
else:
data_ss = DataReader("000001.SS", "yahoo",start,end)
data_tlz = DataReader("300005.SZ", "yahoo",start,end)
data_ss.to_csv('000001.csv')
data_tlz.to_csv('300005.csv')
return data_ss, data_tlz
data_ss, data_tlz = load_data()
print(data_ss.head())
print(data_tlz.head())
close_ss = data_ss["Close"]
close_tlz = data_tlz["Close"]
print(close_ss.head())
print(close_tlz.head())
stock = pd.merge(data_ss, data_tlz, left_index = True, right_index = True)
stock = stock[["Close_x","Close_y"]]
stock.columns = ["上证综指","探路者"]
print(stock.head())
daily_return = (stock.diff()/stock.shift(periods = 1)).dropna()
print(daily_return.head())
print(daily_return[daily_return["探路者"] > 0.1])
fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(15,6))
daily_return["上证综指"].plot(ax=ax[0])
ax[0].set_title("上证综指")
daily_return["探路者"].plot(ax=ax[1])
ax[1].set_title("探路者")
plt.show()
fig,ax = plt.subplots(nrows=1,ncols=1,figsize=(12,6))
plt.scatter(daily_return["探路者"],daily_return["上证综指"])
plt.title("每日收益率散点图 from 探路者 & 上证综指")
plt.show()
import statsmodels.api as sm
daily_return["intercept"]=1.0
model = sm.OLS(daily_return["探路者"],daily_return[["上证综指","intercept"]])
results = model.fit()
print(results.summary())