def loop_all_stocks():
days = 60
count =0
for EachStockID in info.index:
end_day=datetime.date(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day)
days=days*7/5
start_day=end_day-datetime.timedelta(days)
start_day=start_day.strftime("%Y-%m-%d")
end_day=end_day.strftime("%Y-%m-%d")
df= ts.get_h_data(EachStockID,start=start_day,end=end_day)
if not(df is None):
period_high=df['high'].max()
today_high=df.iloc[0]['high']
if today_high>=period_high:
highlist.append(df,ignore_index=True)
count+=1
python类get_h_data()的实例源码
def _save(stock, conn):
try:
print "save ----- :", stock
marketday = stocksinfo.at[stock, 'timeToMarket']
startday = pd.Timestamp(str(marketday))
# print marketday,startday,str(startday)[:10]
# df = ts.get_h_data(code, start=str(startday)[:10], retry_count = 5)
df = ts.get_h_data(stock, start=str(startday)[:10], retry_count=5, pause=1)
df = df.sort_index(ascending=True)
# ma_list = [5,10,20,60]
# for ma in ma_list:
# df['MA_' + str(ma)] = pd.rolling_mean(df.close, ma)
# print df[['open','high','close','low','volume']].head(2)
df[['open', 'high', 'close', 'low', 'volume']].to_sql(stock, conn, if_exists='append')
except Exception, arg:
print "exceptions:", stock, arg
errorlist.append(stock)
def _update(stock, conn):
try:
print "update ----- :", stock
query = "select * from '%s' order by date" % stock
df = pd.read_sql(query, conn)
df = df.set_index('date')
print "sql saved:", df.tail(1),df.ix[-1],df.ix[-1].name
if dt.now().weekday() == 5:
today = str(pd.Timestamp(dt.now()) - pd.Timedelta(days=1))[:10]
elif dt.now().weekday() == 6:
today = str(pd.Timestamp(dt.now()) - pd.Timedelta(days=2))[:10]
else:
today = str(pd.Timestamp(dt.now()))[:10]
print "today:",today
if today != df.ix[-1].name[:10]:
df = ts.get_h_data(stock, start=df.ix[-1].name[:10], retry_count=5, pause=1)
print "read from tu:",df.head(1)
df[['open', 'high', 'close', 'low', 'volume']].to_sql(stock, conn, if_exists='append')
import time
time.sleep(10)
except Exception, arg:
print "exceptionu:", stock, arg
errorlist.append(stock)
def main():
# ?????? ?3????
history = ts.get_hist_data(id)
print u"??3????"
print history.head(10)
history_all = ts.get_h_data(id, '20015101', '20160101')
print u'???????'
print history_all
# print type(stockInfo)
# print stockInfo.head()
# print stockInfo.dtypes
# df = ts.get_stock_basics()
#data = df.ix[id]['timeToMarket']
#print data
#ts.get_today_all()
def get_h_data(self, code, start = None, end = None, autype = None, index = False):
if end is None:
end = dataTime.datetimeRelative(delta = 1)
if start is None:
start = dataTime.datetimeRelative(base = end, delta = -20)
df = ts.get_h_data(code, start, end, autype = autype, index = index)
df = self.format_date_index(df)
df = df.sort_values(['date'], ascending=[True])
return df
# ????
# ?????
# code???????6?????
# date??????YYYY-MM-DD
# retry_count : int, ??3,??????????????
# pause : int, ?? 0,??????????????????????????????
# ??????
# time???
# price?????
# change?????
# volume????
# amount?????(?)
# type????????????????
def get_high_test():
df = ts.get_h_data('300141', start=day30, end=day0)
#???????????????
#print df
#current= df[:1]
#current=df.iloc[0]
print df
current = df.ix['2016-07-15']
print current
current_high = current['high'].values[0]
print current_high
highest = df['high']
lowest = df['low']
price_30_max = highest.max()
price_30_min = lowest.min()
print df[df.high >= price_30_max]
#???????????
print df[df.low <= price_30_min]
#???????????
print price_30_max
print price_30_min
#oneData= df.ix['2016-07-11']
#print oneData.iloc[0,1]
#print type(oneData)
#for i in highest.len:
# print i
#print type(t)
if current_high >= price_30_max:
print stock_info.ix['300141']['name'].decode('utf-8')
def _update(stock,begin, conn):
print "update ----- :", stock
try:
df = ts.get_h_data(stock, start=begin, retry_count=5, pause=1)
if len(df) != 0:
print df.head(2)
df[['open', 'high', 'close', 'low', 'volume']].to_sql(stock, conn, if_exists='append')
import time
time.sleep(10)
except Exception, arg:
print "exception:", stock, arg
raise SystemExit(-1)
#errorlist.append(stock)
def is_break_high(self, stockId, days):
(start_day, end_day) = self.pick_date_from_days(days)
#print("high: stockId", stockId, "days", days, "start_day", start_day, "end_day", end_day)
df = ts.get_h_data(stockId, start=start_day, end=end_day)
if df is None:
return False
period_high = df['high'].max()
today_high = df.iloc[0]['high']
if today_high >= period_high:
return True
else:
return False
def add_toprank_IR(self, stockId):
(start_day, end_day) = self.pick_date_from_days(self.rankDays)
#print("increase: stockId", stockId, "start_day", start_day, "end_day", end_day)
df = ts.get_h_data(stockId, start=start_day, end=end_day)
#print("Dataframe: \n", df)
if df is None:
return
perl = toprank_perl(stockId, self.d2i)
for i in range(0, self.rankDays):
if i >= len(df):
return
IR = self.get_IR_from_df(df, i)
perl.set_IR(i, IR)
self.rankCrown.append(perl)
def dummy_run(self):
(start_day, end_day) = self.pick_date_from_days(self.rankDays)
print("daysBefore:", self.daysBefore, "pick date:", start_day, "-", end_day)
#df = ts.get_h_data('000063', start_day, end_day)
#print("Dataframe: \n", df)
def main():
now = time.strftime("%Y-%m-%d")
# print now
token = '60517739976b768e07823056c6f9cb0fee33ed55a1709b3eaa14a76c6a1b7a56'
sb = StockBox()
# sb.looper(id)
id = '300333'
# sb.realtime(id)
sb.base_function("300333")
# pandas_test=Pandas_test()
# pandas_test.test_function()
# sb.longhuban('2016-04-05')
# sb.getNews()
# sb.fund()
#sb.get_stock_chengfeng()
#sb.date_store()
#sb.profit_test()
#sb.daily_longhu()
# ?????? ?3????
history = ts.get_hist_data(id)
print u"??3????"
print history.head(10)
history_all = ts.get_h_data(id, '20015101', '20160101')
print u'???????'
print history_all
# print type(stockInfo)
# print stockInfo.head()
# print stockInfo.dtypes
#df = ts.get_stock_basics()
#data = df.ix[id]['timeToMarket']
#print data
#ts.get_today_all()
def GET_AMOUNT_DATA_DAY(self, context, security,isLastest=True,data={},dataCount=20):
#TODO get_k_data has no amount data, get_h_data no support index
try:
df_data = ts.get_h_data(security, index=False)
except Exception,e:
print e
df_data = None
if df_data is None or df_data.empty == True:
print "security:%s in context:%s NO GET_AMOUNT_DATA_DAY!" %(str(security),str(context))
return np.array([np.nan])
df_data = df_data.iloc[::-1].tail(dataCount)
amountData = df_data['amount'].values
try:
dfreal = ts.get_realtime_quotes(security)
except Exception,e:
print Exception,":",e
dfreal = None
if not dfreal is None:
data = dfreal.date[0]
time = dfreal.time[0]
dateStr = data + ' ' + time
current_dt = self.__getdatetime__(dateStr)
runtime = SecurityDataSrcBase.GET_RUN_MINUTES(TsContext(current_dt))
if runtime < 240:
amountLast = float(dfreal.amount[0])
amountData = np.append(amountData, amountLast)
return amountData
# overide
def fetch_history(stock, start, end):
"""
History data forward answer authority
"""
disable_stdout()
with timer(logtime("ts.get_h_data('%s', autype=None, start='%s', end='%s', drop_factor=False)" % (stock, start, end))):
df = await wait_concurrent(event_loop, proc_pool, ts.get_h_data, stock, autype=None, start=start, end=end, drop_factor=False, pause=0.05)
if df is None:
logging.debug("no history data for stock: ts.get_h_data('%s', autype=None, start='%s', end='%s')" % (stock, start, end))
return
df['stock'] = stock
ans = df.reset_index()
return history_buffer.proc_data(ans)
def fetch_history_index(code, start, end):
disable_stdout()
info = "ts.get_h_data('%s', start='%s', end='%s', pause=0.05, index=True)" % (code, start, end)
with timer(logtime(info)):
df = await wait_concurrent(event_loop, proc_pool, ts.get_h_data, code, start=start, end=end, pause=0.05, index=True)
if df is None:
logging.debug("no history index data for code: %s", info)
return
df['code'] = code
ans = df.reset_index()
return history_index_buffer.proc_data(ans)
def download_fq_data_from_tushare(code):
'''
??????????????????????????????
:param code:
:return:
'''
path = './data/'
import tushare as ts
import datetime
sh_index_lastday = open(path+'sh.csv', 'rb').readlines()[1:][-1] # ???????????????????????
# if os.path.exists(path+'stock_data/' + str(code) + '.csv'):
# import tushare as ts
#
# f = open(path+'stock_data/' + str(code) + '.csv', 'rb').readlines()[1:]
# # 3years line
# fp_data = ts.get_h_data(str(code), start=f[-1].split(',')[0], end=f[0].split(',')[0])
# if fp_data is not None:
# fp_data.to_csv(path+"stock_data/"+str(code)+'_fq.csv')
# # ts.get_h_data(str(code), start=raw_dates[0], end=raw_dates[-1]).to_csv(path+"stock_data/"+str(code)+'_fq.csv')
# return True
# else:
# return False
# else:
# return False
years = 3
start = datetime.datetime.today().date() + datetime.timedelta(-365 * years)
# 3years line
# fp_data = ts.get_h_data(str(code), start=str(start))
fp_data = ts.get_k_data(str(code), start=str(start))
if fp_data is not None and len(fp_data) > 1 and fp_data['date'].tolist()[-1] == sh_index_lastday.split(',')[1]:
fp_data.to_csv(path + "stock_data/" + str(code) + '_fq.csv')
return True
else:
return False
def get_stock_daily_trading_data(code, start_date=startDate, end_date=endDate):
code = str(code).zfill(6)
try:
stock_data = ts.get_h_data(str(code), start=start_date, end=end_date, autype=None)
filename = hisDataPath + code + ".csv"
stock_data.to_csv(filename, index=True, encoding='gbk')
print('Get stock:', code, 'historical data done!')
except Exception:
print('Failed to get stock:', code, 'historical data!')
time.sleep(30)
get_stock_daily_trading_data(code, startDate, endDate)
def get_data(code, start=None, end=None, index=False):
"""
??????
:param code:
:param start:
:param end:
:param index:
:return:
"""
end = time.strftime('%Y-%m-%d', time.localtime(time.time()))
data = ts.get_h_data(code=code, start=start, end=end, index=index, autype='None')
return data, code
def is_break_high(stockID, days, fast_type=True):
end_day = datetime.date(datetime.date.today().year, datetime.date.today().month, datetime.date.today().day-2)
days = days * 7 / 5
#?????????
print stockID
start_day = end_day - datetime.timedelta(days)
start_day = start_day.strftime("%Y-%m-%d")
end_day = end_day.strftime("%Y-%m-%d")
if fast_type:
df = ts.get_h_data(stockID, start=start_day, end=end_day, retry_count=10, pause=10)
else:
df = ts.get_hist_data(stockID, start=start_day, end=end_day, retry_count=10, pause=10)
if df is None:
print "None len==0"
return False
if df.empty:
print "%s Trading halt" % info.ix[stockID]['name'].decode('utf-8')
return False
period_high = df['high'].min()
#print period_high
curr_day = df[:1]
today_high = curr_day.iloc[0]['high']
#??????? .values
#????df??1? ????.values
#print today_high
if today_high >= period_high:
stock_h = []
day = curr_day.index.values[0]
#print curr_day
name = info.ix[stockID]['name'].decode('utf-8')
if fast_type:
turnover = 0
p_change = 0
else:
turnover = curr_day.iloc[0]['turnover']
p_change = curr_day.iloc[0]['p_change']
print day
print stockID
print p_change
print turnover
#print day
#date=curr_day['date']
stock_h.append(day)
stock_h.append(stockID)
stock_h.append(name)
stock_h.append(p_change)
stock_h.append(turnover)
#print name.decode('utf-8')
#print date
#all_high_stock.append(stock)
sql_db_h.store_break(stock_h)
return True
else:
return False
def is_break_low(stockID, days, fast_type=True):
end_day = datetime.date(datetime.date.today().year, datetime.date.today().month, datetime.date.today().day-2)
days = days * 7 / 5
#?????????
print stockID
start_day = end_day - datetime.timedelta(days)
start_day = start_day.strftime("%Y-%m-%d")
end_day = end_day.strftime("%Y-%m-%d")
if fast_type:
df = ts.get_h_data(stockID, start=start_day, end=end_day, retry_count=10, pause=10)
else:
df = ts.get_hist_data(stockID, start=start_day, end=end_day, retry_count=10, pause=10)
if df is None:
print "None len==0"
return False
if df.empty:
print "%s Trading halt" % info.ix[stockID]['name'].decode('utf-8')
return False
period_low = df['low'].max()
#print period_high
curr_day = df[:1]
today_low = curr_day.iloc[0]['low']
#??????? .values
#????df??1? ????.values
#print today_high
if today_low <= period_low:
stock_l= []
day = curr_day.index.values[0]
#print curr_day
name = info.ix[stockID]['name'].decode('utf-8')
if fast_type:
turnover = 0
p_change = 0
else:
turnover = curr_day.iloc[0]['turnover']
p_change = curr_day.iloc[0]['p_change']
print day
print stockID
print p_change
print turnover
#print day
#date=curr_day['date']
stock_l.append(day)
stock_l.append(stockID)
stock_l.append(name)
stock_l.append(p_change)
stock_l.append(turnover)
#print name.decode('utf-8')
#print date
#all_high_stock.append(stock)
sql_db_l.store_break(stock_l)
return True
else:
return False