From 465dc47b23bea453d4a310db53e9804caf57bb97 Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sun, 17 Sep 2017 23:21:46 +0300 Subject: [PATCH] balance bid price between ask and last --- main.py | 9 ++++++++- test/test_main.py | 17 ++++++++++++++++- test/test_telegram.py | 3 +++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 493be3494..be1cee447 100755 --- a/main.py +++ b/main.py @@ -138,6 +138,13 @@ def handle_trade(trade: Trade) -> None: except ValueError: logger.exception('Unable to handle open order') +def get_target_bid(ticker) -> float: + """ Calculates bid target between current ask price and last price """ + if ticker['ask'] < ticker['last']: + return ticker['ask'] + balance = _CONF['bid_strategy']['ask_last_balance'] + return ticker['ask'] + balance * (ticker['last'] - ticker['ask']) + def create_trade(stake_amount: float, _exchange: exchange.Exchange) -> Optional[Trade]: """ @@ -174,7 +181,7 @@ def create_trade(stake_amount: float, _exchange: exchange.Exchange) -> Optional[ else: return None - open_rate = exchange.get_ticker(pair)['ask'] + open_rate = get_target_bid(exchange.get_ticker(pair)) amount = stake_amount / open_rate order_id = exchange.buy(pair, open_rate, amount) diff --git a/test/test_main.py b/test/test_main.py index e4ee83de3..9ff4f97f2 100644 --- a/test/test_main.py +++ b/test/test_main.py @@ -4,7 +4,7 @@ from unittest.mock import patch, MagicMock from jsonschema import validate import exchange -from main import create_trade, handle_trade, close_trade_if_fulfilled, init +from main import create_trade, handle_trade, close_trade_if_fulfilled, init, get_target_bid from misc import CONF_SCHEMA from persistence import Trade @@ -20,6 +20,9 @@ class TestMain(unittest.TestCase): "720": 0.01, "0": 0.02 }, + "bid_strategy": { + "ask_last_balance": 0.0 + }, "bittrex": { "enabled": True, "key": "key", @@ -90,6 +93,18 @@ class TestMain(unittest.TestCase): self.assertTrue(closed) self.assertEqual(trade.is_open, False) + def test_balance_fully_ask_side(self): + with patch.dict('main._CONF', {'bid_strategy': {'ask_last_balance': 0.0}}): + self.assertEqual(get_target_bid({'ask': 20, 'last': 10}), 20) + + def test_balance_fully_last_side(self): + with patch.dict('main._CONF', {'bid_strategy': {'ask_last_balance': 1.0}}): + self.assertEqual(get_target_bid({'ask': 20, 'last': 10}), 10) + + def test_balance_when_last_bigger_than_ask(self): + with patch.dict('main._CONF', {'bid_strategy': {'ask_last_balance': 1.0}}): + self.assertEqual(get_target_bid({'ask': 5, 'last': 10}), 5) + @classmethod def setUpClass(cls): validate(cls.conf, CONF_SCHEMA) diff --git a/test/test_telegram.py b/test/test_telegram.py index 906df8e87..e7af1a876 100644 --- a/test/test_telegram.py +++ b/test/test_telegram.py @@ -28,6 +28,9 @@ class TestTelegram(unittest.TestCase): "720": 0.01, "0": 0.02 }, + "bid_strategy": { + "ask_last_balance": 0.0 + }, "bittrex": { "enabled": True, "key": "key",