Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. from datetime import datetime
  4. from fastparquet import write
  5.  
  6.  
  7.  
  8. def compute_vwap(df):
  9. q = df['foreignNotional']
  10. p = df['price']
  11. vwap = np.sum(p * q) / np.sum(q)
  12. df['vwap'] = vwap
  13. return df
  14.  
  15. def ohlc(df):
  16. df['open'] = df.price.iloc[0]
  17. df['high'] = df.price.max()
  18. df['low'] = df.price.min()
  19. df['close'] = df.price.iloc[-1]
  20. return df[-1:]
  21.  
  22.  
  23. data = pd.read_csv('data/20181204.csv')
  24. data = data[data.symbol == 'XBTUSD']
  25. paths = ['data/20181205.csv','data/20181206.csv','data/20181207.csv', 'data/20181208.csv', 'data/20181209.csv']
  26. for path in paths:
  27. df = pd.read_csv(path)
  28. df = df[df.symbol == 'XBTUSD']
  29. data = data.append(df)
  30. data['timestamp'] = data.timestamp.map(lambda t: datetime.strptime(t[:-3], "%Y-%m-%dD%H:%M:%S.%f")) # timestamp parsing
  31. data.set_index('timestamp', inplace=True)
  32. data.sort_index(inplace=True)
  33.  
  34. data_cm_dollar = data.assign(cmDollar=data['foreignNotional'].cumsum())
  35. total_dollars = data_cm_dollar.cmDollar.values[-1]
  36. dollars_per_bar = 2e6
  37.  
  38. print('Total dollars:', total_dollars)
  39. print('Dollars per bar:', dollars_per_bar)
  40. data_dollar_grp = data_cm_dollar.assign(grpId=lambda row: row.cmDollar // dollars_per_bar)
  41. print('Number of dollar bars:', len(data_dollar_grp.groupby(['grpId'])))
  42. data_dollar_ohlc = data_dollar_grp.groupby('grpId').apply(lambda x: ohlc(compute_vwap(x)))
  43. data_dollar_ohlc.index = data_dollar_ohlc.index.droplevel()
  44. data_dollar_ohlc = data_dollar_ohlc[~data_dollar_ohlc.index.duplicated(keep='first')]
  45.  
  46. # save to file
  47. write('data_dollar_ohlc.pq', data_dollar_ohlc)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement