| import pandas as pd |
| import numpy as np |
| import re |
|
|
|
|
| def timeframe_mapper(timeframe): |
| rule = {'min': 'minute', 'h': 'hour', 'd': 'day', 'w': 'week', 'm': 'month', 'q': 'quarter', 'y': 'year'} |
| results = re.split('(\d+)', timeframe)[1:] |
| results[0], results[1] = int(results[0]), rule[results[1]] |
| return results[0], results[1] |
|
|
|
|
| def create_dataframe(group): |
|
|
| try: |
| volume, open_price, = group['size'].sum(), group['price'].iloc[0] |
| close_price, delta = group['price'].iloc[-1], group['type'].sum() |
| high_price, low_price = group['price'].max(), group['price'].min() |
| adjusted_close_price = round(np.average(group['price'].values, weights=group['size'].values), 0) |
|
|
| candle = {'open': open_price, 'high': high_price, 'low': low_price, 'close': close_price, |
| 'adjClose': adjusted_close_price, 'volume': volume, 'delta': delta} |
|
|
| return pd.DataFrame(candle, index=group.index).drop_duplicates(keep='first') |
|
|
| except IndexError: |
|
|
| candle = {'open': np.nan, 'high': np.nan, 'low': np.nan, 'close': np.nan, 'adjClose': np.nan, |
| 'volume': np.nan, 'delta': np.nan} |
|
|
| return pd.DataFrame(candle, index=group.index).drop_duplicates(keep='first') |
|
|