问题相关代码,请勿粘贴截图
ts.get_tick_data('000300',date='2021-10-20',src='tt').head()#历史分笔数据
# vpin计算,其中start,end为时间,code为股票代码,注意tushare的高频数据最早到2018年6月
def vpin(start, end, code):
tradeday = get_trade_days(start_date=start, end_date=end)
firstday = ts.get_tick_data(code, date=str(tradeday[0]), src='tt')
firstdayvol = firstday['volume'].sum()
bulkvol = firstdayvol / 50
result = pd.DataFrame(columns=('date', 'vpin', 'high', 'low', 'open', 'close'))
datelist = []
allchange = []
for i in tradeday:
day = ts.get_tick_data(code, date=str(i), src='tt')
if day is not None:
day['volcum'] = day['volume'].cumsum()
day['number'] = day['volcum'] // bulkvol
n = int(max(day['number']))
for j in range(0, n):
bulk = day[day['number'] == j]
if len(bulk) > 0:
change = (bulk.iloc[-1]['price'] / bulk.iloc[0]['price']) - 1
allchange.append(change)
std = np.std(np.array(allchange))
for i in tradeday:
day = ts.get_tick_data(code, date=str(i), src='tt')
if day is not None:
chglist = []
vpinlist = []
day['volcum'] = day['volume'].cumsum()
day['number'] = day['volcum'] // bulkvol
n = int(max(day['number']))
high = max(day['price'])
low = min(day['price'])
Open = day['price'].iloc[0]
Close = day['price'].iloc[-1]
for j in range(0, n):
bulk = day[day['number'] == j]
if len(bulk) > 0:
change = (bulk.iloc[-1]['price'] / bulk.iloc[0]['price']) - 1
chglist.append(change)
for change in chglist:
z = (change) / std
p = (1.0 + erf(z / sqrt(2.0))) / 2.0
vpinlist.append(abs(((1 - p) - p)))
vpin = np.mean(np.array(vpinlist))
result = result.append(
pd.DataFrame({'date': [i], 'vpin': [vpin], 'high': [high], 'open': [Open], 'low': [low], 'close': [Close]}),
ignore_index=True)
return result
运行结果及报错内容
