# Sessions must be equal - fill missing dates # Fill on first date before 12:00 and on last date after 11:00 first_date = price.index[0].date() last_date = price.index[-1].date()+timedelta(days=1) filled_idx = pd.date_range(first_date, last_date, freq='H') filled_price = price.reindex(filled_idx) #等于在原数据基础上扩展新增了部分数据 print(filled_price)
2018-01-01 00:00:00 NaN 2018-01-01 01:00:00 NaN 2018-01-01 02:00:00 NaN 2018-01-01 03:00:00 NaN 2018-01-01 04:00:00 NaN .. 2018-01-03 20:00:00 NaN 2018-01-03 21:00:00 NaN 2018-01-03 22:00:00 NaN 2018-01-03 23:00:00 NaN 2018-01-04 00:00:00 NaN Freq: H, Length: 73, dtype: float64 #数据长度从48变成73
筛选交易时间内行情
1 2 3 4
# Remove dates that are outside of trading sessions session_price_idx = filled_price.between_time('9:00', '17:00', include_end=False).index session_price = filled_price.loc[session_price_idx] print(session_price)
筛选出start_idxs,end_idxs,基于此切分session
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# Select first and last ticks of each trading session and split price into ranges between those ticks start_idxs = session_price.index[session_price.index.hour == 9] end_idxs = session_price.index[session_price.index.hour == 16] price_per_session, _ = session_price.vbt(freq='1H').range_split(start_idxs=start_idxs, end_idxs=end_idxs) print(price_per_session)
split_idx 0 1 2 0 NaN 0.139494 0.662522 1 NaN 0.292145 0.311711 2 NaN 0.366362 0.520068 3 0.374540 0.456070 NaN 4 0.950714 0.785176 NaN 5 0.731994 0.199674 NaN 6 0.598658 0.514234 NaN 7 0.156019 0.592415 NaN