tushare+mysql+携程,让选股更便捷。

首先要说的是mysql数据库安装的问题,还是相对比较麻烦的,对于没下载过的人,初次调用问题也比较复杂。但是安好调试好之后,我们每次读写  只需要1,2行代码就行,不用管会不会sql语句啥的。

engine = create_engine('mysql+pymysql://root:123456@localhost/stock_kd')
data.to_sql(name='stock选出20年数据', con=engine, if_exists='append', index=False)

这是读进数据库的语句。

data1=pd.read_sql(sql="SELECT * FROM stock.箱体突破",con=engine)    #读取

这是读出来的语句,最重点的还是你安装调试的问题。

说完这些,我们用tushare完成一个策略选股之后,肯定是希望把每只股票选出的数据存放到一起便于我们查看的。

同时,为了效率,我们可以使用异步携程函数,每次获取tushare的 时间和 对获取到的数据加工处理,这两个时间分开来,我一边只管一直调用tushare数据就行,你另一边一直对我获取到的数据计算就行,两不耽误。

通常最简单的一个写法就是,先对获取到的股票代码放入一个列表里面。

    data = pd.read_excel('E:/数据导出/股池.xlsx')
    data['代码'].astype('str')
    stock_list = []
    for i in data['代码']:
        if len(str(i)) == 3:
            i = str('000') + str(i)
        elif len(str(i)) == 4:
            i = str('00') + str(i)
        elif len(str(i)) == 2:
            i = str('0000') + str(i)
        elif len(str(i)) == 2:
            i = str('00000') + str(i)
        else:
            pass
        stock_list.append(i)

然后开始写我们调用的异步函数。

async def get_data(stock_list):
    task = []
    for cd in stock_list:
        task.append(choice_data(cd))
    await asyncio.wait(task)

这里会实现,将获取股票代码任务一直执行,但是执行完任务会对应衔接choice_data(cd)函数。那么,然后执行下面的函数,就可以异步运行了

async def choice_data(cd):
    try:
        data = ts.get_hist_data(('{}'.format(cd)))
        data.loc[((9.5 < data['p_change']) & (data['p_change'] < 10.8) & (data['close'] == data['high'])) | (
                    (data['p_change'] > 19.5) & (data['close'] == data['high'])), '涨停'] = 1
        df = data.copy()
        df.sort_index(ascending=True, inplace=True)

        def getmacd(data, short=12, long=26, dea=9, close='收盘价'):
            data['EMA_short'] = data['close'].ewm(span=short).mean()
            data['EMA_long'] = data['close'].ewm(span=long).mean()
            data['dif'] = data['EMA_short'] - data['EMA_long']
            data['dea'] = data['dif'].ewm(span=dea).mean()
            data['macd'] = (data['dif'] - data['dea']) * 2
            return data

        getmacd(df, close=df['close'])

这里只写一部分内容,具体的还需要对函数用法细致研究。

最后获取到我们加工后的tushare数据后,便可以存入数据库了。

        if df['汇总信息'].empty:
            pass
        else:
            # print(df)

            # print('完成第', n)
            # n += 1
            engine = create_engine('mysql+pymysql://root:123456@localhost/新建列表')
            df.to_sql(name='test', con=engine, if_exists='append', index=False)

为了让大家直观感受啥是携程函数,大家可以复制我下面一段代码运行,感受他的逻辑。

import asyncio
from time import sleep


async def test(list):
    task=[]  #固定写入的
    for i in list:
        print(i)
        task.append(next_test(i))  #需要将列表参数传入到写一个函数
    await asyncio.wait(task)

async def next_test(i):
   sleep(2)        #演示上下函数交错运行
   print(i,'这里运行比上面慢')


if __name__=='__main__':
    list=[1,2,3]           #这是最开始写入股票代码的地方
    asyncio.run(test(list))

了解这个只需要把我们策略对应复制进去,然后写入sql中,即可。

你可能感兴趣的:(mysql,数据库,sql)