def check_k_data():
each_code = '300333'
#?????????????????
df_x = ts.get_k_data(code=each_code, start='2017-03-01')
print df_x
if len(df_x) < 11:
print "Error"
exit()
print df_x
ma5 = df_x['close'][-5:].mean()
ma10 = df_x['close'][-10:].mean()
print ma5
print ma10
print df_x['volume']
#get_all_stock_id()
#check_type()
#news()
python类get_k_data()的实例源码
def boll():
#??tushare??????
df=ts.get_k_data('300580',start='2017-01-12',end='2017-05-26')
#?????
closed=df['close'].values
upper,middle,lower=talib.BBANDS(closed,matype=talib.MA_Type.SMA)
print upper,middle,lower
plt.plot(upper)
plt.plot(middle)
plt.plot(lower)
plt.grid()
plt.show()
diff1=upper-middle
diff2=middle-lower
print diff1
print diff2
def get_stick_hisdata_w(self,begin_date,end_date,all='YES'):
if all == 'YES':
print('all stock ...........')
self.cur.execute(
"select code,outstanding from t_all_stickcode ;")
else:
print('part stock ........................')
self.cur.execute("select code,outstanding from t_all_stickcode where outstanding < 50000 and (substr(code,1,1)='0' or substr(code,1,1)='6'); ;")
#self.cur.execute("select code,outstanding from t_all_stickcode a where not EXISTS (select * from t_stick_data_w where code = a.code);")
sqlrs = self.cur.fetchall();
# self.cur.execute("delete from t_stick_data_w")
#self.sqlconn.commit()
for code in sqlrs:
print(code[0]+'_w' ,begin_date,end_date)
try:
rs = ts.get_k_data(code=code[0],start=begin_date,end=end_date,ktype='W')
except Exception as e:
print('ERR:',e)
self.db.delete_date('t_stick_data_w',begin_date,code[0])
self.db.insert_data('t_stick_data_w',rs.as_matrix())
self.db.commit()
return
def get_stick_hisdata_d(self,begin_date,end_date):
# cur.execute("select code,outstanding from t_all_stickcode where outstanding < 50000 and (substr(code,1,1)='0' or substr(code,1,1)='6'); ;")
self.cur.execute("select code,outstanding from t_all_stickcode ;")
sqlrs = self.cur.fetchall();
# self.cur.execute("delete from t_stick_data_d")
self.sqlconn.commit()
for code in sqlrs:
print(code[0]+'_d' )
try:
rs = ts.get_k_data(code=code[0],start=begin_date,end=end_date,ktype='D')
except Exception as e:
print('ERR:',e)
continue
# rs.to_sql('t_stick_data_d',self.engine,if_exists='replace',index=False);
self.db.delete_date('t_stick_data_d',end_date,code[0])
self.db.insert_data('t_stick_data_d',rs.as_matrix())
self.sqlconn.commit()
return
def get_little_stock(self):
self.cur.execute("select code from t_all_stickcode where liquidassets < 70000 and liquidassets > 60000 and (substr(code,1,1)='0' or substr(code,1,1)='6') ;")
rs = self.cur.fetchall();
return rs
# enddate = datetime.date.today()
# begindate = datetime.date.today() - datetime.timedelta(days=336)
#
# ld = load()
# ld.get_all_stick_inf()
# ld.get_stick_hisdata_w(begindate.strftime('%Y-%m-%d'),enddate.strftime('%Y-%m-%d'),all='YES')
# ld.get_stick_hisdata_w()
#get_stick_hisdata_d()
#get_stick_hisdata_w()
#get_stick_hisdata_m()
#get_stick_hisdata_add_m()
# rs = ts.get_k_data(code='600848', start='2016-06-01', end='2017-01-01', ktype='w')
# print(rs)
# cf = configparser.ConfigParser()
# cf.read('stock.init')
# usr = cf.get('db','db_user')
# pwd = cf.get('db', 'db_pass')
# print(usr,pwd)
def profit(self,start,end,code):
start_price=ts.get_k_data(start=start,end=start,code=code)
if len(start_price)==0:
print "Not open for start day"
#?????????????????.
s_price=start_price['close'].values[0]
print "Start price: ",s_price
end_price=ts.get_k_data(start=end,end=end,code=code)
if len(end_price)==0:
print "Not open for end day"
e_price=end_price['close'].values[0]
print "End price: ",e_price
earn_profit=(e_price-s_price)/s_price*100
print "Profit: ",
print round(earn_profit,2)
def calc_open_by_percent(self,code):
cont=100000000
#total_vol=self.bases[self.bases['code']==code]['totals'].values[0]
acutal_vol=self.bases[self.bases['code']==code]['outstanding'].values[0]
all_vol= acutal_vol*cont
df1=ts.get_k_data(code)
i=1
while 1:
s=df1.ix[i]
if s['high']!=s['low']:
#date=s['date']
break
i=i+1
j=i-1
date_end=df1.ix[j]['date']
date_start=df1.ix[0]['date']
df3=df1[(df1['date']>=date_start) & (df1['date']<=date_end)]
v_total_break=df3['volume'].sum()
l=len(df3)
print l
print v_total_break
rate=v_total_break*100*100.00/all_vol #??? ??
print round(rate,6)
return rate,l
def caculation(self):
df_t=ts.get_today_all()
print self.df[u'??'].values
for i in self.df[u'??'].values:
name=self.base[self.base['code']==i]['name'].values[0]
print name
t=name.decode('utf-8')
print
print type(t)
#print chardet.detect(t)
self.df.ix[self.df[u'??']==i,u'????']=self.today
#t=ts.get_k_data(i)
pchange=df_t.ix[df_t['code']==i,'changepercent'].values[0]
print pchange
self.df.ix[self.df[u'??']==i,u'????']=pchange
current=df_t[df_t['code']==i]['trade'].values[0]
self.df.ix[self.df[u'??']==i,u'????']=current
current_profit=(current-self.df[self.df[u'??']==i][u'????'].values[0])/self.df[self.df[u'??']==i][u'????'].values[0]
self.df.ix[self.df[u'??']==i,u'????']=round(current_profit*100,2)
print current_profit
print self.df
self.df.to_excel(self.name,encoding='utf-8')
def relation(self):
sh_index=ts.get_k_data('000001',index=True,start='2012-01-01')
sh=sh_index['close'].values
print sh
vol_close=sh_index.corr()
print vol_close
'''
sz_index=ts.get_k_data('399001',index=True)
sz=sz_index['close'].values
print sz
cy_index=ts.get_k_data('399006',index=True)
s1=Series(sh)
s2=Series(sz)
print s1.corr(s2)
'''
#?????????????st
def getTotal():
path=os.path.join(os.getcwd(),'data')
os.chdir(path)
all=pd.read_csv('bases.csv',dtype={'code':np.str})
#print all
all_code=all['code'].values
#print all_code
lists=[]
for i in all_code:
df=ts.get_k_data(i,start='2017-07-17',end='2017-07-17')
lists.append(df)
all_df=pd.DataFrame(lists)
print all_df
all_df.to_csv('2017-all.csv',encoding='gbk')
all_df.to_excel('2017-excel.xls')
Fetch_Data_Stock_CHN_Weekly.py 文件源码
项目:StockRecommendSystem
作者: doncat99
项目源码
文件源码
阅读 67
收藏 0
点赞 0
评论 0
def getSingleStockByTime(symbol, from_date, till_date):
start = from_date.split('-')
start_y, start_m, start_d = start[0], start[1], start[2] # starting date
end = till_date.split('-')
end_y, end_m, end_d = end[0], end[1], end[2] # until now
repeat_times = 1
message = ""
df = pd.DataFrame()
for _ in range(repeat_times):
try:
data = ts.get_k_data(symbol, ktype='W')
data.sort_index(ascending=True, inplace=True)
return data, ""
except Exception as e:
message = symbol + " fetch exception: " + str(e)
continue
return df, message
Fetch_Data_Stock_CHN_Daily.py 文件源码
项目:StockRecommendSystem
作者: doncat99
项目源码
文件源码
阅读 20
收藏 0
点赞 0
评论 0
def getSingleStockByTime(symbol, from_date, till_date):
start = from_date.split('-')
start_y, start_m, start_d = start[0], start[1], start[2] # starting date
end = till_date.split('-')
end_y, end_m, end_d = end[0], end[1], end[2] # until now
repeat_times = 1
message = ""
df = pd.DataFrame()
for _ in range(repeat_times):
try:
data = ts.get_k_data(symbol)#, from_date, till_date)
data.sort_index(ascending=True, inplace=True)
return data, ""
except Exception as e:
message = symbol + " fetch exception: " + str(e)
continue
return df, message
def GET_OPEN_DAY(self, context, security, ref=0):
if ref==0:
dfreal = ts.get_realtime_quotes(security)
if dfreal.empty == True:
return np.nan
return float(dfreal['open'][0])
else:
dataCount = ref + 1
df_data = ts.get_k_data(security, index=False, ktype='D').tail(dataCount)
if df_data.empty == True:
print "security:%s in context:%s NO GET_OPEN_DAY!" %(str(security),str(context))
return np.nan
if len(df_data['open']) < ref:
return np.nan
return df_data['open'].values[-ref]
# ???????????
def download_economy():
import tushare as ts
path = './data/'
ts.get_money_supply().to_csv(path+'money_supply.csv')
ts.get_gdp_quarter().to_csv(path+'gdp_quarter.csv')
ts.get_gdp_year().to_csv(path + 'gdp_year.csv')
ts.get_cpi().to_csv(path+'cpi.csv')
# ts.get_hist_data('sz').to_csv(path + 'sz.csv')
# ts.get_hist_data('sh').to_csv(path + 'sh.csv')
# import time
import datetime
# now_year = time.localtime().tm_year
# now_mon = time.localtime().tm_mon
# now_day = time.localtime().tm_mday
years = 3
start = datetime.datetime.today().date() + datetime.timedelta(-365*years)
end = datetime.datetime.today().date()
ts.get_k_data('399001', start=str(start), index=True).to_csv(path + 'sz.csv') #??2? ,
ts.get_k_data('000001', start=str(start), index=True).to_csv(path + 'sh.csv')
#??????
ts.get_rrr().to_csv(path + 'rrr.csv')
def query_k(code):
data = json.loads(ts.get_k_data(code).to_json(orient='records'))
return jsonify(data)
def QA_fetch_get_stock_day(name, startDate='', endDate='', if_fq='01', type_='json'):
if (len(name) != 6):
name = str(name)[0:6]
if str(if_fq) in ['qfq', '01']:
if_fq = 'qfq'
elif str(if_fq) in ['hfq', '02']:
if_fq = 'hfq'
elif str(if_fq) in ['bfq', '00']:
if_fq = 'bfq'
else:
QA_util_log_info('wrong with fq_factor! using qfq')
if_fq = 'qfq'
data = QATs.get_k_data(str(name), startDate, endDate,
ktype='D', autype=if_fq, retry_count=200, pause=0.005).sort_index()
data['date_stamp'] = data['date'].apply(lambda x: QA_util_date_stamp(x))
data['fqtype'] = if_fq
if type_ in ['json']:
data_json = QA_util_to_json_from_pandas(data)
return data_json
elif type_ in ['pd', 'pandas', 'p']:
data['date'] = pd.to_datetime(data['date'])
data = data.set_index('date', drop=False)
data['date'] = data['date'].apply(lambda x: str(x)[0:10])
return data
def _get_backtest_calendar(self):
'''
???????
????????tushare???
Return
-------
list,????????[u'2016-01-04',...,u'2016-06-17']
'''
data = ts.get_k_data('000001',self.start_date,
self.end_date,
index = True)
data = data['date'].tolist()
return data
def update_tradedate_calendar():
'''
??MySQL??????????
'''
start_date = '1990-01-01'
end_date = dt.date.today().strftime('%Y-%m-%d')
tradedates = ts.get_k_data('000001',start = start_date,
end = end_date,
index = True)[['date']]
tradedates.date = pd.to_datetime(tradedates.date)
now = dt.date.today()
tradedates['last_updated_time'] = now
con = pymysql.connect(
db_host,
db_user,
db_pass,
db_name,
charset = 'utf8')
with con:
tradedates.to_sql('tradedates',con,flavor = 'mysql',
if_exists = 'replace')
print('??????????tradedates')
def new_api():
data = ts.get_k_data('300333')
print data
#????????
def get_index():
df = ts.get_k_data(code='000001', index=True, start='2017-03-01')
print df
def baseAPI():
#??tushare??????
df=ts.get_k_data('300580',start='2017-01-12',end='2017-05-26')
#?????
closed=df['close'].values
#??????????timeperiod??????? 5,10,20 ???????
ma5=talib.SMA(closed,timeperiod=5)
ma10=talib.SMA(closed,timeperiod=10)
ma20=talib.SMA(closed,timeperiod=20)
#?????????
print closed
print ma5
print ma10
print ma20
#??plog????????????????
plt.plot(closed)
plt.plot(ma5)
plt.plot(ma10)
plt.plot(ma20)
#??????????????????
plt.grid()
#???????????????
plt.show()
def ma_type_test():
#MA_Type: 0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)
df=ts.get_k_data('300580',start='2017-01-12',end='2017-05-26')
closed=df['close'].values
sma=talib.MA(closed,timeperiod=10,matype=0)
ema=talib.MA(closed,timeperiod=10,matype=1)
wma=talib.MA(closed,timeperiod=10,matype=2)
dema=talib.MA(closed,timeperiod=10,matype=3)
tema=talib.MA(closed,timeperiod=10,matype=4)
trima=talib.MA(closed,timeperiod=10,matype=5)
kma=talib.MA(closed,timeperiod=10,matype=6)
mama=talib.MA(closed,timeperiod=10,matype=7)
t3=talib.MA(closed,timeperiod=10,matype=8)
#ouput=talib.MA(closed,timeperiod=5,matype=0)
print closed
plt.ylim([0,40])
plt.plot(sma,'r--')
plt.plot(ema,'g-*')
plt.plot(wma)
plt.plot(dema)
plt.plot(tema)
plt.plot(trima)
plt.plot(kma)
plt.plot(mama)
plt.plot(t3)
plt.grid()
plt.text(7,30,'BST')
plt.show()
def __get_k_data_of_last_trade_day(code):
d = datetime.now()
k = None
while True:
k = ts.get_k_data(code, ktype='M', start=d.strftime("%Y-%m-%d"), end=d.strftime("%Y-%m-%d"))
if (len(k) > 0):
break
else:
d = d + timedelta(days = -1)
return k, d
def __get_pb_and_bvps(code, quarter):
''' get pb of spbcific quarter
args: code, quarter(e.g. 2015q3)
'''
r = {}
bvps = 0
y = quarter.split('q')[0]
q = quarter.split('q')[1]
q_str = 'code==' + '\"' + code + '\"'
r[quarter] = __pd_read_report(quarter)
if (len(r[quarter].query(q_str)) > 0):
bvps = r[quarter].query(q_str).bvps.values[0]
else:
log.warn('no entry in %s (bvps)', quarter)
return False, False
s, e = __quarter_to_date(quarter)
k = ts.get_k_data(code, ktype='M', start=s, end=e)
if (len(k) == 0):
log.warn('no k data entry in %s', quarter)
return False, False
pps = k.loc[k.last_valid_index()].close
log.debug('%s, price: %.2f', e, pps)
log.debug('bvps: %.2f', bvps)
pb = round(pps/bvps, 2)
log.debug('pb: %.2f', pb)
return pb, bvps
def wangge():
df = ts.get_k_data('002321',ktype='D')
return df
#data_complete()
def test2():
rs = ts.get_k_data(code='600275', start='2016-12-01', end='2016-12-14', ktype='W')
print(rs)
def get_stick_hisdata_m(self,begin_date,end_date):
# cur.execute("select code,outstanding from t_all_stickcode where outstanding < 50000 and (substr(code,1,1)='0' or substr(code,1,1)='6'); ;")
self.cur.execute("select code,outstanding from t_all_stickcode a where not EXISTS (select * from t_stick_data_d where code = a.code);")
sqlrs = self.cur.fetchall();
# self.cur.execute("delete from t_stick_data_m")
self.sqlconn.commit()
for code in sqlrs:
print(code[0] )
rs = ts.get_k_data(code=code[0],start=begin_date,end=end_date,ktype='M')
self.db.delete_date('t_stick_data_m',end_date,code[0])
self.db.insert_data('t_stick_data_m',rs.as_matrix())
self.sqlconn.commit()
return
def calc_open_day(self,code):
cont=100000000
#total_vol=self.bases[self.bases['code']==code]['totals'].values[0]
acutal_vol=self.bases[self.bases['code']==code]['outstanding'].values[0]
all_vol= acutal_vol*cont
#df= ts.get_hist_data(code)
df1=ts.get_k_data(code)
if len(df1)<3:
return None
#print df1.info()
#df1=df.reset_index()
#print df1
start=df1['date'].values[0]
print 'Start day:', start
df2= df1[(df1['close']==df1['low']) & (df1['high']==df1['low'])]
print self.bases[self.bases['code']==code]['name'].values[0]
end=df2['date'].values[-1]
print "Break day" , end
df3=df1[(df1['date']>=start) & (df1['date']<=end)]
v_total_break=df3['volume'].sum()
l=len(df3)
print l
print v_total_break
rate=v_total_break*100*100.00/all_vol #??? ??
print round(rate,6)
return rate,l
def macd(self):
# df=self.fetch_new_ipo(writeable=True)
# all_code=df['code'].values
# all_code=self.get_all_code()
# print all_code
result = []
for each_code in self.all_code:
print each_code
try:
df_x = ts.get_k_data(code=each_code, start='2017-03-01')
# ???????????no item?????
except:
print "Can't get k_data"
continue
if len(df_x) < 11:
# return
print "no item"
continue
ma5 = df_x['close'][-5:].mean()
ma10 = df_x['close'][-10:].mean()
if ma5 > ma10:
# print "m5>m10: ",each_code," ",self.base[self.base['code']==each_code]['name'].values[0], "ma5: ",ma5,' m10: ',ma10
temp = [each_code, self.base[self.base['code'] == each_code]['name'].values[0]]
print temp
result.append(temp)
print result
print "Done"
return result
#?????????
def volume_calculate(self,codes):
delta_day = 180 * 7 / 5
end_day = datetime.date(datetime.date.today().year, datetime.date.today().month, datetime.date.today().day)
start_day = end_day - datetime.timedelta(delta_day)
start_day = start_day.strftime("%Y-%m-%d")
end_day = end_day.strftime("%Y-%m-%d")
print start_day
print end_day
result_m5_large=[]
result_m5_small=[]
for each_code in codes:
# print each_code
try:
df = ts.get_k_data(each_code, start=start_day, end=end_day)
print df
except Exception,e:
print "Failed to get"
print e
continue
if len(df) < 20:
# print "not long enough"
continue
print each_code
all_mean = df['volume'].mean()
m5_volume_m = df['volume'][-5:].mean()
m10_volume_m = df['volume'][-10:].mean()
last_vol=df['volume'][-1] #???????????
#??????????? 180????4?
if m5_volume_m > (4.0 * all_mean):
print "m5 > m_all_avg "
print each_code,
temp = self.base[self.base['code'] == each_code]['name'].values[0]
print temp
result_m5_large.append(each_code)
#?????
if last_vol < (m5_volume_m/3.0):
result_m5_small.append(each_code)
return result_m5_large,result_m5_large