# -*- coding: utf-8 -*-
import tushare as ts
import matplotlib.pyplot as plt
import time
import psycopg2
import os
from sqlalchemy import create_engine
from io import StringIO
import mpl_finance
from matplotlib.pylab import date2num
import pandas as pd
import datetime
# % matplotlib inline
ip = "127.0.0.1"
pwd = "12345678"
db = "finance"
user = "postgres"
port = "5432"
def get_stock():
# 设置历史数据区间
date1 = (2014, 12, 1) # 起始日期,格式:(年,月,日)元组
date2 = (2016, 12, 1) # 结束日期,格式:(年,月,日)元组
ts.set_token('8194e7012b78acccca78de7e6c5597056ec15fba0202edcd9a352ff1')
# print(tushare.__version__)
# 获取pro_api
pro = ts.pro_api()
# 获取数据,以公司名单为例
# df = pro.stock_basic()
# df= pro.get_tick_data('002415',date='2017-05-02')
# data = pro.get_h_data('002415',start='2017-05-02', end='2018-05-02')
# ktype:string数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
data = pro.get_k_data('002415', start='2017-05-02', end='2018-05-02',ktype='D')
data1 = pd.DataFrame(data)
output = StringIO()
data1.to_csv(output, sep='\t', index=False, header=False)
# quotes = ts.get_tick_data('601558.ss', '2016-05-02')
print(str(data1));
def get_data(file_name):
da=pd.read_csv(filepath_or_buffer=file_name,sep='\t')
datas=pd.DataFrame(da)
# print(datas)
return datas
def plot(quotes):
# 创建一个子图
fig, ax = plt.subplots(facecolor=(0.5, 0.5, 0.5))
fig.subplots_adjust(bottom=0.2)
# 设置X轴刻度为日期时间
ax.xaxis_date()
# X轴刻度文字倾斜45度
plt.xticks(rotation=45)
plt.title("代码:601558")
plt.xlabel("时间")
plt.ylabel("价(元)")
# mpf.candlestick_ohlc(ax, quotes, width=1.2, colorup='r', colordown='green')
plt.grid(True)
def fake_data():
# df1 = DataFrame(np.random.rand(40).reshape(8, 5), columns=['A', 'B', 'C', 'D', 'E'])
# df1 = DataFrame(np.random.randint(low=0,high=100,size=[10,12]), columns=['code','data', 'open', 'high', 'close', 'low','volume','amount','turnoverratio','A','B','C'])
# df1.to_csv(path_or_buf='data.csv')
df1=pd.read_csv(filepath_or_buffer='data.csv',sep='\t')
# print(df1['code'][0])
return df1
def plot2():
# matlabplot画图
# plt.plot_date(df1['data'],df1['open'],'b-',label='open')
# plt.plot_date(df1['data'], df1['low'], 'r--', label='low')
# plt.gcf().autofmt_xdate()
# plt.show()
# pandos画图
# df1['low'].plot(kind='bar',color='green')
# df1['open'].plot(kind='bar')
df2 = pd.DataFrame(df1, columns=['low', 'open'])
df2.plot()
plt.show()
def df_test():
da=pd.read_csv(filepath_or_buffer='data.csv',sep='\t')
print(da)
datas=pd.DataFrame(da)
# 第2行第2列
ds =datas.ix[[1]].values[0][1]
ds = datas.loc[1, 'open']
# 名为“open"的列
ds = datas["open"]
# 选取open列大于4的
ds = datas[datas["open"]>4]
# 2-4行,"date","open"列
ds = datas.loc[1:3,["date","open"]]
# 第2行
ds = datas.ix[[1]]
ds = datas[1:2]
# list转为str
# (",".join(str(i) for i in params)
print(ds)
def plot_k():
datas=get_data()
quotes=[]
for i in range(80):
if i == 0:
sdate = str(datas.loc[i, 'date']) # 注意:loc返回数值,iloc返回dataframe
sdate_change_format = sdate[0:4] + '-' + sdate[4:6] + '-' + sdate[6:]
sdate_num = date2num(datetime.datetime.strptime(sdate, '%Y-%m-%d')) # 日期需要特定形式,这里进行转换
sdate_plt = sdate_num
else:
sdate_plt = sdate_num + i
sopen = datas.loc[i, 'open']
shigh = datas.loc[i, 'high']
slow = datas.loc[i, 'low']
sclose = datas.loc[i, 'close']
data_row = (sdate_plt, sopen, sclose, shigh, slow)
quotes.append(data_row)
print(quotes)
fig, ax = plt.subplots(facecolor=(0, 0.3, 0.5), figsize=(12, 8))
fig.subplots_adjust(bottom=0.1)
ax.xaxis_date()
plt.xticks(rotation=45) # 日期显示的旋转角度
plt.title('600000')
plt.xlabel('time')
plt.ylabel('price')
mpf.candlestick_ohlc(ax, quotes, width=0.7, colorup='red', colordown='green') # 上涨为红色K线,下跌为绿色,K线宽度为0.7
plt.grid(True)
plt.show()
def plot_k2():
datas=get_data()
quotes=[]
for i in range(14):
sdate_plt = i+733920
sopen = datas.loc[i, 'open']
shigh = datas.loc[i, 'high']
slow = datas.loc[i, 'low']
sclose = datas.loc[i, 'close']
data_row = (sdate_plt, sopen, sclose, shigh, slow)
quotes.append(data_row)
print(quotes)
fig, ax = plt.subplots(figsize=(10, 5))
mpl_finance.candlestick_ochl(
ax=ax,
quotes=quotes,
width=0.7,
colorup='r',
colordown='g',
alpha=0.7)
ax.xaxis_date()
plt.xticks(rotation=30);
plt.show()
def deco(func):
def wrapper(*args,**kwargs):
startTime = time.time()
func(*args,**kwargs)
endTime = time.time()
ms=(endTime-startTime) * 1000
print("runtime is %d ms" %ms)
@deco
def dataTest():
da=pd.read_csv('data.csv')
datas=pd.DataFrame(da)
print(datas.loc[2, 'open'])
def operate_pg():
sql = '''insert into day_line(code,data) values ('601558','2017-05-02');
'''
pgUtil.executeInsert(ip, pwd, db, user, sql)
def insertMany(data):
sql = '''insert into day_line(date,open,close,high,low,volume,code) values (%s,%f,%f,%f,%f,%f,%s);
'''
datas = pd.DataFrame(data)
params=datas.loc[1].tolist()
paramList=[]
for i in range(datas.__len__()):
paramList.append((datas.loc[i, 'date'],float(datas.loc[i, 'open']),datas.loc[i, 'close'],datas.loc[i, 'high']
,datas.loc[i, 'low'],datas.loc[i, 'volume'],datas.loc[i, 'code']))
print(paramList)
pgUtil.executeMany(ip, pwd, db, sql,user, paramList)
if __name__=='__main__':
data=get_data('data/002236.csv')
# insert_pg(data)
# get_stock()
# df1 = fake_data()
# df_test()
# plot_k()
# plot_k2()
# dataTest()
# operate_pg()
insertMany(data)
python获取股票数据,从csv,从postgresql数据库,从tushare
猜你喜欢
转载自blog.csdn.net/luansj/article/details/108222436
今日推荐
周排行