連接mysql
from sqlalchemy import create_engine
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pymssql
from scipy.interpolate import interp1dfrom datetime import timedelta
#正常顯示畫圖時出現的中文和負號
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] =False
#顯示所有列
pd.set_option('display.max_columns',None)
#顯示所有行
pd.set_option('display.max_rows',None)#連接數據庫
conn = pymssql.connect(host = '.',user ='sa',password = 'test',database = 'databasename',charset ='utf8')
engine = create_engine('mssql+pymssql://sa:test@127.0.0.1/databasename')
數據存入
#保存數據
df.to_sql(name = 'sheetname',con=engine,if_exists='append',index=False)
獲取數據
#獲取數據
sql = 'select * from stock_data '
df0 = pd.read_sql(sql,conn)
tushare獲取股票數據并存入
#獲取數據
def get_data(code,start,end):#設置tokentoken=''pro = ts.pro_api(token)df = pro.daily(ts_code =code,adj='qfq',start_date=start,end_date=end)return df#上傳數據
def insert_sql(data,db_name,if_exists='append'):try:data.to_sql(db_name,engine,index=False,if_exists= if_exists)except:pass
更新數據
#更新數據
def updata_sql(start,end,db_name):for code in get_coe():data=get_data(code,start,end)insert_sql(data,db_name)print(f'{start}:{end}期間數據已成功更新')
數據可視化?
#數據可視化
def plot_data(df):count_ = data_info.groupby('trade_date')['ts_code'].count()attr = count_.indexv1 = count_.valuesbar = Bar()bar.add('',at,v1,is_splitline_show=False,linewidth=2)return bar
篩選股票池
#篩選數據.制作股票池
def get_new_code(date):df0 = pro.stock_basic(exchange = '',list_status='L')df1 = pro.daily(trade_date = date)df = pd.merge(df0,df1,on='ts_code')#print(df.head())df.info()
#剔除2017年以后上市的新股 df = df[df['list_date'].apply(int)<20200101]#剔除stdf = df[-df['name'].apply(lambda x:x.startswith('*ST'))]#剔除動態市盈率為負df = df[df.change>0]codes = df.ts_code.valuesreturn codes
查找指定股票
def find_stock(date):print(get_new_code(date))engine = create_engine('mssql+pymssql://sa:test@127.0.0.1/pos')df_all_data=pd.read_sql('stock_data',engine)f_code =[]for code in get_new_code(date):try:data = df_all_data.loc[df_all_data.ts_code==code].copy()data.index= pd.to_datetime(data.trade_date)data=data.sort_index()data['ma_20'] = ta.MA(data.close,timeperiod=20)if data.iloc[-1]['close'] > data.iloc[-1]['ma_20']:print(code)f_code.append(code)except:passreturn f_code