Ejemplo n.º 1
0
    def test_create_portfolio_needs_balancing3(self):
        exchange = DummyExchange(self.targets.keys(), self.balances)
        portfolio = Portfolio.make_portfolio(self.targets2,
                                             exchange,
                                             threshold=20)

        self.assertFalse(portfolio.needs_balancing)
Ejemplo n.º 2
0
    def test_base_differences_start_xrp_xlm_usdt_rates(self):

        targets = {
            'XRP': 50,
            'XLM': 40,
            'USDT': 10,
        }
        current = {
            'XRP': 100,
            'XLM': 100,
            'USDT': 50,
        }
        rates = {
            'XRP/USDT': 0.1,
            'XLM/USDT': 0.4,
        }

        exchange = DummyExchange(targets.keys(), current, rates)
        portfolio = Portfolio.make_portfolio(targets, exchange)

        expected = {
            'XRP': 40,
            'XLM': 0,
            'USDT': -40,
        }
        self.assertEqual(portfolio.differences_quote, expected)
Ejemplo n.º 3
0
    def test_run_trade(self):
        targets = {
            'XRP': 45,
            'XLM': 45,
            'USDT': 10,
        }
        current = {'XRP': 400, 'XLM': 400, 'USDT': 200}
        rates = {
            'XRP/USDT': 1.0,
            'XLM/USDT': 1.0,
            'XLM/XRP': 1.0,
        }

        exchange = DummyExchange(targets.keys(), current, rates, 0.001)
        portfolio = Portfolio.make_portfolio(targets, exchange)
        balancer = SimpleBalancer()
        executor = Executor(portfolio, exchange, balancer)

        res = executor.run(force=True, trade=True)

        # Test the orders we get are correct
        expected = [
            Order('XLM/USDT', 'BUY', 50, 1.0),
            Order('XRP/USDT', 'BUY', 50, 1.0),
        ]
        self.assertEqual(res['orders'], expected)

        self.assertEqual(exchange.balances['XRP'], 449.95)
        self.assertEqual(exchange.balances['XLM'], 449.95)
        self.assertEqual(exchange.balances['USDT'], 100)
Ejemplo n.º 4
0
    def test_create_portfolio_defaults(self):
        exchange = DummyExchange(self.targets.keys(), self.targets)
        portfolio = Portfolio.make_portfolio(self.targets, exchange)

        self.assertEqual(portfolio.threshold, 1.0)
        self.assertEqual(portfolio.quote_currency, 'USDT')
        self.assertEqual(portfolio.exchange, exchange)
        self.assertEqual(portfolio.targets, self.targets)
Ejemplo n.º 5
0
    def test_create_portfolio_custom(self):
        exchange = DummyExchange(self.targets.keys(), self.targets)
        portfolio = Portfolio.make_portfolio(self.targets, exchange, 2.0,
                                             'BTC')

        self.assertEqual(portfolio.threshold, 2.0)
        self.assertEqual(portfolio.quote_currency, 'BTC')
        self.assertEqual(portfolio.exchange, exchange)
        self.assertEqual(portfolio.targets, self.targets)
Ejemplo n.º 6
0
    def test_create_portfolio_differences_quote2(self):
        exchange = DummyExchange(self.targets.keys(), self.balances)
        portfolio = Portfolio.make_portfolio(self.targets2, exchange)

        expected = {
            'XRP': -50,
            'XLM': -50,
            'USDT': 100,
        }

        self.assertEqual(portfolio.differences_quote, expected)
Ejemplo n.º 7
0
    def execute(self,
                targets,
                current,
                rates,
                fee=0.001,
                max_orders=5,
                mode='mid'):
        exchange = DummyExchange(targets.keys(), current, rates, fee)
        portfolio = Portfolio.make_portfolio(targets, exchange)

        balancer = SimpleBalancer()
        return balancer.balance(portfolio,
                                exchange,
                                max_orders=max_orders,
                                mode=mode)
Ejemplo n.º 8
0
    def test_base_differences_start_xrp_xlm_usdt_rates3(self):

        targets = {
            'XRP': 45,
            'XLM': 45,
            'USDT': 10,
        }
        current = {
            'XRP': 40,
            'XLM': 40,
            'USDT': 20,
        }
        rates = {
            'XRP/USDT': 0.5,
            'XLM/USDT': 0.5,
            'USDT/USDT': 1.0,
        }

        exchange = DummyExchange(targets.keys(), current, rates)
        portfolio = Portfolio.make_portfolio(targets, exchange)

        expected = {
            'XRP': 7,
            'XLM': 7,
            'USDT': -14,
        }
        self.assertEqual(portfolio.differences_quote, expected)

        final_base = {}
        final_targets = {}
        total_base = 0
        for cur in current:
            symbol = "{}/{}".format(cur, portfolio.quote_currency)
            final_base[cur] = current[cur] * exchange.rates[symbol]['mid']
            final_base[cur] += portfolio.differences_quote[cur]
            total_base += final_base[cur]

        for cur in final_base:
            final_targets[cur] = (final_base[cur] / total_base) * 100

        self.assertEqual(targets, final_targets)
Ejemplo n.º 9
0
 def create_executor(self, targets, current, rates, fee=0.001):
     exchange = DummyExchange(targets.keys(), current, rates, fee)
     portfolio = Portfolio.make_portfolio(targets, exchange)
     balancer = SimpleBalancer()
     executor = Executor(portfolio, exchange, balancer)
     return executor
Ejemplo n.º 10
0
    def test_create_portfolio_needs_balancing2(self):
        exchange = DummyExchange(self.targets.keys(), self.balances)
        portfolio = Portfolio.make_portfolio(self.targets2, exchange)

        self.assertTrue(portfolio.needs_balancing)
Ejemplo n.º 11
0
    def test_create_portfolio_metric_zero(self):
        exchange = DummyExchange(self.targets.keys(), self.zero_balances)
        portfolio = Portfolio.make_portfolio(self.targets, exchange)

        self.assertEqual(portfolio.balance_rms_error, 0)
Ejemplo n.º 12
0
    def test_create_portfolio_metric2(self):
        exchange = DummyExchange(self.targets.keys(), self.balances)
        portfolio = Portfolio.make_portfolio(self.targets2, exchange)

        self.assertAlmostEqual(portfolio.balance_rms_error, 7.071067, 5)
Ejemplo n.º 13
0
    def test_create_portfolio_balances_pct_zero(self):
        exchange = DummyExchange(self.targets.keys(), self.zero_balances)
        portfolio = Portfolio.make_portfolio(self.targets, exchange)

        self.assertEqual(portfolio.balances_pct, self.zero_balances)
        self.assertNotEqual(portfolio.balances_pct, self.targets)
Ejemplo n.º 14
0
    def test_create_portfolio_valuation_quote(self):
        exchange = DummyExchange(self.targets.keys(), self.balances)
        portfolio = Portfolio.make_portfolio(self.targets, exchange)

        self.assertEqual(portfolio.valuation_quote, 1000)
Ejemplo n.º 15
0
 def setUp(self):
     balances = {'XRP': 100.0, 'BTC': 200.0, 'USDT': 300.0}
     rates = {'XRP/USDT': 0.33, 'BTC/USDT': 3500.0}
     self.exchange = DummyExchange(balances.keys(), balances, rates)
Ejemplo n.º 16
0
class test_DummyExchange(unittest.TestCase):
    def setUp(self):
        balances = {'XRP': 100.0, 'BTC': 200.0, 'USDT': 300.0}
        rates = {'XRP/USDT': 0.33, 'BTC/USDT': 3500.0}
        self.exchange = DummyExchange(balances.keys(), balances, rates)

    def test_balances(self):
        self.assertEqual(self.exchange.balances['XRP'], 100)
        self.assertEqual(self.exchange.balances['BTC'], 200)
        self.assertEqual(self.exchange.balances['USDT'], 300)

    def test_pairs(self):
        expected = [
            'XRP/XRP', 'XRP/BTC', 'XRP/USDT', 'BTC/XRP', 'BTC/BTC', 'BTC/USDT',
            'USDT/XRP', 'USDT/BTC', 'USDT/USDT'
        ]
        self.assertEqual(self.exchange.pairs, expected)

    def test_execute_buy(self):
        order = Order('XRP/USDT', 'BUY', 10, 0.32)
        self.exchange.execute_order(order)
        self.assertEqual(self.exchange.balances['XRP'], 109.99)
        self.assertEqual(self.exchange.balances['BTC'], 200.0)
        self.assertEqual(self.exchange.balances['USDT'], 296.8)

    def test_execute_sell(self):
        order = Order('BTC/USDT', 'SELL', 0.01, 3500)
        self.exchange.execute_order(order)
        self.assertEqual(self.exchange.balances['XRP'], 100.00)
        self.assertEqual(self.exchange.balances['BTC'], 199.99)
        self.assertEqual(self.exchange.balances['USDT'], 334.965)

    def test_execute_buy_toomuch1(self):
        order = Order('XRP/USDT', 'BUY', 1000, 0.32)
        with self.assertRaises(ValueError):
            self.exchange.execute_order(order)

    def test_execute_sell_toomuch2(self):
        order = Order('BTC/USDT', 'SELL', 1000, 3500)
        with self.assertRaises(ValueError):
            self.exchange.execute_order(order)

    def test_preprocess_order_true(self):
        order = Order('XRP/USDT', 'BUY', 50, 0.32)
        self.assertEqual(self.exchange.preprocess_order(order), order)

    def test_preprocess_order_false(self):
        order = Order('XRP/USDT', 'BUY', 0.1, 0.32)
        self.assertIsNone(self.exchange.preprocess_order(order))

    def test_preprocess_order_bad(self):
        order = Order('ZEC/USDT', 'BUY', 10, 0.32)
        self.assertIsNone(self.exchange.preprocess_order(order))