Skip to content

Commit d075590

Browse files
committed
refactor averages to use fixed len
1 parent 2fb08e1 commit d075590

File tree

2 files changed

+45
-25
lines changed

2 files changed

+45
-25
lines changed

app.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from requests.exceptions import ReadTimeout, ConnectionError
2121
from tenacity import retry, wait_exponential
2222
from numpy import mean
23+
from collections import deque
2324

2425
def timing(f):
2526
@wraps(f)
@@ -89,10 +90,16 @@ def __init__(
8990
self.profit = float(0)
9091
self.soft_limit_holding_time: int = int(soft_limit_holding_time)
9192
self.hard_limit_holding_time: int = int(hard_limit_holding_time)
93+
# TODO: this must support PAUSE times
9294
self.averages: dict = {
93-
"s": [],
94-
"m": [],
95-
"h": [],
95+
"counters": {
96+
"s": 0,
97+
"m": 0,
98+
"h": 0,
99+
},
100+
"s": deque([], maxlen=60),
101+
"m": deque([], maxlen=60),
102+
"h": deque([], maxlen=24),
96103
"d": [],
97104
}
98105

@@ -135,21 +142,24 @@ def update(self, date: str, market_price: float) -> None:
135142

136143

137144
self.averages['s'].append(market_price)
145+
self.averages['counters']['s'] += 1
138146

139147
# TODO: this needs to work with PAUSE values
140-
if len(self.averages['s']) == 60:
148+
if self.averages['counters']['s'] == 60:
141149
last_s_avg = mean(self.averages['s'])
142-
self.averages['s'] = []
150+
self.averages['counters']['s'] = 0
143151
self.averages['m'].append(last_s_avg)
152+
self.averages['counters']['m'] += 1
144153

145-
if len(self.averages['m']) == 60:
154+
if self.averages['counters']['m'] == 60:
146155
last_m_avg = mean(self.averages['m'])
147-
self.averages['m'] = []
156+
self.averages['counters']['m'] = 0
148157
self.averages['h'].append(last_m_avg)
158+
self.averages['counters']['h'] += 1
149159

150-
if len(self.averages['h']) == 24:
160+
if self.averages['counters']['h'] == 24:
151161
last_h_avg = mean(self.averages['h'])
152-
self.averages['h'] = []
162+
self.averages['counters']['h'] = 0
153163
self.averages['d'].append(last_h_avg)
154164

155165

tests/test_bot.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -115,38 +115,48 @@ def test_update_coin_updates_seconds_averages(self, coin):
115115
coin.update('now', 120.00)
116116
assert 120.00 in coin.averages['s']
117117
assert len(coin.averages['s']) == 1
118+
assert coin.averages['counters']['s'] == 1
119+
assert list(coin.averages['s']) == [120.0]
118120

119121
def test_update_coin_updates_minutes_averages(self, coin):
120122
for x in range(60):
121123
coin.update('now', 100)
122124

123-
assert len(coin.averages['s']) == 0
125+
assert coin.averages['counters']['s'] == 0
126+
assert len(coin.averages['s']) == 60
127+
128+
assert coin.averages['counters']['m'] == 1
124129
assert len(coin.averages['m']) == 1
125-
assert coin.averages['s'] == []
126-
assert coin.averages['m'] == [100.0]
130+
131+
assert list(coin.averages['s']) == [100 for x in range(60)]
132+
assert list(coin.averages['m']) == [100.0]
127133

128134
def test_update_coin_updates_hour_averages(self, coin):
129135
for x in range(3600):
130136
coin.update('now', 100)
131137

132-
assert coin.averages['s'] == []
133-
assert coin.averages['m'] == []
134-
assert coin.averages['h'] == [100.0]
135-
assert len(coin.averages['s']) == 0
136-
assert len(coin.averages['m']) == 0
137-
assert len(coin.averages['h']) == 1
138+
assert coin.averages['counters']['s'] == 0
139+
assert list(coin.averages['s']) == [100 for x in range(60)]
140+
141+
assert coin.averages['counters']['m'] == 0
142+
assert list(coin.averages['m']) == [100 for x in range(60)]
143+
144+
assert coin.averages['counters']['h'] == 1
145+
assert list(coin.averages['h']) == [100.0]
138146

139147
def test_update_coin_updates_days_averages(self, coin):
140148
for x in range(86400):
141149
coin.update('now', 100)
142150

143-
assert coin.averages['s'] == []
144-
assert coin.averages['m'] == []
145-
assert coin.averages['h'] == []
146-
assert coin.averages['d'] == [100.0]
147-
assert len(coin.averages['s']) == 0
148-
assert len(coin.averages['m']) == 0
149-
assert len(coin.averages['h']) == 0
151+
assert coin.averages['counters']['s'] == 0
152+
assert list(coin.averages['s']) == [100 for x in range(60)]
153+
154+
assert coin.averages['counters']['m'] == 0
155+
assert list(coin.averages['m']) == [100 for x in range(60)]
156+
157+
assert coin.averages['counters']['h'] == 0
158+
assert list(coin.averages['h']) == [100 for x in range(24)]
159+
150160
assert len(coin.averages['d']) == 1
151161

152162
class TestBot:

0 commit comments

Comments
 (0)