通过指定股票代码可以下载相应股票的数据,并在EXCEL文件中生成指定周期的二叉树
# -*- coding: utf-8 -*-
"""
Spyder Editor
作者:袁江磊
"""
import pandas as pd
import numpy as np
import os
import tushare as ts
os.makedirs('实验一实证数据下的二叉树模型分析/')
os.chdir('实验一实证数据下的二叉树模型分析/')
#1.获得股票数据
ts_code='002514'#指定股票代码
data_5=ts.get_hist_data(ts_code,ktype='5')#获得五分钟数据
data_30=ts.get_hist_data(ts_code,ktype='30')#获得半小时数据
data_day=ts.get_hist_data(ts_code)#获得一天数据
data_week=ts.get_hist_data(ts_code,ktype='W')#获得一周数据
#2.二叉树预测
def Netscape(data__,t):
"""
将输入的股价数据进行二叉树预测,并输出股价基本信息,基本统计信息,二叉树预测信息
data__为输入股价数据;t为向后预测期数,默认为5;
data_info为基本统计信息,netscape为二叉树预测信息
data_,data_info,netscape=netscape(data__=data_5,t=5)
作者:袁江磊
"""
data_=pd.DataFrame(data__[['close']])#获得其中的收盘价
data_.sort_index(inplace=True)#按照日期做升序处理
data_['ratio']=[0.0000000000000000000]*len(data_)
#生成比率ratio
for i in range(len(data_)-1):
try:
data_['ratio'][i+1]=round(data_['close'][i+1]/data_['close'][i],20)
except:
continue###
mean=data_['ratio'].mean()-1#样本均值U
std=data_['ratio'].std()#标准误差
u=mean+1+std#上升幅度u
d=mean+1-std#下降幅度d
S_0=data_.ix[-1,0]#初始股价
"基本统计信息"
data_info=pd.DataFrame([['样本均值U','样本误差std','上升幅度u','下降幅度d','预测初始股价'],[mean,std,u,d,S_0]]).T
#生成二叉树值
price_s_all=[[S_0]]
for j in range(t):
price_s = []
S_=price_s_all[j]
for i in range(len(S_)):
price_s.append(S_[i]*u)
price_s.append(S_[-1]*d)
price_s_all.append(price_s)
"""将[[7],[1,2],[2,5,3],[2,3,4,3]]列表用空白补至等长"""
def add_space(list_0):
"""将[[7],[1,2],[2,5,3],[2,3,4,3]]列表用空白补至等长
add_space(list_0=[[7],[1,2],[2,5,3],[2,3,4,3]])
"""
max = len(list_0[-1])
list_ = []
for i in range(len(list_0)):
list_.append([' '] * (2 * max - 1))
list_[0][int((len(list_[0]) - 1) / 2)] = list_0[0][0]
h = 1
for index in range(1, len(list_0)):
k = 0
for i in list_0[index]:
list_[index][int((len(list_[0]) - 1) / 2) - h + k] = i
k += 2
h += 1
return list_
"所有二叉树预测信息"
price_s_all=add_space(price_s_all)
#修改列标题
netscape=pd.DataFrame(np.array(price_s_all)).T
for i in range(len(netscape.columns)):
netscape.rename(columns={netscape.columns[i]:str(i)+'期预测值'},inplace=True)
data_['date'] = data_.index
return data_,data_info,netscape
#3.将所有信息保存为excel表格
def to_excel(name,data_):
data_,data_info,netscape=Netscape(data__=data_,t=15)
data_.to_excel(excel_writer=writer,sheet_name=name,index=False)
data_info.to_excel(excel_writer=writer,sheet_name=name,index=False,startcol=5)
netscape.to_excel(excel_writer=writer,sheet_name=name,index=False,startcol=8)
writer=pd.ExcelWriter('股票'+ts_code+'二叉树预测.xlsx')
to_excel(name='5分钟股价二叉树',data_=data_5)
to_excel(name='30分钟股价二叉树',data_=data_30)
to_excel(name='一天股价二叉树',data_=data_day)
to_excel(name='一周股价二叉树',data_=data_week)
writer.close()