balance bid price between ask and last

This commit is contained in:
Janne Sinivirta 2017-09-17 23:21:46 +03:00
parent 989682457e
commit 465dc47b23
3 changed files with 27 additions and 2 deletions

View File

@ -138,6 +138,13 @@ def handle_trade(trade: Trade) -> None:
except ValueError: except ValueError:
logger.exception('Unable to handle open order') 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]: 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: else:
return None return None
open_rate = exchange.get_ticker(pair)['ask'] open_rate = get_target_bid(exchange.get_ticker(pair))
amount = stake_amount / open_rate amount = stake_amount / open_rate
order_id = exchange.buy(pair, open_rate, amount) order_id = exchange.buy(pair, open_rate, amount)

View File

@ -4,7 +4,7 @@ from unittest.mock import patch, MagicMock
from jsonschema import validate from jsonschema import validate
import exchange 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 misc import CONF_SCHEMA
from persistence import Trade from persistence import Trade
@ -20,6 +20,9 @@ class TestMain(unittest.TestCase):
"720": 0.01, "720": 0.01,
"0": 0.02 "0": 0.02
}, },
"bid_strategy": {
"ask_last_balance": 0.0
},
"bittrex": { "bittrex": {
"enabled": True, "enabled": True,
"key": "key", "key": "key",
@ -90,6 +93,18 @@ class TestMain(unittest.TestCase):
self.assertTrue(closed) self.assertTrue(closed)
self.assertEqual(trade.is_open, False) 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 @classmethod
def setUpClass(cls): def setUpClass(cls):
validate(cls.conf, CONF_SCHEMA) validate(cls.conf, CONF_SCHEMA)

View File

@ -28,6 +28,9 @@ class TestTelegram(unittest.TestCase):
"720": 0.01, "720": 0.01,
"0": 0.02 "0": 0.02
}, },
"bid_strategy": {
"ask_last_balance": 0.0
},
"bittrex": { "bittrex": {
"enabled": True, "enabled": True,
"key": "key", "key": "key",