Esempio n. 1
0
    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 = int(time.time() - to_seconds(self.arguments.past))
        end_timestamp = int(time.time())

        our_trades = get_trades(self.arguments.our_trades, start_timestamp, end_timestamp)
        all_trades = get_trades(self.arguments.all_trades, start_timestamp, end_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)

        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, self.arguments.price_gap_size, order_history, our_trades, all_trades, self.arguments.output)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    def main(self):
        start_timestamp = int(time.time() - to_seconds(self.arguments.past))
        end_timestamp = int(time.time())

        trades = sort_trades_for_pnl(
            get_trades(self.arguments.our_trades, start_timestamp,
                       end_timestamp))
        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)