aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2018-01-18 01:00:57 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2018-01-18 01:00:57 +0100
commitf2da658998b6e6605c6ae27ff338ef23b96dce25 (patch)
treed6b720cdb6af89859c8bdde9b13bdf8d634b4ee8
parent183a53e3be74fabf501eaff19a39a47f1a6c9af5 (diff)
downloadTrader-f2da658998b6e6605c6ae27ff338ef23b96dce25.tar.gz
Trader-f2da658998b6e6605c6ae27ff338ef23b96dce25.tar.zst
Trader-f2da658998b6e6605c6ae27ff338ef23b96dce25.zip
Add Balance class tests
-rw-r--r--portfolio.py11
-rw-r--r--test.py142
-rw-r--r--test_portfolio.json356
3 files changed, 502 insertions, 7 deletions
diff --git a/portfolio.py b/portfolio.py
index a4fbf94..1d8bfd5 100644
--- a/portfolio.py
+++ b/portfolio.py
@@ -221,6 +221,10 @@ class Balance:
221 self.used = Amount(currency, used_value) 221 self.used = Amount(currency, used_value)
222 222
223 @classmethod 223 @classmethod
224 def from_hash(cls, currency, hash_):
225 return cls(currency, hash_["total"], hash_["free"], hash_["used"])
226
227 @classmethod
224 def in_currency(cls, other_currency, market, action="average", type="total"): 228 def in_currency(cls, other_currency, market, action="average", type="total"):
225 amounts = {} 229 amounts = {}
226 for currency in cls.known_balances: 230 for currency in cls.known_balances:
@@ -235,10 +239,6 @@ class Balance:
235 return cls.known_balances.keys() 239 return cls.known_balances.keys()
236 240
237 @classmethod 241 @classmethod
238 def from_hash(cls, currency, hash_):
239 return cls(currency, hash_["total"], hash_["free"], hash_["used"])
240
241 @classmethod
242 def _fill_balances(cls, hash_): 242 def _fill_balances(cls, hash_):
243 for key in hash_: 243 for key in hash_:
244 if key in ["info", "free", "used", "total"]: 244 if key in ["info", "free", "used", "total"]:
@@ -270,9 +270,6 @@ class Balance:
270 new_repartition = cls.dispatch_assets(total_base_value) 270 new_repartition = cls.dispatch_assets(total_base_value)
271 Trade.compute_trades(values_in_base, new_repartition, market=market) 271 Trade.compute_trades(values_in_base, new_repartition, market=market)
272 272
273 def __int__(self):
274 return int(self.total)
275
276 def __repr__(self): 273 def __repr__(self):
277 return "Balance({} [{}/{}/{}])".format(self.currency, str(self.free), str(self.used), str(self.total)) 274 return "Balance({} [{}/{}/{}])".format(self.currency, str(self.free), str(self.used), str(self.total))
278 275
diff --git a/test.py b/test.py
index 21077a3..d10bfe4 100644
--- a/test.py
+++ b/test.py
@@ -251,5 +251,147 @@ class PortfolioTest(unittest.TestCase):
251 def tearDown(self): 251 def tearDown(self):
252 self.patcher.stop() 252 self.patcher.stop()
253 253
254class BalanceTest(unittest.TestCase):
255 def setUp(self):
256 super(BalanceTest, self).setUp()
257
258 self.fetch_balance = {
259 "free": "foo",
260 "info": "bar",
261 "used": "baz",
262 "total": "bazz",
263 "USDT": {
264 "free": 6.0,
265 "used": 1.2,
266 "total": 7.2
267 },
268 "XVG": {
269 "free": 16,
270 "used": 0.0,
271 "total": 16
272 },
273 "XMR": {
274 "free": 0.0,
275 "used": 0.0,
276 "total": 0.0
277 },
278 }
279 self.patcher = mock.patch.multiple(portfolio.Balance, known_balances={}, trades={})
280 self.patcher.start()
281
282 def test_values(self):
283 balance = portfolio.Balance("BTC", 0.65, 0.35, 0.30)
284 self.assertEqual(0.65, balance.total.value)
285 self.assertEqual(0.35, balance.free.value)
286 self.assertEqual(0.30, balance.used.value)
287 self.assertEqual("BTC", balance.currency)
288
289 balance = portfolio.Balance.from_hash("BTC", { "total": 0.65, "free": 0.35, "used": 0.30})
290 self.assertEqual(0.65, balance.total.value)
291 self.assertEqual(0.35, balance.free.value)
292 self.assertEqual(0.30, balance.used.value)
293 self.assertEqual("BTC", balance.currency)
294
295 @mock.patch.object(portfolio.Amount, "get_ticker")
296 def test_in_currency(self, get_ticker):
297 portfolio.Balance.known_balances = {
298 "BTC": portfolio.Balance("BTC", 0.65, 0.35, 0.30),
299 "ETH": portfolio.Balance("ETH", 3, 3, 0),
300 }
301 market = mock.Mock()
302 get_ticker.return_value = {
303 "bid": 0.09,
304 "ask": 0.11,
305 "average": 0.1,
306 }
307
308 amounts = portfolio.Balance.in_currency("BTC", market)
309 self.assertEqual("BTC", amounts["ETH"].currency)
310 self.assertEqual(0.65, amounts["BTC"].value)
311 self.assertEqual(0.30, amounts["ETH"].value)
312
313 amounts = portfolio.Balance.in_currency("BTC", market, action="bid")
314 self.assertEqual(0.65, amounts["BTC"].value)
315 self.assertEqual(0.27, amounts["ETH"].value)
316
317 amounts = portfolio.Balance.in_currency("BTC", market, action="bid", type="used")
318 self.assertEqual(0.30, amounts["BTC"].value)
319 self.assertEqual(0, amounts["ETH"].value)
320
321 def test_currencies(self):
322 portfolio.Balance.known_balances = {
323 "BTC": portfolio.Balance("BTC", 0.65, 0.35, 0.30),
324 "ETH": portfolio.Balance("ETH", 3, 3, 0),
325 }
326 self.assertListEqual(["BTC", "ETH"], list(portfolio.Balance.currencies()))
327
328 @mock.patch.object(portfolio.market, "fetch_balance")
329 def test_fetch_balances(self, fetch_balance):
330 fetch_balance.return_value = self.fetch_balance
331
332 portfolio.Balance.fetch_balances(portfolio.market)
333 self.assertNotIn("XMR", portfolio.Balance.currencies())
334 self.assertEqual(["USDT", "XVG"], list(portfolio.Balance.currencies()))
335
336 @mock.patch.object(portfolio.Portfolio, "repartition_pertenthousand")
337 @mock.patch.object(portfolio.market, "fetch_balance")
338 def test_dispatch_assets(self, fetch_balance, repartition):
339 fetch_balance.return_value = self.fetch_balance
340 portfolio.Balance.fetch_balances(portfolio.market)
341
342 self.assertNotIn("XEM", portfolio.Balance.currencies())
343
344 repartition.return_value = {
345 "XEM": 7500,
346 "BTC": 2600,
347 }
348
349 amounts = portfolio.Balance.dispatch_assets(portfolio.Amount("BTC", 10.1))
350 self.assertIn("XEM", portfolio.Balance.currencies())
351 self.assertEqual(2.6, amounts["BTC"].value)
352 self.assertEqual(7.5, amounts["XEM"].value)
353
354 @mock.patch.object(portfolio.Portfolio, "repartition_pertenthousand")
355 @mock.patch.object(portfolio.Amount, "get_ticker")
356 @mock.patch.object(portfolio.Trade, "compute_trades")
357 def test_prepare_trades(self, compute_trades, get_ticker, repartition):
358 repartition.return_value = {
359 "XEM": 7500,
360 "BTC": 2500,
361 }
362 get_ticker.side_effect = [
363 { "average": 0.0001 },
364 { "average": 0.000001 }
365 ]
366 market = mock.Mock()
367 market.fetch_balance.return_value = {
368 "USDT": {
369 "free": 10000.0,
370 "used": 0.0,
371 "total": 10000.0
372 },
373 "XVG": {
374 "free": 10000.0,
375 "used": 0.0,
376 "total": 10000.0
377 },
378 }
379 portfolio.Balance.prepare_trades(market)
380 compute_trades.assert_called()
381
382 call = compute_trades.call_args
383 self.assertEqual(market, call[1]["market"])
384 self.assertEqual(1, call[0][0]["USDT"].value)
385 self.assertEqual(0.01, call[0][0]["XVG"].value)
386 self.assertEqual(0.2525, call[0][1]["BTC"].value)
387 self.assertEqual(0.7575, call[0][1]["XEM"].value)
388
389 def test__repr(self):
390 balance = portfolio.Balance("BTX", 3, 1, 2)
391 self.assertEqual("Balance(BTX [1.00000000 BTX/2.00000000 BTX/3.00000000 BTX])", repr(balance))
392
393 def tearDown(self):
394 self.patcher.stop()
395
254if __name__ == '__main__': 396if __name__ == '__main__':
255 unittest.main() 397 unittest.main()
diff --git a/test_portfolio.json b/test_portfolio.json
new file mode 100644
index 0000000..a2ba3f0
--- /dev/null
+++ b/test_portfolio.json
@@ -0,0 +1,356 @@
1{
2 "portfolio_1": {
3 "holding": {
4 "logo": [
5 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/ETC.png' title='Ethereum Classic'></img>",
6 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/USDT.png' title='Tether'></img>",
7 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/GAS.png' title='Gas'></img>",
8 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/BTC.png' title='Bitcoin'></img>",
9 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/ETH.png' title='Ethereum'></img>",
10 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/FCT.png' title='Factoids'></img>"
11 ],
12 "direction": [
13 "long",
14 "long",
15 "long",
16 "long",
17 "long",
18 "long"
19 ],
20 "weight": [
21 11.27,
22 12.26,
23 13.08,
24 14.29,
25 15.69,
26 33.41
27 ],
28 "bid_ask_spread": [
29 0.669,
30 0.243,
31 0.301,
32 0.243,
33 0.094,
34 0
35 ],
36 "holding_time": [
37 1,
38 1,
39 1,
40 274,
41 1,
42 1
43 ],
44 "weekly_return_usdt": [
45 -0.2515,
46 0,
47 0.0266,
48 -0.1353,
49 -0.2352,
50 -0.315
51 ],
52 "_row": [
53 "Ethereum C (ETC)",
54 "Tether (USDT)",
55 "Gas (GAS)",
56 "Bitcoin (BTC)",
57 "Ethereum (ETH)",
58 "Factoids (FCT)"
59 ]
60 },
61 "weights": {
62 "USDT": [ 0, 0, 0, 0, 0, 0, 0.1577, 0.1083, 0, 0.1226 ],
63 "AMP": [ 0, 0, 0.1854, 0, 0, 0, 0, 0, 0, 0 ],
64 "ARDR": [ 0, 0, 0, 0.0718, 0, 0, 0, 0, 0, 0 ],
65 "BBR": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
66 "BCH": [ 0.1126, 0.0386, 0, 0, 0, 0, 0, 0, 0, 0 ],
67 "BCN": [ 0, 0, 0, 0, 0, 0.1467, 0, 0, 0, 0 ],
68 "BCY": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
69 "BELA": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
70 "BLK": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
71 "BTC": [ 0.1667, 0.2857, 0.2857, 0.2857, 0.2857, 0.2857, 0.1429, 0.1429, 0.2857, 0.1429 ],
72 "BTCD": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
73 "BTM": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
74 "BTS": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
75 "BTSs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
76 "BURST": [ 0, 0, 0, 0, 0.2959, 0, 0, 0, 0, 0 ],
77 "CLAM": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
78 "CLAMs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
79 "CURE": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
80 "DASH": [ 0.0919, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
81 "DASHs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
82 "DCR": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
83 "DGB": [ 0, 0, 0, 0, 0, 0, 0.1177, 0, 0.1015, 0 ],
84 "DOGE": [ 0, 0, 0, 0, 0, 0.1092, 0.2092, 0, 0.1805, 0 ],
85 "DOGEs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
86 "EMC2": [ 0, 0, 0, 0, 0, 0.3456, 0, 0, 0, 0 ],
87 "ETC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1127 ],
88 "ETH": [ 0.3568, 0, 0, 0, 0, 0, 0, 0, 0, 0.1569 ],
89 "ETHs": [ 0, 0, 0, 0.3085, 0, 0, 0, 0, 0, 0 ],
90 "EXP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
91 "FCT": [ 0, 0, 0, 0, 0, 0, 0, 0.1922, 0, 0.3341 ],
92 "FCTs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
93 "FLDC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
94 "FLO": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
95 "GAME": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
96 "GAS": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1308 ],
97 "GNT": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
98 "GRC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
99 "HZ": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
100 "IOC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
101 "LSK": [ 0, 0.2231, 0, 0, 0, 0, 0, 0, 0, 0 ],
102 "LTC": [ 0.2656, 0, 0, 0, 0.2175, 0, 0, 0, 0, 0 ],
103 "LTCs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
104 "MAID": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
105 "MAIDs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
106 "NAUT": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
107 "NAV": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
108 "NOTE": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
109 "NXC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
110 "NXT": [ 0, 0, 0.1297, 0, 0, 0, 0.1445, 0, 0, 0 ],
111 "OMG": [ 0, 0, 0, 0, 0, 0, 0, 0.1757, 0, 0 ],
112 "OMNI": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
113 "PINK": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
114 "POT": [ 0, 0, 0.148, 0, 0, 0, 0, 0.1959, 0, 0 ],
115 "PPC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
116 "QTL": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
117 "RADS": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
118 "RBY": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
119 "REP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
120 "SBD": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
121 "SC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0.0623, 0 ],
122 "SDC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
123 "SJCX": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
124 "STEEM": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
125 "STR": [ 0, 0, 0, 0, 0.0599, 0.1127, 0, 0.185, 0, 0 ],
126 "STRAT": [ 0, 0, 0, 0.0944, 0.1409, 0, 0.2281, 0, 0, 0 ],
127 "SYS": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
128 "VOX": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
129 "VRC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
130 "VTC": [ 0, 0, 0.2512, 0, 0, 0, 0, 0, 0, 0 ],
131 "XBC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
132 "XCP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
133 "XEM": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
134 "XMG": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
135 "XMR": [ 0.0064, 0.0068, 0, 0, 0, 0, 0, 0, 0, 0 ],
136 "XMRs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
137 "XRP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
138 "XRPs": [ 0, 0.4457, 0, 0.2397, 0, 0, 0, 0, 0, 0 ],
139 "XVC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
140 "ZEC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0.3701, 0 ],
141 "_row": [
142 "2017-11-13",
143 "2017-11-20",
144 "2017-11-27",
145 "2017-12-04",
146 "2017-12-11",
147 "2017-12-18",
148 "2017-12-25",
149 "2018-01-01",
150 "2018-01-08",
151 "2018-01-15"
152 ]
153 }
154 },
155 "portfolio_2": {
156 "holding": {
157 "logo": [
158 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/XVC.png' title='Vcash'></img>",
159 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/USDT.png' title='Tether'></img>",
160 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/STRAT.png' title='Stratis'></img>",
161 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/STEEM.png' title='Steem'></img>",
162 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/OMG.png' title='OmiseGo'></img>",
163 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/XEM.png' title='NEM'></img>",
164 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/XMR.png' title='Monero'></img>",
165 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/FCT.png' title='Factoids'></img>",
166 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/ETC.png' title='Ethereum Classic'></img>",
167 "<img src='https://cryptoportfolio.io/wp-content/uploads/portfolio/logo/ZRX.png' title='0x'></img>"
168 ],
169 "direction": [
170 "long",
171 "long",
172 "long",
173 "long",
174 "long",
175 "long",
176 "long",
177 "long",
178 "long",
179 "long"
180 ],
181 "weight": [
182 10,
183 10,
184 10,
185 10,
186 10,
187 10,
188 10,
189 10,
190 10,
191 10
192 ],
193 "bid_ask_spread": [
194 1.699,
195 0.076,
196 0.216,
197 0.076,
198 0.363,
199 0.133,
200 0.306,
201 0.479,
202 0.181,
203 0.264
204 ],
205 "holding_time": [
206 1,
207 1,
208 1,
209 1,
210 15,
211 1,
212 1,
213 15,
214 8,
215 1
216 ],
217 "weekly_return_usdt": [
218 -0.1887,
219 0,
220 -0.2292,
221 -0.3314,
222 -0.2335,
223 -0.2816,
224 -0.1052,
225 -0.315,
226 -0.2515,
227 -0.3732
228 ],
229 "_row": [
230 "Vcash (XVC)",
231 "Tether (USDT)",
232 "Stratis (STRAT)",
233 "Steem (STEEM)",
234 "OmiseGo (OMG)",
235 "NEM (XEM)",
236 "Monero (XMR)",
237 "Factoids (FCT)",
238 "Ethereum C (ETC)",
239 "0x (ZRX)"
240 ]
241 },
242 "weights": {
243 "USDT": [ 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0.1 ],
244 "AMP": [ 0, 0, 0.1111, 0, 0, 0, 0.1, 0, 0, 0 ],
245 "ARDR": [ 0, 0, 0, 0.1111, 0.2, 0, 0, 0, 0, 0 ],
246 "BBR": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
247 "BCH": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
248 "BCN": [ 0, 0, 0, 0, 0, 0.1111, 0, 0, 0, 0 ],
249 "BCY": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
250 "BELA": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
251 "BITS": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
252 "BLK": [ 0, 0.125, 0, 0, 0, 0, 0, 0, 0, 0 ],
253 "BTC": [ 1.1102e-16, 0, 0, 0, 1.1102e-16, 0, 2.2204e-16, 0, 1.1102e-16, 1.1102e-16 ],
254 "BTCD": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
255 "BTM": [ 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0 ],
256 "BTS": [ 0.1, 0.125, 0.1111, 0, 0, 0.1111, 0.1, 0, 0, 0 ],
257 "BTSs": [ 0, 0, 0, 0.1111, 0, 0, 0, 0, 0, 0 ],
258 "BURST": [ 0, 0, 0, 0, 0.2, 0.1111, 0.1, 0, 0, 0 ],
259 "C2": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
260 "CLAM": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
261 "CLAMs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
262 "CURE": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
263 "DASH": [ 0.1, 0.125, 0.1111, 0, 0, 0, 0, 0, 0, 0 ],
264 "DASHs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
265 "DCR": [ 0.1, 0, 0.1111, 0, 0, 0, 0, 0, 0, 0 ],
266 "DGB": [ 0, 0, 0, 0, 0, 0.1111, 0.1, 0, 0, 0 ],
267 "DOGE": [ 0, 0, 0, 0, 0, 0.1111, 0.1, 0, 0, 0 ],
268 "DOGEs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
269 "EMC2": [ 0, 0, 0, 0.1111, 0, 0.1111, 0, 0, 0, 0 ],
270 "ETC": [ 0.1, 0.125, 0, 0, 0, 0, 0, 0, 0.1, 0.1 ],
271 "ETH": [ 0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
272 "ETHs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
273 "EXP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
274 "FCT": [ 0, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0.1 ],
275 "FCTs": [ 0, 0, 0, 0.1111, 0, 0, 0, 0, 0, 0 ],
276 "FLDC": [ 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0 ],
277 "FLO": [ 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0 ],
278 "GAME": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
279 "GAS": [ 0, 0.125, 0, 0, 0, 0, 0, 0, 0.1, 0 ],
280 "GNO": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
281 "GNT": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
282 "GRC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
283 "HUC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
284 "HZ": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
285 "IOC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
286 "LBC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
287 "LSK": [ 0, 0.125, 0, 0, 0, 0, 0, 0, 0, 0 ],
288 "LTC": [ 0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
289 "LTCs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
290 "MAID": [ 0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
291 "MAIDs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
292 "MYR": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
293 "NAUT": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
294 "NAV": [ 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0 ],
295 "NEOS": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
296 "NMC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
297 "NOBL": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
298 "NOTE": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
299 "NSR": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
300 "NXC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
301 "NXT": [ 0, 0, 0.1111, 0.1111, 0, 0.1111, 0, 0, 0, 0 ],
302 "OMG": [ 0, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0.1 ],
303 "OMNI": [ 0.1, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0 ],
304 "PASC": [ 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0 ],
305 "PINK": [ 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0 ],
306 "POT": [ 0, 0, 0.1111, 0.1111, 0, 0, 0, 0.1, 0, 0 ],
307 "PPC": [ 0, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0 ],
308 "QBK": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
309 "QORA": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
310 "QTL": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
311 "RADS": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
312 "RBY": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
313 "REP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
314 "RIC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0 ],
315 "SBD": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
316 "SC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
317 "SDC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
318 "SJCX": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
319 "STEEM": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1 ],
320 "STORJ": [ 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0 ],
321 "STR": [ 0, 0, 0.1111, 0.1111, 0.2, 0.1111, 0, 0.1, 0, 0 ],
322 "STRAT": [ 0, 0, 0, 0, 0.2, 0, 0.1, 0, 0, 0.1 ],
323 "SYS": [ 0, 0, 0.1111, 0, 0, 0, 0, 0, 0, 0 ],
324 "UNITY": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
325 "VIA": [ 0, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0 ],
326 "VOX": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
327 "VRC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
328 "VTC": [ 0.1, 0, 0.1111, 0.1111, 0, 0, 0, 0, 0, 0 ],
329 "XBC": [ 0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
330 "XCP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0 ],
331 "XEM": [ 0, 0, 0, 0, 0, 0.1111, 0, 0, 0, 0.1 ],
332 "XMG": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
333 "XMR": [ 0, 0.125, 0, 0, 0, 0, 0, 0, 0, 0.1 ],
334 "XMRs": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
335 "XPM": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
336 "XRP": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
337 "XRPs": [ 0, 0.125, 0, 0.1111, 0, 0, 0, 0, 0, 0 ],
338 "XVC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1 ],
339 "ZEC": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
340 "ZRX": [ 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0.1 ],
341 "_row": [
342 "2017-11-13",
343 "2017-11-20",
344 "2017-11-27",
345 "2017-12-04",
346 "2017-12-11",
347 "2017-12-18",
348 "2017-12-25",
349 "2018-01-01",
350 "2018-01-08",
351 "2018-01-15"
352 ]
353 }
354 }
355}
356