标签:
1.数据处理模块
- 保存为 sh.py,保存位置 …\Lib\site-packages,这样以后调用直接 import sh.py 即可
# -*- coding: utf-8 -*- # sh.py class sh: # 本地数据库连接信息初始化,用 pyodbc 连接只需三个信息 def __init__(self, user=‘sa‘, password=‘123456‘, dsn=‘XiTongDSN‘): self.user = user self.password = password self.dsn = dsn import sqlalchemy # 建立数据库连接引擎,存取数据库需用到 self.engine = sqlalchemy.create_engine(‘mssql+pyodbc://‘+self.user+‘:‘+self.password+‘@‘+self.dsn) # 从 tushare.org 下载上证指数 sh 数据 def get_url(self): import tushare import pandas dataframe = tushare.get_hist_data(‘sh‘) # 由于 dataframe 存入 SQL Server 时 index 会报错,那就灵活处理下 # 把 index 复制成列 date 插到最后一列 index = list(dataframe[‘open‘].index) dataframe[‘date‘] = pandas.Series(index, index) pandas.DataFrame(dataframe, index) # 我只需列(开盘,最高,收盘,最低,成交量,日期),其他列统统删掉好了 dataframe.drop([‘price_change‘, ‘p_change‘, ‘ma5‘, ‘ma10‘, ‘ma20‘, ‘v_ma5‘, ‘v_ma10‘, ‘v_ma20‘], axis=1, inplace=True) # 将处理完的 dataframe 存入到本地数据库 dataframe.to_sql(‘sh‘, self.engine, if_exists=‘replace‘, index=False) # 调用本地数据库上证指数数据 sh def get_sql(self): import pandas connection = self.engine.connect() data = pandas.read_sql_table(‘sh‘, connection) # 做处理时,由于 date 不连续且无什么意义,直接用计数当 date 用好了 index = list(data[‘open‘].index) o = data[‘open‘] h = data[‘high‘] c = data[‘close‘] l = data[‘low‘] volume = data[‘volume‘] return index, o, h, c, l, volume
- 调用 sh.py
# -*- coding: utf-8 -*- # 清屏 import os clearscreen = os.system(‘cls‘) # 调用 sh.py 模块 import sh # 获取 sh 数据,先模块实例化 SH = sh.sh() ‘‘‘ # 下载数据到本地数据库 SH.get_url() ‘‘‘ # 调取数据库表 sh 数据 index, o, h, c, l, volume = SH.get_sql()
2.图形绘制模块
# -*- coding: utf-8 -*- # 清屏 import os clearscreen = os.system(‘cls‘) # 调用模块 import sh # 获取 sh 数据,先模块实例化 SH = sh.sh() ‘‘‘ # 下载数据到本地数据库 SH.get_url() ‘‘‘ # 调取数据库表 sh 数据 index, o, h, c, l, volume = SH.get_sql() # 这是暴力的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 载入绘图模块 import matplotlib.pyplot as plot from matplotlib.finance import candlestick_ochl # 根据需要按列合并成一个 quotes = [] for i in range(0, len(index)): quotes.append((index[i], o[i], c[i], h[i], l[i], volume[i])) # 获取图表实例 figure = plot.figure(‘Made by DengChaohai‘) # 上图 subplot1 = figure.add_subplot(211, title=‘Index of Shanghai‘, xlabel=‘index of date‘, ylabel=‘index of Shanghai‘, xlim=[min(index), max(index)]) plot.grid(True, axis=‘both‘) # K 线图 candlestick_ochl(subplot1, quotes, colorup=‘r‘, colordown=‘g‘) # 成交量 bar 图,为了好看点,进行了缩放处理 b11 = subplot1.bar(left=index, height=[i*100/min(volume) for i in volume], bottom=0, width=1, color=‘c‘, edgecolor=‘c‘) # 下图 subplot2 = figure.add_subplot(212, title=‘Singal of Buy or Sell‘, xlabel=‘index of date‘, ylabel=‘index of Shanghai‘, xlim=[min(index), max(index)]) plot.grid(True, axis=‘both‘) # open 线图 subplot2.plot(o, ‘g‘) # 自定义加权价 weighting price wp = [] for i in range(0, len(index)): wp.append(o[i]*2/7+c[i]*3/7+h[i]/7+l[i]/7) # weighting price 线图 subplot2.plot(wp, ‘r‘) # 差价 bar 图,为好看同意进行了缩放 subplot2.bar(left=index, height=[(o[i]-wp[i])*10 for i in range(0, len(index))], bottom=0, width=1, color=‘c‘, edgecolor=‘c‘)
标签:
原文地址:http://www.cnblogs.com/blog-3123958139/p/5523585.html