Ejemplo n.º 1
0
    def rfab2_ots_to_csv(self, mm1_db: str, mm2_db: str, mm1_fee: float,
                         mm2_fee: float, target_currency: str, start_time: int,
                         end_time: int, depth: int):
        mm1_orderbook_col = self.mongo_client[mm1_db][target_currency +
                                                      "_orderbook"]
        mm2_orderbook_col = self.mongo_client[mm2_db][target_currency +
                                                      "_orderbook"]
        mm1_orderbook_cursor = mm1_orderbook_col.find({
            "requestTime": {
                "$gte": start_time,
                "$lte": end_time
            }
        }).sort([("requestTime", 1)])
        mm2_orderbook_cursor = mm2_orderbook_col.find({
            "requestTime": {
                "$gte": start_time,
                "$lte": end_time
            }
        }).sort([("requestTime", 1)])

        csv_writer = CsvWriter(
            "stat", "%s-%s_%s_OTS_in_CSV_%d_%d_%d_max-index" %
            (mm1_db, mm2_db, target_currency, start_time, end_time, depth),
            ("requestTime", "Trade type", "Spread in unit", "Buy Price",
             "Buy Index", "Sell Price", "Sell index", "Tradable Spread",
             "Tradable Qty"))

        mm1_count = mm1_orderbook_cursor.count()
        mm2_count = mm2_orderbook_cursor.count()

        if mm1_count != mm2_count:
            Global.request_time_validation_on_cursor_count_diff(
                mm1_orderbook_cursor, mm2_orderbook_cursor)
        else:
            print("number of 'mm1 and mm2 requestTime' matched perfectly!!")

        for mm1_ob, mm2_ob in zip(mm1_orderbook_cursor, mm2_orderbook_cursor):

            requesttime = mm1_ob["requestTime"]
            (new_unit_spread, rev_unit_spread, opt_new_spread, opt_rev_spread,
             opt_new_buy_price, opt_new_buy_index, opt_new_sell_price, opt_new_sell_index, new_traded_qty,
             opt_rev_buy_price, opt_rev_buy_index, opt_rev_sell_price, opt_rev_sell_index, rev_traded_qty) = \
                BasicAnalyzer.optimized_tradable_spread_strategy(mm1_ob, mm2_ob, mm1_fee, mm2_fee, depth)

            result = [requesttime]
            if opt_new_spread >= 0:
                result.extend([
                    "NEW", new_unit_spread, opt_new_buy_price,
                    opt_new_buy_index, opt_new_sell_price, opt_new_sell_index,
                    opt_new_spread, new_traded_qty
                ])
                csv_writer.write_joinable(result)
            elif opt_rev_spread >= 0:
                result.extend([
                    "REV", rev_unit_spread, opt_rev_buy_price,
                    opt_rev_buy_index, opt_rev_sell_price, opt_rev_sell_index,
                    opt_rev_spread, rev_traded_qty
                ])
                csv_writer.write_joinable(result)
        csv_writer.close()
Ejemplo n.º 2
0
    def save_processed_info(self, target_db: str, target_currency: str,
                            start_time: int, end_time: int):
        ticker_col = self.mongo_client[target_db][target_currency + "_ticker"]
        orderbook_col = self.mongo_client[target_db][target_currency +
                                                     "_orderbook"]
        ticker_cursor = ticker_col.find({
            "requestTime": {
                "$gte": start_time,
                "$lte": end_time
            }
        }).sort([("requestTime", 1)])
        orderbook_cursor = orderbook_col.find({
            "requestTime": {
                "$gte": start_time,
                "$lte": end_time
            }
        }).sort([("requestTime", 1)])

        ticker_count = ticker_cursor.count()
        orderbook_count = orderbook_cursor.count()

        csv_writer = CsvWriter(
            "stat", "%s_%s_processed_%d_%d" %
            (target_db, target_currency, start_time, end_time),
            ("requestTime", "ticker", "midPrice", "minAsk", "maxBid"))

        if ticker_count != orderbook_count:
            Global.request_time_validation_on_cursor_count_diff(
                ticker_cursor, orderbook_cursor)

        for ticker, orderbook in zip(ticker_cursor, orderbook_cursor):
            request_time = int(ticker["requestTime"])
            last = int(ticker["last"].to_decimal())
            mid_price, minask, maxbid = BasicAnalyzer.get_orderbook_mid_price(
                orderbook)
            csv_writer.write_joinable(
                (request_time, last, mid_price, minask, maxbid))

        csv_writer.close()