根据股票历史数据生成二叉树_20200508_

通过指定股票代码可以下载相应股票的数据,并在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()













猜你喜欢

转载自blog.csdn.net/weixin_45590329/article/details/106082258
今日推荐