]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/commitdiff
Fix dust amount error
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Mon, 26 Feb 2018 11:07:07 +0000 (12:07 +0100)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Mon, 26 Feb 2018 11:07:07 +0000 (12:07 +0100)
main.py
market.py
portfolio.py
test.py

diff --git a/main.py b/main.py
index 3cb7f4ad8a2051cf2dcdbccc96dcc02e7cab7d9e..17cf58c3ec740acd135710baf5152124119916ed 100644 (file)
--- a/main.py
+++ b/main.py
@@ -7,7 +7,6 @@ pg_config, report_path = helper.main_parse_config(args.config)
 
 for market_config, user_id in helper.main_fetch_markets(pg_config, args.user):
     try:
-        market_config["apiKey"] = market_config.pop("key")
         user_market = market.Market.from_config(market_config, debug=args.debug)
         helper.main_process_market(user_market, args.action, before=args.before, after=args.after)
     except Exception as e:
index 931de09e350c1a37b0bcd54baf312d433641a527..0cb3e67e5fc8bd1efd3542f4a06c6b0f08a46285 100644 (file)
--- a/market.py
+++ b/market.py
@@ -20,6 +20,8 @@ class Market:
 
     @classmethod
     def from_config(cls, config, debug=False):
+        config["apiKey"] = config.pop("key")
+
         ccxt_instance = ccxt.poloniexE(config)
 
         # For requests logging
index 43a39c4506c7caa6ba6fdbea4f48c5c6c10e4397..0797de0a0489542ce02c20863625d33a2bb3eab8 100644 (file)
@@ -3,7 +3,7 @@ from datetime import datetime, timedelta
 from decimal import Decimal as D, ROUND_DOWN
 from json import JSONDecodeError
 from simplejson.errors import JSONDecodeError as SimpleJSONDecodeError
-from ccxt import ExchangeError, ExchangeNotAvailable
+from ccxt import ExchangeError, ExchangeNotAvailable, InvalidOrder
 import requests
 
 # FIXME: correctly handle web call timeouts
@@ -532,7 +532,7 @@ class Order:
         else:
             try:
                 self.results.append(self.market.ccxt.create_order(symbol, 'limit', self.action, amount, price=self.rate, account=self.account))
-            except ExchangeNotAvailable:
+            except (ExchangeNotAvailable, InvalidOrder):
                 # Impossible to honor the order (dust amount)
                 self.status = "closed"
                 self.mark_finished_order()
diff --git a/test.py b/test.py
index 4ed04774645239f42026430a8e0ce7a9935a5dd9..52d737d7528f773261242e0830146415ddb1f487 100644 (file)
--- a/test.py
+++ b/test.py
@@ -571,7 +571,7 @@ class MarketTest(WebMockTestCase):
             ccxt.poloniexE.return_value = self.ccxt
             self.ccxt.session.request.return_value = "response"
 
-            m = market.Market.from_config("config")
+            m = market.Market.from_config({"key": "key", "secred": "secret"})
 
             self.assertEqual(self.ccxt, m.ccxt)
 
@@ -580,7 +580,7 @@ class MarketTest(WebMockTestCase):
             m.report.log_http_request.assert_called_with('GET', 'URL', 'data',
                     'headers', 'response')
 
-        m = market.Market.from_config("config", debug=True)
+        m = market.Market.from_config({"key": "key", "secred": "secret"}, debug=True)
         self.assertEqual(True, m.debug)
 
     def test_get_ticker(self):
@@ -2080,6 +2080,18 @@ class OrderTest(WebMockTestCase):
             self.assertEqual("closed", order.status)
             mark_finished_order.assert_called_once()
 
+        self.m.ccxt.create_order.reset_mock()
+        with self.subTest(dust_amount_exception=True),\
+                mock.patch.object(portfolio.Order, "mark_finished_order") as mark_finished_order:
+            order = portfolio.Order("buy", portfolio.Amount("ETH", 0.001),
+                    D("0.1"), "BTC", "long", self.m, "trade")
+            self.m.ccxt.create_order.side_effect = portfolio.InvalidOrder
+            order.run()
+            self.m.ccxt.create_order.assert_called_once()
+            self.assertEqual(0, len(order.results))
+            self.assertEqual("closed", order.status)
+            mark_finished_order.assert_called_once()
+
 
 @unittest.skipUnless("unit" in limits, "Unit skipped")
 class MouvementTest(WebMockTestCase):