Skip to content

Commit 4e11e25

Browse files
committed
Merge branch 'develop'
2 parents 3e80f79 + aeb76fe commit 4e11e25

File tree

4 files changed

+27
-25
lines changed

4 files changed

+27
-25
lines changed

Bot/ExchangeInfo.py

+14-20
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import datetime
12
from decimal import Decimal, ROUND_DOWN, ROUND_UP
23

34

@@ -67,35 +68,31 @@ def msg_mutliplier_range_error(self, current_price):
6768

6869
class ExchangeInfo:
6970
__shared_state = {}
71+
UPDATE_RATE_S = 30
7072

7173
def __init__(self):
7274
self.__dict__ = self.__shared_state
7375
if not self.__dict__:
74-
self.exchnage_info = {}
75-
self.symbols = set()
76+
self.symbols = {}
77+
self.last_updated = None
78+
79+
def need_update(self):
80+
if not self.last_updated:
81+
return True
82+
83+
return (datetime.now() - self.last_updated).seconds >= ExchangeInfo.UPDATE_RATE_S
7684

7785
def update(self, info):
78-
self.exchnage_info.update(info)
79-
self.symbols = set([s['symbol'] for s in self.exchnage_info['symbols']])
86+
self.symbols = {s['symbol']: s for s in info['symbols']}
87+
self.last_updated = datetime.now()
8088

8189
def symbol_info(self, symbol):
82-
symbol_info = None
83-
84-
for s in self.exchnage_info['symbols']:
85-
if s['symbol'] == symbol:
86-
symbol_info = s
87-
break
90+
symbol_info = self.symbols.get(symbol)
8891

8992
props = {}
9093
if symbol_info is None:
9194
raise KeyError('Symbol "{}" not found in the Exchnage makrets info'.format(symbol))
9295

93-
# for f in symbol_info['filters']:
94-
# props.update(f)
95-
#
96-
# props.pop('filterType', None)
97-
98-
9996
for f in symbol_info['filters']:
10097
filter_type = f['filterType']
10198
f.pop(filter_type, None)
@@ -106,8 +103,5 @@ def symbol_info(self, symbol):
106103
def has_symbol(self, symbol):
107104
return symbol in self.symbols
108105

109-
def has_all_symbol(self, symbols):
110-
return set(symbols) <= self.symbols
111-
112106
def get_all_symbols(self):
113-
return [{'s': s['symbol'], 'b': s['baseAsset']} for s in self.exchnage_info['symbols']]
107+
return [{'s': s, 'b': info['baseAsset']} for (s, info) in self.symbols.items()]

Bot/Strategy/TradingStrategy.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from os import environ
1+
from datetime import datetime
22

33
from binance.exceptions import BinanceAPIException
44

@@ -14,6 +14,8 @@
1414

1515

1616
class TradingStrategy(Logger):
17+
EXCHANGE_INFO_REFRESH_S = 60
18+
1719
def __init__(self,
1820
trade: Trade,
1921
fx: FXConnector,
@@ -25,6 +27,7 @@ def __init__(self,
2527
self.fx = fx
2628
self.balance: Balance = balance if balance else Balance()
2729
self._exchange_info = None
30+
self._exchange_info_last_update = datetime.now()
2831
self.simulate = Utils.is_simulation()
2932
self.trade_updated = trade_updated
3033
self.last_execution_price = 0
@@ -41,8 +44,10 @@ def __init__(self,
4144

4245
@property
4346
def exchange_info(self):
44-
if not self._exchange_info:
47+
if not self._exchange_info or \
48+
(datetime.now() - self._exchange_info_last_update).seconds >= TradingStrategy.EXCHANGE_INFO_REFRESH_S:
4549
self._exchange_info = ExchangeInfo().symbol_info(self.symbol())
50+
self._exchange_info_last_update = datetime.now()
4651

4752
return self._exchange_info
4853

Bot/Target.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ def __init__(self, price, vol='100%', **kvargs):
1515
self.id = kvargs.get('id')
1616
self.date = kvargs.get('date')
1717
self.status = OrderStatus(kvargs.get('status', OrderStatus.NEW.name).lower())
18-
self.sl = float(kvargs.get('sl', 0))
18+
sl_input = kvargs.get('sl', 0)
19+
self.sl = float(sl_input if sl_input else 0)
1920
self.smart = self.s2b(kvargs.get('smart', None))
2021
self.parent_smart = kvargs.get('parent_smart', None)
2122
self.best_price = float(kvargs.get('best_price', 0))

Bot/TradeHandler.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def add_new_strategy(self, strategy: TradingStrategy, listen_symbols=True):
110110

111111
# self.balances.update_balances(self.fx.get_all_balances_dict())
112112

113-
if not ExchangeInfo().has_all_symbol(self.strategies_dict.keys()):
113+
if ExchangeInfo().need_update():
114114
ExchangeInfo().update(self.fx.get_exchange_info())
115115

116116
if listen_symbols:
@@ -194,7 +194,9 @@ def listen_handler(self, msg):
194194
return
195195
elif d['e'] == '24hrTicker':
196196
self.trade_info_ticker_buf[d['s']] = {'b': float(d['b']), 'a': float(d['a'])}
197-
# delta = dt.now() - self.last_ts
197+
198+
if ExchangeInfo().need_update():
199+
ExchangeInfo().update(self.fx.get_exchange_info())
198200

199201
if (delta.seconds * 1000 + (delta).microseconds / 1000) > self.process_delay:
200202
self.last_ts = dt.now()

0 commit comments

Comments
 (0)