python获取股票数据,从csv,从postgresql数据库,从tushare

# -*- 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)

猜你喜欢

转载自blog.csdn.net/luansj/article/details/108222436