首先要说的是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中,即可。