import xlrd
from scipy.optimize import leastsq
from scipy.stats import ttest_rel
import xlwt
from sklearn.metrics import r2_score
import numpy as np
import statsmodels.api as sm
def data_reader():
path="C:/Users/Administrator/Desktop/mn/择时选股2.xlsx"
work=xlrd.open_workbook(path)
sheet1=work.sheet_by_name("Sheet1")
sheet2=work.sheet_by_name("SMBHML")
person_id=[]
person_name=[]
time=[]
rpt=[]
rft=[]
rmt=[]
time_s=[]
rpt_s = []
rft_s = []
rmt_s = []
id_1 = sheet1.cell_value(1, 0)
person_id.append(id_1)
person_name.append(sheet1.cell_value(1,1))
#print(sheet1.cell_value(1,12)[0:6])
time_s.append(sheet1.cell_value(1,12)[0:6])
rpt_s.append(sheet1.cell_value(1,3))
rft_s.append(sheet1.cell_value(1, 4))
rmt_s.append(sheet1.cell_value(1, 5))
for i in range(sheet1.nrows-2):
if id_1==sheet1.cell_value(2+i,0):
time_s.append(sheet1.cell_value(2+i, 12)[0:6])
rpt_s.append(sheet1.cell_value(2+i, 3))
rft_s.append(sheet1.cell_value(2+i, 4))
rmt_s.append(sheet1.cell_value(2+i, 5))
else:
time.append(time_s)
rpt.append(rpt_s)
rft.append(rft_s)
rmt.append(rmt_s)
id_1=sheet1.cell_value(2+i,0)
person_id.append(id_1)
person_name.append(sheet1.cell_value(2+i,1))
time_s=[]
rpt_s = []
rft_s = []
rmt_s = []
time_s.append(sheet1.cell_value(2+i, 12)[0:6])
rpt_s.append(sheet1.cell_value(2+i, 3))
rft_s.append(sheet1.cell_value(2+i, 4))
rmt_s.append(sheet1.cell_value(2+i, 5))
time.append(time_s)
rpt.append(rpt_s)
rft.append(rft_s)
rmt.append(rmt_s)
#print(len(time),len(rpt),len(person_name),len(person_id))
#print(time[0],rpt[0],rft[0],rmt[0])
time2=[]
smb=[]
hml=[]
for i in range(sheet2.nrows-1):
time2.append(str(int(sheet2.cell_value(i+1,0))))
smb.append(sheet2.cell_value(i+1,1))
hml.append(sheet2.cell_value(i+1,2))
#print(time2,smb,hml)
return time,rpt,rft,rmt,time2,smb,hml,person_id,person_name
time,rpt,rft,rmt,time2,smb,hml,person_id,person_name=data_reader()
def tm_model(rpt_s,rft_s,rmt_s):
rpt_s=np.asfarray(rpt_s)
rft_s=np.asfarray(rft_s)
rmt_s=np.asfarray(rmt_s)
sig=0
nsmaple=len(rpt_s)
model=np.column_stack((np.ones(nsmaple),(rmt_s-rft_s),(rmt_s-rft_s)**2))
#beta=[0,0,0]
y=rpt_s-rft_s+sig*np.random.normal(size=nsmaple)
res=sm.OLS(y,model).fit()
#print(res.summary())
#print(res.params,res.rsquared,res.tvalues,res.pvalues)
alpha,beta1,beta2=res.params
r2=res.rsquared
t1,t2,t3=res.tv