股票价格预测

来源:互联网 发布:java 生成汉字验证码 编辑:程序博客网 时间:2024/04/23 22:22

      我曾经在图书馆里看到一本书,在那本书里作者提出了一种股票预测算法,即历史与未来中心对称于当下,我当时就花了一天时间写下了这个代码。

# -*- coding: utf-8 -*-"""Created on Fri Apr  7 16:41:01 2017@author: Administrator"""import matplotlib.pyplot as pltimport numpy as npimport numpyfrom matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY,YEARLYfrom matplotlib.finance import quotes_historical_yahoo_ohlc, candlestick_ohlcplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseticker = '600023' # 600028 是"中国石化"的股票代码ticker += '.ss'   # .ss 表示上证 .sz表示深证date1 = (2016, 6, 5) # 起始日期,格式:(年,月,日)元组date2 = (2017, 6,28)  # 结束日期,格式:(年,月,日)元组mondays = WeekdayLocator(MONDAY)            # 主要刻度alldays = DayLocator()                      # 次要刻度#weekFormatter = DateFormatter('%b %d')     # 如:Jan 12mondayFormatter = DateFormatter('%m-%d-%Y') # 如:2-29-2015dayFormatter = DateFormatter('%d')          # 如:12quotes = quotes_historical_yahoo_ohlc(ticker, date1, date2)#np_qu=[]#for x in range(len(quotes)):#    np_qu.append()mid=np.array(quotes)mm=np.ones((len(mid),6))av=(mid[len(mid)-1,1]+mid[len(mid)-1,2]+mid[len(mid)-1,3]+mid[len(mid)-1,4])*0.25for x in range(len(mid)):    mm[x,0]=2*mid[len(mid)-1,0]-mid[x,0]    mm[x,1]=2*av-mid[x,4]    mm[x,2]=2*av-mid[x,3]    mm[x,3]=2*av-mid[x,2]    mm[x,4]=2*av-mid[x,1]    mm[x,5]=2*mid[len(mid)-1,5]-mid[x,5]merge=np.concatenate((mid,mm))if len(merge) == 0:    raise SystemExitfig, ax = plt.subplots()fig.subplots_adjust(bottom=0.2)ax.xaxis.set_major_locator(mondays)ax.xaxis.set_minor_locator(alldays)ax.xaxis.set_major_formatter(mondayFormatter)#ax.xaxis.set_minor_formatter(dayFormatter)#plot_day_summary(ax, quotes, ticksize=3)candlestick_ohlc(ax, merge, width=0.6, colorup='r', colordown='g')ax.xaxis_date()ax.autoscale_view()plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')ax.grid(True)plt.title('浙能电力 600023')plt.show()

这里写图片描述

      后来,当我再次运行这个代码时出现了bug .可能是雅虎金融不再提供数据了。我用采用tushare 库导入数据重写了这段代码。在运行之前,请安装tushare.

"""Created on Sat Jul  1 15:57:50 2017罗干中国海诚"""import matplotlib.pyplot as pltimport numpy as np#import numpyfrom matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY,YEARLYfrom matplotlib.finance import quotes_historical_yahoo_ohlc, candlestick_ohlc#import matplotlibimport tushare as tsimport pandas as pdimport matplotlib.pyplot as pltfrom matplotlib.pylab import date2numimport datetimedf=ts.get_hist_data('000002',start='2017-04-25',end='2017-06-30')fig = plt.gcf()hist_data=df # 创建子图fig, ax = plt.subplots()fig.subplots_adjust(bottom=0.2)# 设置X轴刻度为日期时间ax.xaxis_date()plt.xticks(rotation=45)plt.yticks()plt.title("股票代码:000002")plt.xlabel("时间")plt.ylabel("股价(元)")#candlestick_ohlc(ax,data_list,width=1.5,colorup='r',colordown='g')plt.grid()hist_data=df .sort_index()# 对tushare获取到的数据转换成candlestick_ohlc()方法可读取的格式data_list = []for dates,row in hist_data.iterrows():    # 将时间转换为数字    date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')    t = date2num(date_time)    open,high,close,low = row[:4]    datas = (t,open,high,low,close)    data_list.append(datas)mondays = WeekdayLocator(MONDAY)            # 主要刻度alldays = DayLocator()                      # 次要刻度#weekFormatter = DateFormatter('%b %d')     # 如:Jan 12mondayFormatter = DateFormatter('%m-%d-%Y') # 如:2-29-2015dayFormatter = DateFormatter('%d')          # 如:12plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsecandlestick_ohlc(ax,data_list,width=1.5,colorup='r',colordown='g')  mid=np.array(data_list)mm=np.ones((len(mid),5))mm=np.ones((len(mid),5))av=(mid[len(mid)-1,1]+mid[len(mid)-1,2]+mid[len(mid)-1,3]+mid[len(mid)-1,4])*0.25for x in range(len(mid)):    mm[x,0]=2*mid[len(mid)-1,0]-mid[x,0]    mm[x,1]=2*av-mid[x,4]    mm[x,2]=2*av-mid[x,3]    mm[x,3]=2*av-mid[x,2]    mm[x,4]=2*av-mid[x,1]merge=np.concatenate((mm,mid))if len(merge) == 0:    raise SystemExitfig, ax = plt.subplots()fig.subplots_adjust(bottom=0.2)ax.xaxis.set_major_locator(mondays)ax.xaxis.set_minor_locator(alldays)ax.xaxis.set_major_formatter(mondayFormatter)#ax.xaxis.set_minor_formatter(dayFormatter)#plot_day_summary(ax, quotes, ticksize=3)candlestick_ohlc(ax, merge, width=0.6, colorup='r', colordown='g')ax.xaxis_date()ax.autoscale_view()plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')ax.grid(True)plt.title('000002')plt.show()    

这里写图片描述

这里写图片描述

      预测下万科吧,祝没有王石的万科好运!
代码下载