Пример #1
0
    def choose_pair(
        self,
        timestamp: Timestamp,
        price_query: Callable[[Asset, Asset, Timestamp], FVal],
    ) -> TradePair:
        """Choose a random pair to trade from the available pairs at the selected timestamp"""
        choices = set(self.asset_pairs['result'].keys())
        found = False
        while len(choices) != 0:
            pair = random.choice(tuple(choices))
            choices.remove(pair)
            pair = kraken_to_world_pair(pair)
            base, quote = pair_get_assets(pair)
            kbase = base.to_kraken()
            kquote = quote.to_kraken()
            if kbase in self.balances_dict or kquote in self.balances_dict:
                # Before choosing make sure that at the selected timestamp both of
                # the pair assets exist (had a price)
                if not assets_exist_at_time(base, quote, timestamp,
                                            price_query):
                    continue
                found = True
                break

        if not found:
            raise ValueError(
                'Could not find a pair to trade with the current funds')
        return trade_pair_from_assets(base, quote)
Пример #2
0
def test_kraken_to_world_pair():
    assert kraken_to_world_pair('QTUMXBT') == 'QTUM_BTC'
    assert kraken_to_world_pair('ADACAD') == 'ADA_CAD'
    assert kraken_to_world_pair('BCHUSD') == 'BCH_USD'
    assert kraken_to_world_pair('DASHUSD') == 'DASH_USD'
    assert kraken_to_world_pair('XTZETH') == 'XTZ_ETH'
    assert kraken_to_world_pair('XXBTZGBP.d') == 'BTC_GBP'

    with pytest.raises(UnprocessableTradePair):
        kraken_to_world_pair('GABOOBABOO')
Пример #3
0
def test_kraken_to_world_pair(kraken):
    """Kraken does not consistently list its pairs so test here that most pairs work

    For example ETH can be ETH or XETH, BTC can be XXBT or XBT
    """
    # Some standard tests that should always pass
    assert kraken_to_world_pair('QTUMXBT') == 'QTUM_BTC'
    assert kraken_to_world_pair('ADACAD') == 'ADA_CAD'
    assert kraken_to_world_pair('BCHUSD') == 'BCH_USD'
    assert kraken_to_world_pair('DASHUSD') == 'DASH_USD'
    assert kraken_to_world_pair('XTZETH') == 'XTZ_ETH'
    assert kraken_to_world_pair('ETHDAI') == 'ETH_DAI'
    assert kraken_to_world_pair('SCXBT') == 'SC_BTC'
    assert kraken_to_world_pair('SCEUR') == 'SC_EUR'
    assert kraken_to_world_pair('WAVESUSD') == 'WAVES_USD'
    assert kraken_to_world_pair('XXBTZGBP.d') == 'BTC_GBP'
    assert kraken_to_world_pair('ETHCHF') == 'ETH_CHF'
    assert kraken_to_world_pair('XBTCHF') == 'BTC_CHF'
    assert kraken_to_world_pair('EURCAD') == 'EUR_CAD'
    assert kraken_to_world_pair('USDCHF') == 'USD_CHF'
    assert kraken_to_world_pair('EURJPY') == 'EUR_JPY'
    assert kraken_to_world_pair('LTCETH') == 'LTC_ETH'
    assert kraken_to_world_pair('LTCUSDT') == 'LTC_USDT'
    assert kraken_to_world_pair('XRPGBP') == 'XRP_GBP'
    assert kraken_to_world_pair('XRPUSDT') == 'XRP_USDT'
    assert kraken_to_world_pair('AUDJPY') == 'AUD_JPY'

    # now try to test all pairs that kraken returns and if one does not work note
    # down a test warning so that it can be fixed by us later
    pairs = kraken.api_query('AssetPairs').keys()
    for pair in pairs:
        try:
            kraken_to_world_pair(pair)
        except Exception:
            test_warnings.warn(UserWarning(
                f'Could not process kraken pair {pair}',
            ))

    # Finally test that wrong pairs raise proper exception
    with pytest.raises(UnprocessableTradePair):
        kraken_to_world_pair('GABOOBABOO')
Пример #4
0
def test_kraken_to_world_pair(kraken):
    """Kraken does not consistently list its pairs so test here that most pairs work

    For example ETH can be ETH or XETH, BTC can be XXBT or XBT
    """
    # Some standard tests that should always pass
    assert kraken_to_world_pair('QTUMXBT') == (A_QTUM, A_BTC)
    assert kraken_to_world_pair('ADACAD') == (A_ADA, A_CAD)
    assert kraken_to_world_pair('BCHUSD') == (A_BCH, A_USD)
    assert kraken_to_world_pair('DASHUSD') == (A_DASH, A_USD)
    assert kraken_to_world_pair('XTZETH') == (A_XTZ, A_ETH)
    assert kraken_to_world_pair('ETHDAI') == (A_ETH, A_DAI)
    assert kraken_to_world_pair('SCXBT') == (A_SC, A_BTC)
    assert kraken_to_world_pair('SCEUR') == (A_SC, A_EUR)
    assert kraken_to_world_pair('WAVESUSD') == (A_WAVES, A_USD)
    assert kraken_to_world_pair('XXBTZGBP.d') == (A_BTC, A_GBP)
    assert kraken_to_world_pair('ETHCHF') == (A_ETH, A_CHF)
    assert kraken_to_world_pair('XBTCHF') == (A_BTC, A_CHF)
    assert kraken_to_world_pair('EURCAD') == (A_EUR, A_CAD)
    assert kraken_to_world_pair('USDCHF') == (A_USD, A_CHF)
    assert kraken_to_world_pair('EURJPY') == (A_EUR, A_JPY)
    assert kraken_to_world_pair('LTCETH') == (A_LTC, A_ETH)
    assert kraken_to_world_pair('LTCUSDT') == (A_LTC, A_USDT)
    assert kraken_to_world_pair('XRPGBP') == (A_XRP, A_GBP)
    assert kraken_to_world_pair('XRPUSDT') == (A_XRP, A_USDT)
    assert kraken_to_world_pair('AUDJPY') == (A_AUD, A_JPY)
    assert kraken_to_world_pair('ETH2.SETH') == (A_ETH2, A_ETH)
    assert kraken_to_world_pair('EWTEUR') == (A_EWT, A_EUR)
    assert kraken_to_world_pair('EWTGBP') == (A_EWT, A_GBP)
    assert kraken_to_world_pair('EWTXBT') == (A_EWT, A_BTC)
    assert kraken_to_world_pair('OCEANEUR') == (A_OCEAN, A_EUR)
    assert kraken_to_world_pair('OCEANGBP') == (A_OCEAN, A_GBP)
    assert kraken_to_world_pair('OCEANUSD') == (A_OCEAN, A_USD)
    assert kraken_to_world_pair('OCEANXBT') == (A_OCEAN, A_BTC)

    # now try to test all pairs that kraken returns and if one does not work note
    # down a test warning so that it can be fixed by us later
    pairs = kraken.api_query('AssetPairs').keys()
    for pair in pairs:
        try:
            kraken_to_world_pair(pair)
        except (UnknownAsset, UnprocessableTradePair,
                DeserializationError) as e:
            test_warnings.warn(
                UserWarning(
                    f'Could not process kraken pair {pair} due to {str(e)}', ))

    # Finally test that wrong pairs raise proper exception
    with pytest.raises(UnprocessableTradePair):
        kraken_to_world_pair('GABOOBABOO')