def main(self): start_timestamp = get_block_timestamp( self.infura, self.web3.eth.blockNumber - self.arguments.past_blocks) end_timestamp = int(time.time()) events = self.exchange.past_fill( self.arguments.past_blocks, {'maker': self.market_maker_address.address}) trades = zrx_trades(self.infura, self.market_maker_address, self.arguments.buy_token, self.buy_token_address, self.arguments.buy_token_decimals, self.arguments.sell_token, self.sell_token_addresses, self.arguments.sell_token_decimals, events, '-') trades = sort_trades_for_pnl(trades) prices = get_prices(self.arguments.gdax_price, self.arguments.price_feed, self.arguments.price_history_file, start_timestamp, end_timestamp) vwaps = get_approx_vwaps(prices, self.arguments.vwap_minutes) vwaps_start = prices[0].timestamp if self.arguments.text: pnl_text(trades, vwaps, vwaps_start, self.arguments.buy_token, self.arguments.sell_token, self.arguments.vwap_minutes, self.arguments.output) if self.arguments.chart: pnl_chart(start_timestamp, end_timestamp, prices, trades, vwaps, vwaps_start, self.arguments.buy_token, self.arguments.sell_token, self.arguments.output)
def main(self): start_timestamp = get_block_timestamp(self.infura, self.web3.eth.blockNumber - self.arguments.past_blocks) end_timestamp = int(time.time()) # If we only fetch log events from the last `past_blocks` blocks, the left hand side of the chart # will have some bid and ask lines missing as these orders were very likely created some blocks # earlier. So we also retrieve events from the blocks from the 24h before in order to minimize # the chance of it happening. block_lookback = 15*60*24 past_make = self.otc.past_make(self.arguments.past_blocks + block_lookback) past_take = self.otc.past_take(self.arguments.past_blocks + block_lookback) past_kill = self.otc.past_kill(self.arguments.past_blocks + block_lookback) def reduce_func(states, timestamp): if len(states) == 0: order_book = [] else: order_book = states[-1].order_book # apply all LogMake events having this timestamp for log_make in filter(lambda log_make: log_make.timestamp == timestamp, past_make): order_book = self.apply_make(order_book, log_make) order_book = list(filter(lambda order: order.maker == self.market_maker_address, order_book)) # apply all LogTake events having this timestamp for log_take in filter(lambda log_take: log_take.timestamp == timestamp, past_take): order_book = self.apply_take(order_book, log_take) # apply all LogKill events having this timestamp for log_kill in filter(lambda log_kill: log_kill.timestamp == timestamp, past_kill): order_book = self.apply_kill(order_book, log_kill) return states + [State(timestamp=timestamp, order_book=order_book, buy_token_address=self.buy_token_address, sell_token_address=self.sell_token_address)] event_timestamps = sorted(set(map(lambda event: event.timestamp, past_make + past_take + past_kill))) states_timestamps = self.tighten_timestamps(event_timestamps) + [end_timestamp] states = list(filter(lambda state: state.timestamp >= start_timestamp, reduce(reduce_func, states_timestamps, []))) states = sorted(states, key=lambda state: state.timestamp) prices = get_prices(self.arguments.gdax_price, self.arguments.price_feed, None, start_timestamp, end_timestamp) alternative_prices = get_prices(None, self.arguments.alternative_price_feed, None, start_timestamp, end_timestamp) takes = list(filter(lambda log_take: log_take.timestamp >= start_timestamp, past_take)) pair = self.arguments.sell_token + "-" + self.arguments.buy_token our_trades = our_oasis_trades(self.market_maker_address, self.buy_token_address, self.sell_token_address, takes, pair) all_trades = all_oasis_trades(self.buy_token_address, self.sell_token_address, takes, pair) draw_chart(start_timestamp, end_timestamp, prices, alternative_prices, 180, states, our_trades, all_trades, self.arguments.output)
def main(self): start_timestamp = get_block_timestamp(self.infura, self.web3.eth.blockNumber - self.arguments.past_blocks) end_timestamp = int(time.time()) events = self.exchange.past_fill(self.arguments.past_blocks, {'maker': self.market_maker_address.address}) trades = zrx_trades(self.infura, self.market_maker_address, 'DAI', self.buy_token_address, self.arguments.buy_token_decimals, 'WETH', self.sell_token_addresses, self.arguments.sell_token_decimals, events, '-') prices = get_prices(self.arguments.gdax_price, self.arguments.price_feed, None, start_timestamp, end_timestamp) alternative_prices = get_prices(None, self.arguments.alternative_price_feed, None, start_timestamp, end_timestamp) order_history = get_order_history(self.arguments.order_history, start_timestamp, end_timestamp) order_history = prepare_order_history_for_charting(order_history) draw_chart(start_timestamp, end_timestamp, prices, alternative_prices, 180, order_history, trades, [], self.arguments.output)
def main(self): start_timestamp = get_block_timestamp( self.infura, self.web3.eth.blockNumber - self.arguments.past_blocks) end_timestamp = int(time.time()) events = self.etherdelta.past_trade( self.arguments.past_blocks, {'get': self.market_maker_address.address}) trades = etherdelta_trades(self.infura, self.market_maker_address, self.sai_address, self.eth_address, events) prices = get_gdax_prices(self.arguments.gdax_price, start_timestamp, end_timestamp) draw_chart(start_timestamp, end_timestamp, prices, [], 180, [], trades, [], self.arguments.output)