Beispiel #1
0
 def test_valid(self):
     valid_price_queue = []
     valid_price_dict = {}
     for market in self.market_weight:
         if market not in self.orderbook:
             continue
         if len(self.orderbook[market]["bids"]) == 0 or \
                 len(self.orderbook[market]["asks"]) == 0:
             continue
         _price = (self.orderbook[market]["bids"][0][0] +
                   self.orderbook[market]["asks"][0][0]) / 2
         if self.market_weight[market]:
             valid_price_queue.append(_price)
         valid_price_dict[market] = _price
     valid_price = get_median(valid_price_queue)
     for market in list(self.orderbook.keys()):
         if market not in valid_price_dict:
             del self.orderbook[market]
             continue
         change = fabs(
             (valid_price_dict[market] - valid_price) / valid_price)
         # if offset more than 20%, this market is invalid
         if change > 0.2:
             del self.orderbook[market]
     # all market is invalid if we got valid market less than 2
     if len(self.orderbook) < 2:
         return False
     else:
         return True
Beispiel #2
0
    def compute_rate_cny(self):
        btc_ticker = self.data["ticker"].copy()
        # print(btc_ticker)
        self.remove_timeout(btc_ticker)
        rate_cny = {"CNY": 1.0}
        # rate_cny["BTC"] = price_btc["CNY"]
        # rate_cny["USD"] = price_btc["CNY"] / price_btc["USD"]

        rate = self.data["rate"]
        if len(rate) == 0:
            return
        rate_cny["USD"] = self.get_rate_cny_usd(rate)

        # rate_cny["BTC"] = 0.0
        # for asset in price_btc:
        #     rate_cny["BTC"] += price_btc[asset] * rate_cny[asset]
        # rate_cny["BTC"] /= len(price_btc)

        rate_source = {}
        for quote in ["CNY", "USD"]:
            for source in list(rate):
                for base in rate[source][quote]:
                    if base in rate_cny:
                        continue
                    if base not in rate_source:
                        rate_source[base] = []
                    _rate = rate[source][quote][base] * rate_cny[quote]
                    rate_source[base].append(_rate)
            for asset in rate_source:
                asset_rate = sum(rate_source[asset]) / float(
                    len(rate_source[asset]))
                for _rate in list(rate_source[asset]):
                    if fabs((_rate - asset_rate) / asset_rate) > 0.1:
                        asset_rate = None
                        break
                if asset_rate:
                    rate_cny[asset] = asset_rate

        rate_cny["TCNY"] = rate_cny["CNY"]
        rate_cny["TUSD"] = rate_cny["USD"]

        # rate_cny["CNY1.0"] = rate_cny["CNY"]
        # rate_cny["USD1.0"] = rate_cny["USD"]

        # print("rate_cny",rate_cny)
        # price_btc_queue = {"CNY": [], "USD": []}
        price_btc_queue = []
        price_btc = {}
        for name in btc_ticker:
            quote = btc_ticker[name]["quote"]
            if quote not in rate_cny:
                continue
            price_btc_queue.append(btc_ticker[name]["last"] * rate_cny[quote])
        if len(price_btc_queue) == 0:
            return
        price_btc = get_median(price_btc_queue)
        # print(price_btc, price_btc_queue)
        rate_cny["BTC"] = price_btc
        self.rate_cny = rate_cny
    def compute_rate_cny(self):
        btc_ticker = self.data["ticker"].copy()
        self.remove_timeout(btc_ticker)
        # price_btc_queue = {"CNY": [], "USD": []}
        price_btc_queue = {"USD": []}
        price_btc = {}
        for name in btc_ticker:
            quote = btc_ticker[name]["quote"]
            price_btc_queue[quote].append(btc_ticker[name]["last"])
        for asset in price_btc_queue:
            if len(price_btc_queue[asset]) == 0:
                return
            price_btc[asset] = get_median(price_btc_queue[asset])
        rate_cny = {"CNY": 1.0}
        # rate_cny["BTC"] = price_btc["CNY"]
        # rate_cny["USD"] = price_btc["CNY"] / price_btc["USD"]
        rate = self.data["rate"]
        if len(rate) == 0:
            return
        rate_yahoo = rate["yahoo"]

        rate_cny["USD"] = 1/rate_yahoo["USD"]["CNY"]
        rate_cny["BTC"] = price_btc["USD"] * rate_cny["USD"]

        _change = fabs(price_btc["USD"] - rate_yahoo["USD"]["BTC"]) / \
            rate_yahoo["USD"]["BTC"]
        if _change >= 0.1:  # BTC price different more than 10%
            return
        _change = fabs(rate_cny["USD"] - 1/rate_yahoo["USD"]["CNY"]) / \
            rate_cny["USD"]
        if _change >= 0.1:  # rate USD/CNY different more than 10%
            return
        rate_source = {}
        for quote in ["CNY", "USD"]:
            for source in list(rate):
                for base in rate[source][quote]:
                    if base in rate_cny:
                        continue
                    if base not in rate_source:
                        rate_source[base] = []
                    _rate = rate[source][quote][base] * rate_cny[quote]
                    rate_source[base].append(_rate)
            for asset in rate_source:
                asset_rate = sum(rate_source[asset])/float(len(rate_source[asset]))
                for _rate in list(rate_source[asset]):
                    if fabs((_rate - asset_rate)/asset_rate) > 0.1:
                        asset_rate = None
                        break
                if asset_rate:
                    rate_cny[asset] = asset_rate

        rate_cny["TCNY"] = rate_cny["CNY"]
        rate_cny["TUSD"] = rate_cny["USD"]
        self.rate_cny = rate_cny
Beispiel #4
0
 def get_match_result(self, order_bids, order_asks, price_list):
     bid_volume = ask_volume = 0
     median_price = get_median(price_list)
     for order in order_bids:
         if order[0] < median_price:
             break
         bid_volume += order[1]
     for order in order_asks:
         if order[0] > median_price:
             break
         ask_volume += order[1]
     return ([bid_volume, ask_volume, median_price])
 def get_match_result(self, order_bids, order_asks, price_list):
     bid_volume = ask_volume = 0
     median_price = get_median(price_list)
     for order in order_bids:
         if order[0] < median_price:
             break
         bid_volume += order[1]
     for order in order_asks:
         if order[0] > median_price:
             break
         ask_volume += order[1]
     return ([bid_volume, ask_volume, median_price])
Beispiel #6
0
 def get_rate_cny_usd(self, rate):
     rate_list = []
     if self.config['only_c2c_rate'] == True:
         for source in list(rate):
             if 'CNY' in rate[source]["USD"] and (source == "Binance"
                                                  or source == "Okex"):
                 rate_list.append(1 / rate[source]["USD"]["CNY"])
         if len(rate_list) == 0:
             for source in list(rate):
                 if 'CNY' in rate[source]["USD"]:
                     rate_list.append(1 / rate[source]["USD"]["CNY"])
     else:
         for source in list(rate):
             if 'CNY' in rate[source]["USD"]:
                 rate_list.append(1 / rate[source]["USD"]["CNY"])
     return get_median(rate_list)
 def test_valid(self):
     valid_price_queue = []
     valid_price_dict = {}
     for market in self.market_weight:
         if market not in self.orderbook:
             continue
         _price = (
             self.orderbook[market]["bids"][0][0] + self.
             orderbook[market]["asks"][0][0])/2
         if self.market_weight[market]:
             valid_price_queue.append(_price)
         valid_price_dict[market] = _price
     valid_price = get_median(valid_price_queue)
     for market in list(self.orderbook.keys()):
         change = fabs((valid_price_dict[market] - valid_price)/valid_price)
         # if offset more than 10%, this market is invalid
         if change > 0.1:
             del self.orderbook[market]
     # all market is invalid if we got valid market less than 2
     if len(self.orderbook) < 2:
         return False
     else:
         return True
    def compute_rate_cny(self):
        btc_ticker = self.data["ticker"].copy()
        self.remove_timeout(btc_ticker)
        price_btc_queue = {"CNY": [], "USD": []}
        price_btc = {}
        for name in btc_ticker:
            quote = btc_ticker[name]["quote"]
            price_btc_queue[quote].append(btc_ticker[name]["last"])
        for asset in price_btc_queue:
            if len(price_btc_queue[asset]) == 0:
                return
            price_btc[asset] = get_median(price_btc_queue[asset])
        rate_cny = {"CNY": 1.0}
        rate_cny["BTC"] = price_btc["CNY"]
        rate_cny["USD"] = price_btc["CNY"] / price_btc["USD"]
        rate = self.data["rate"]
        if len(rate) == 0:
            return
        rate_yahoo = rate["yahoo"]

        _change = fabs(price_btc["USD"] - rate_yahoo["USD"]["BTC"]) / \
            rate_yahoo["USD"]["BTC"]
        if _change >= 0.1:  # BTC price different more than 10%
            return
        _change = fabs(rate_cny["USD"] - 1/rate_yahoo["USD"]["CNY"]) / \
            rate_cny["USD"]
        if _change >= 0.1:  # rate USD/CNY different more than 10%
            return
        for quote in ["CNY", "USD"]:
            for base in rate_yahoo[quote]:
                if base not in rate_cny:
                    rate_cny[base] = rate_cny[quote] * rate_yahoo[quote][base]

        rate_cny["TCNY"] = rate_cny["CNY"]
        rate_cny["TUSD"] = rate_cny["USD"]
        self.rate_cny = rate_cny
Beispiel #9
0
 def get_rate_cny_usd(self, rate):
     rate_list = []
     for source in list(rate):
         if 'CNY' in rate[source]["USD"]:
             rate_list.append(1 / rate[source]["USD"]["CNY"])
     return get_median(rate_list)
Beispiel #10
0
 def test_get_median(self):
     assert get_median([1, 2, 3, 4]) == 2.5
     assert get_median([1, 2, 3]) == 2
     assert get_median([1]) == 1
     assert get_median([]) is None