cryptodatapy 0.2.4__py3-none-any.whl → 0.2.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. cryptodatapy/conf/tickers.csv +0 -1
  2. cryptodatapy/extract/data_vendors/CoinMetrics.ipynb +747 -0
  3. cryptodatapy/extract/data_vendors/coinmetrics_api.py +279 -209
  4. cryptodatapy/extract/data_vendors/cryptocompare_api.py +3 -5
  5. cryptodatapy/extract/data_vendors/datavendor.py +32 -12
  6. cryptodatapy/extract/data_vendors/glassnode_api.py +3 -2
  7. cryptodatapy/extract/data_vendors/tiingo_api.py +3 -2
  8. cryptodatapy/extract/datarequest.py +55 -9
  9. cryptodatapy/extract/libraries/ccxt_api.py +51 -133
  10. cryptodatapy/transform/cc_onchain_data.csv +118423 -0
  11. cryptodatapy/transform/clean.py +17 -15
  12. cryptodatapy/transform/clean_onchain_data.ipynb +4750 -0
  13. cryptodatapy/transform/clean_perp_futures_ohlcv.ipynb +1874 -276
  14. cryptodatapy/transform/convertparams.py +28 -19
  15. cryptodatapy/transform/credit_data.ipynb +291 -0
  16. cryptodatapy/transform/eqty_data.ipynb +809 -0
  17. cryptodatapy/transform/filter.py +13 -11
  18. cryptodatapy/transform/global_credit_data_daily.parquet +0 -0
  19. cryptodatapy/transform/od.py +1 -0
  20. cryptodatapy/transform/rates_data.ipynb +465 -0
  21. cryptodatapy/transform/us_rates_daily.csv +227752 -0
  22. cryptodatapy/util/datacredentials.py +28 -7
  23. {cryptodatapy-0.2.4.dist-info → cryptodatapy-0.2.6.dist-info}/METADATA +2 -2
  24. {cryptodatapy-0.2.4.dist-info → cryptodatapy-0.2.6.dist-info}/RECORD +26 -27
  25. cryptodatapy/.DS_Store +0 -0
  26. cryptodatapy/.idea/.gitignore +0 -3
  27. cryptodatapy/.idea/cryptodatapy.iml +0 -12
  28. cryptodatapy/.idea/csv-plugin.xml +0 -16
  29. cryptodatapy/.idea/inspectionProfiles/Project_Default.xml +0 -6
  30. cryptodatapy/.idea/inspectionProfiles/profiles_settings.xml +0 -6
  31. cryptodatapy/.idea/misc.xml +0 -4
  32. cryptodatapy/.idea/modules.xml +0 -8
  33. cryptodatapy/.idea/vcs.xml +0 -6
  34. {cryptodatapy-0.2.4.dist-info → cryptodatapy-0.2.6.dist-info}/LICENSE +0 -0
  35. {cryptodatapy-0.2.4.dist-info → cryptodatapy-0.2.6.dist-info}/WHEEL +0 -0
@@ -49,7 +49,7 @@
49
49
  {
50
50
  "data": {
51
51
  "text/plain": [
52
- "314"
52
+ "333"
53
53
  ]
54
54
  },
55
55
  "execution_count": 3,
@@ -64,6 +64,380 @@
64
64
  {
65
65
  "cell_type": "code",
66
66
  "execution_count": 4,
67
+ "id": "27b6ed3c",
68
+ "metadata": {},
69
+ "outputs": [
70
+ {
71
+ "data": {
72
+ "text/plain": [
73
+ "['BTC/USDT:USDT',\n",
74
+ " 'ETH/USDT:USDT',\n",
75
+ " 'BCH/USDT:USDT',\n",
76
+ " 'XRP/USDT:USDT',\n",
77
+ " 'EOS/USDT:USDT',\n",
78
+ " 'LTC/USDT:USDT',\n",
79
+ " 'TRX/USDT:USDT',\n",
80
+ " 'ETC/USDT:USDT',\n",
81
+ " 'LINK/USDT:USDT',\n",
82
+ " 'XLM/USDT:USDT',\n",
83
+ " 'ADA/USDT:USDT',\n",
84
+ " 'XMR/USDT:USDT',\n",
85
+ " 'DASH/USDT:USDT',\n",
86
+ " 'ZEC/USDT:USDT',\n",
87
+ " 'XTZ/USDT:USDT',\n",
88
+ " 'BNB/USDT:USDT',\n",
89
+ " 'ATOM/USDT:USDT',\n",
90
+ " 'ONT/USDT:USDT',\n",
91
+ " 'IOTA/USDT:USDT',\n",
92
+ " 'BAT/USDT:USDT',\n",
93
+ " 'VET/USDT:USDT',\n",
94
+ " 'NEO/USDT:USDT',\n",
95
+ " 'QTUM/USDT:USDT',\n",
96
+ " 'IOST/USDT:USDT',\n",
97
+ " 'THETA/USDT:USDT',\n",
98
+ " 'ALGO/USDT:USDT',\n",
99
+ " 'ZIL/USDT:USDT',\n",
100
+ " 'KNC/USDT:USDT',\n",
101
+ " 'ZRX/USDT:USDT',\n",
102
+ " 'COMP/USDT:USDT',\n",
103
+ " 'OMG/USDT:USDT',\n",
104
+ " 'DOGE/USDT:USDT',\n",
105
+ " 'SXP/USDT:USDT',\n",
106
+ " 'KAVA/USDT:USDT',\n",
107
+ " 'BAND/USDT:USDT',\n",
108
+ " 'RLC/USDT:USDT',\n",
109
+ " 'WAVES/USDT:USDT',\n",
110
+ " 'MKR/USDT:USDT',\n",
111
+ " 'SNX/USDT:USDT',\n",
112
+ " 'DOT/USDT:USDT',\n",
113
+ " 'DEFI/USDT:USDT',\n",
114
+ " 'YFI/USDT:USDT',\n",
115
+ " 'BAL/USDT:USDT',\n",
116
+ " 'CRV/USDT:USDT',\n",
117
+ " 'TRB/USDT:USDT',\n",
118
+ " 'RUNE/USDT:USDT',\n",
119
+ " 'SUSHI/USDT:USDT',\n",
120
+ " 'EGLD/USDT:USDT',\n",
121
+ " 'SOL/USDT:USDT',\n",
122
+ " 'ICX/USDT:USDT',\n",
123
+ " 'STORJ/USDT:USDT',\n",
124
+ " 'BLZ/USDT:USDT',\n",
125
+ " 'UNI/USDT:USDT',\n",
126
+ " 'AVAX/USDT:USDT',\n",
127
+ " 'FTM/USDT:USDT',\n",
128
+ " 'ENJ/USDT:USDT',\n",
129
+ " 'FLM/USDT:USDT',\n",
130
+ " 'REN/USDT:USDT',\n",
131
+ " 'KSM/USDT:USDT',\n",
132
+ " 'NEAR/USDT:USDT',\n",
133
+ " 'AAVE/USDT:USDT',\n",
134
+ " 'FIL/USDT:USDT',\n",
135
+ " 'RSR/USDT:USDT',\n",
136
+ " 'LRC/USDT:USDT',\n",
137
+ " 'MATIC/USDT:USDT',\n",
138
+ " 'OCEAN/USDT:USDT',\n",
139
+ " 'CVC/USDT:USDT',\n",
140
+ " 'BEL/USDT:USDT',\n",
141
+ " 'CTK/USDT:USDT',\n",
142
+ " 'AXS/USDT:USDT',\n",
143
+ " 'ALPHA/USDT:USDT',\n",
144
+ " 'ZEN/USDT:USDT',\n",
145
+ " 'SKL/USDT:USDT',\n",
146
+ " 'GRT/USDT:USDT',\n",
147
+ " '1INCH/USDT:USDT',\n",
148
+ " 'CHZ/USDT:USDT',\n",
149
+ " 'SAND/USDT:USDT',\n",
150
+ " 'ANKR/USDT:USDT',\n",
151
+ " 'LIT/USDT:USDT',\n",
152
+ " 'UNFI/USDT:USDT',\n",
153
+ " 'REEF/USDT:USDT',\n",
154
+ " 'RVN/USDT:USDT',\n",
155
+ " 'SFP/USDT:USDT',\n",
156
+ " 'XEM/USDT:USDT',\n",
157
+ " 'BTCST/USDT:USDT',\n",
158
+ " 'COTI/USDT:USDT',\n",
159
+ " 'CHR/USDT:USDT',\n",
160
+ " 'MANA/USDT:USDT',\n",
161
+ " 'ALICE/USDT:USDT',\n",
162
+ " 'HBAR/USDT:USDT',\n",
163
+ " 'ONE/USDT:USDT',\n",
164
+ " 'LINA/USDT:USDT',\n",
165
+ " 'STMX/USDT:USDT',\n",
166
+ " 'DENT/USDT:USDT',\n",
167
+ " 'CELR/USDT:USDT',\n",
168
+ " 'HOT/USDT:USDT',\n",
169
+ " 'MTL/USDT:USDT',\n",
170
+ " 'OGN/USDT:USDT',\n",
171
+ " 'NKN/USDT:USDT',\n",
172
+ " 'SC/USDT:USDT',\n",
173
+ " 'DGB/USDT:USDT',\n",
174
+ " '1000SHIB/USDT:USDT',\n",
175
+ " 'BAKE/USDT:USDT',\n",
176
+ " 'GTC/USDT:USDT',\n",
177
+ " 'BTCDOM/USDT:USDT',\n",
178
+ " 'IOTX/USDT:USDT',\n",
179
+ " 'RAY/USDT:USDT',\n",
180
+ " 'C98/USDT:USDT',\n",
181
+ " 'MASK/USDT:USDT',\n",
182
+ " 'ATA/USDT:USDT',\n",
183
+ " 'DYDX/USDT:USDT',\n",
184
+ " '1000XEC/USDT:USDT',\n",
185
+ " 'GALA/USDT:USDT',\n",
186
+ " 'CELO/USDT:USDT',\n",
187
+ " 'AR/USDT:USDT',\n",
188
+ " 'KLAY/USDT:USDT',\n",
189
+ " 'ARPA/USDT:USDT',\n",
190
+ " 'CTSI/USDT:USDT',\n",
191
+ " 'LPT/USDT:USDT',\n",
192
+ " 'ENS/USDT:USDT',\n",
193
+ " 'PEOPLE/USDT:USDT',\n",
194
+ " 'ROSE/USDT:USDT',\n",
195
+ " 'DUSK/USDT:USDT',\n",
196
+ " 'FLOW/USDT:USDT',\n",
197
+ " 'IMX/USDT:USDT',\n",
198
+ " 'API3/USDT:USDT',\n",
199
+ " 'GMT/USDT:USDT',\n",
200
+ " 'APE/USDT:USDT',\n",
201
+ " 'WOO/USDT:USDT',\n",
202
+ " 'FTT/USDT:USDT',\n",
203
+ " 'JASMY/USDT:USDT',\n",
204
+ " 'DAR/USDT:USDT',\n",
205
+ " 'OP/USDT:USDT',\n",
206
+ " 'INJ/USDT:USDT',\n",
207
+ " 'STG/USDT:USDT',\n",
208
+ " 'SPELL/USDT:USDT',\n",
209
+ " '1000LUNC/USDT:USDT',\n",
210
+ " 'LUNA2/USDT:USDT',\n",
211
+ " 'LDO/USDT:USDT',\n",
212
+ " 'CVX/USDT:USDT',\n",
213
+ " 'ICP/USDT:USDT',\n",
214
+ " 'APT/USDT:USDT',\n",
215
+ " 'QNT/USDT:USDT',\n",
216
+ " 'FET/USDT:USDT',\n",
217
+ " 'FXS/USDT:USDT',\n",
218
+ " 'HOOK/USDT:USDT',\n",
219
+ " 'MAGIC/USDT:USDT',\n",
220
+ " 'T/USDT:USDT',\n",
221
+ " 'HIGH/USDT:USDT',\n",
222
+ " 'MINA/USDT:USDT',\n",
223
+ " 'ASTR/USDT:USDT',\n",
224
+ " 'AGIX/USDT:USDT',\n",
225
+ " 'PHB/USDT:USDT',\n",
226
+ " 'GMX/USDT:USDT',\n",
227
+ " 'CFX/USDT:USDT',\n",
228
+ " 'STX/USDT:USDT',\n",
229
+ " 'BNX/USDT:USDT',\n",
230
+ " 'ACH/USDT:USDT',\n",
231
+ " 'SSV/USDT:USDT',\n",
232
+ " 'CKB/USDT:USDT',\n",
233
+ " 'PERP/USDT:USDT',\n",
234
+ " 'TRU/USDT:USDT',\n",
235
+ " 'LQTY/USDT:USDT',\n",
236
+ " 'USDC/USDT:USDT',\n",
237
+ " 'ID/USDT:USDT',\n",
238
+ " 'ARB/USDT:USDT',\n",
239
+ " 'JOE/USDT:USDT',\n",
240
+ " 'TLM/USDT:USDT',\n",
241
+ " 'AMB/USDT:USDT',\n",
242
+ " 'LEVER/USDT:USDT',\n",
243
+ " 'RDNT/USDT:USDT',\n",
244
+ " 'HFT/USDT:USDT',\n",
245
+ " 'XVS/USDT:USDT',\n",
246
+ " 'ETH/BTC:BTC',\n",
247
+ " 'BLUR/USDT:USDT',\n",
248
+ " 'EDU/USDT:USDT',\n",
249
+ " 'IDEX/USDT:USDT',\n",
250
+ " 'SUI/USDT:USDT',\n",
251
+ " '1000PEPE/USDT:USDT',\n",
252
+ " '1000FLOKI/USDT:USDT',\n",
253
+ " 'UMA/USDT:USDT',\n",
254
+ " 'RAD/USDT:USDT',\n",
255
+ " 'KEY/USDT:USDT',\n",
256
+ " 'COMBO/USDT:USDT',\n",
257
+ " 'NMR/USDT:USDT',\n",
258
+ " 'MAV/USDT:USDT',\n",
259
+ " 'MDT/USDT:USDT',\n",
260
+ " 'XVG/USDT:USDT',\n",
261
+ " 'WLD/USDT:USDT',\n",
262
+ " 'PENDLE/USDT:USDT',\n",
263
+ " 'ARKM/USDT:USDT',\n",
264
+ " 'AGLD/USDT:USDT',\n",
265
+ " 'YGG/USDT:USDT',\n",
266
+ " 'DODOX/USDT:USDT',\n",
267
+ " 'BNT/USDT:USDT',\n",
268
+ " 'OXT/USDT:USDT',\n",
269
+ " 'SEI/USDT:USDT',\n",
270
+ " 'CYBER/USDT:USDT',\n",
271
+ " 'HIFI/USDT:USDT',\n",
272
+ " 'ARK/USDT:USDT',\n",
273
+ " 'FRONT/USDT:USDT',\n",
274
+ " 'GLMR/USDT:USDT',\n",
275
+ " 'BICO/USDT:USDT',\n",
276
+ " 'STRAX/USDT:USDT',\n",
277
+ " 'LOOM/USDT:USDT',\n",
278
+ " 'BIGTIME/USDT:USDT',\n",
279
+ " 'BOND/USDT:USDT',\n",
280
+ " 'ORBS/USDT:USDT',\n",
281
+ " 'STPT/USDT:USDT',\n",
282
+ " 'WAXP/USDT:USDT',\n",
283
+ " 'BSV/USDT:USDT',\n",
284
+ " 'RIF/USDT:USDT',\n",
285
+ " 'POLYX/USDT:USDT',\n",
286
+ " 'GAS/USDT:USDT',\n",
287
+ " 'POWR/USDT:USDT',\n",
288
+ " 'SLP/USDT:USDT',\n",
289
+ " 'TIA/USDT:USDT',\n",
290
+ " 'SNT/USDT:USDT',\n",
291
+ " 'CAKE/USDT:USDT',\n",
292
+ " 'MEME/USDT:USDT',\n",
293
+ " 'TWT/USDT:USDT',\n",
294
+ " 'TOKEN/USDT:USDT',\n",
295
+ " 'ORDI/USDT:USDT',\n",
296
+ " 'STEEM/USDT:USDT',\n",
297
+ " 'BADGER/USDT:USDT',\n",
298
+ " 'ILV/USDT:USDT',\n",
299
+ " 'NTRN/USDT:USDT',\n",
300
+ " 'KAS/USDT:USDT',\n",
301
+ " 'BEAMX/USDT:USDT',\n",
302
+ " '1000BONK/USDT:USDT',\n",
303
+ " 'PYTH/USDT:USDT',\n",
304
+ " 'SUPER/USDT:USDT',\n",
305
+ " 'USTC/USDT:USDT',\n",
306
+ " 'ONG/USDT:USDT',\n",
307
+ " 'ETHW/USDT:USDT',\n",
308
+ " 'JTO/USDT:USDT',\n",
309
+ " '1000SATS/USDT:USDT',\n",
310
+ " 'AUCTION/USDT:USDT',\n",
311
+ " '1000RATS/USDT:USDT',\n",
312
+ " 'ACE/USDT:USDT',\n",
313
+ " 'MOVR/USDT:USDT',\n",
314
+ " 'NFP/USDT:USDT',\n",
315
+ " 'BTC/USDC:USDC',\n",
316
+ " 'ETH/USDC:USDC',\n",
317
+ " 'BNB/USDC:USDC',\n",
318
+ " 'SOL/USDC:USDC',\n",
319
+ " 'XRP/USDC:USDC',\n",
320
+ " 'AI/USDT:USDT',\n",
321
+ " 'XAI/USDT:USDT',\n",
322
+ " 'DOGE/USDC:USDC',\n",
323
+ " 'WIF/USDT:USDT',\n",
324
+ " 'MANTA/USDT:USDT',\n",
325
+ " 'ONDO/USDT:USDT',\n",
326
+ " 'LSK/USDT:USDT',\n",
327
+ " 'ALT/USDT:USDT',\n",
328
+ " 'JUP/USDT:USDT',\n",
329
+ " 'ZETA/USDT:USDT',\n",
330
+ " 'RONIN/USDT:USDT',\n",
331
+ " 'DYM/USDT:USDT',\n",
332
+ " 'SUI/USDC:USDC',\n",
333
+ " 'OM/USDT:USDT',\n",
334
+ " 'LINK/USDC:USDC',\n",
335
+ " 'PIXEL/USDT:USDT',\n",
336
+ " 'STRK/USDT:USDT',\n",
337
+ " 'MAVIA/USDT:USDT',\n",
338
+ " 'ORDI/USDC:USDC',\n",
339
+ " 'GLM/USDT:USDT',\n",
340
+ " 'PORTAL/USDT:USDT',\n",
341
+ " 'TON/USDT:USDT',\n",
342
+ " 'AXL/USDT:USDT',\n",
343
+ " 'MYRO/USDT:USDT',\n",
344
+ " '1000PEPE/USDC:USDC',\n",
345
+ " 'METIS/USDT:USDT',\n",
346
+ " 'AEVO/USDT:USDT',\n",
347
+ " 'WLD/USDC:USDC',\n",
348
+ " 'VANRY/USDT:USDT',\n",
349
+ " 'BOME/USDT:USDT',\n",
350
+ " 'ETHFI/USDT:USDT',\n",
351
+ " 'AVAX/USDC:USDC',\n",
352
+ " '1000SHIB/USDC:USDC',\n",
353
+ " 'BTC/USDT:USDT-240927',\n",
354
+ " 'ETH/USDT:USDT-240927',\n",
355
+ " 'ENA/USDT:USDT',\n",
356
+ " 'W/USDT:USDT',\n",
357
+ " 'WIF/USDC:USDC',\n",
358
+ " 'BCH/USDC:USDC',\n",
359
+ " 'TNSR/USDT:USDT',\n",
360
+ " 'SAGA/USDT:USDT',\n",
361
+ " 'LTC/USDC:USDC',\n",
362
+ " 'NEAR/USDC:USDC',\n",
363
+ " 'TAO/USDT:USDT',\n",
364
+ " 'OMNI/USDT:USDT',\n",
365
+ " 'ARB/USDC:USDC',\n",
366
+ " 'NEO/USDC:USDC',\n",
367
+ " 'FIL/USDC:USDC',\n",
368
+ " 'MATIC/USDC:USDC',\n",
369
+ " 'TIA/USDC:USDC',\n",
370
+ " 'BOME/USDC:USDC',\n",
371
+ " 'REZ/USDT:USDT',\n",
372
+ " 'ENA/USDC:USDC',\n",
373
+ " 'ETHFI/USDC:USDC',\n",
374
+ " '1000BONK/USDC:USDC',\n",
375
+ " 'BB/USDT:USDT',\n",
376
+ " 'NOT/USDT:USDT',\n",
377
+ " 'TURBO/USDT:USDT',\n",
378
+ " 'IO/USDT:USDT',\n",
379
+ " 'ZK/USDT:USDT',\n",
380
+ " 'MEW/USDT:USDT',\n",
381
+ " 'LISTA/USDT:USDT',\n",
382
+ " 'ZRO/USDT:USDT',\n",
383
+ " 'BTC/USDT:USDT-241227',\n",
384
+ " 'ETH/USDT:USDT-241227',\n",
385
+ " 'CRV/USDC:USDC',\n",
386
+ " 'RENDER/USDT:USDT',\n",
387
+ " 'BANANA/USDT:USDT',\n",
388
+ " 'RARE/USDT:USDT',\n",
389
+ " 'G/USDT:USDT',\n",
390
+ " 'SYN/USDT:USDT',\n",
391
+ " 'SYS/USDT:USDT',\n",
392
+ " 'VOXEL/USDT:USDT',\n",
393
+ " 'BRETT/USDT:USDT',\n",
394
+ " 'ALPACA/USDT:USDT',\n",
395
+ " 'POPCAT/USDT:USDT',\n",
396
+ " 'SUN/USDT:USDT',\n",
397
+ " 'VIDT/USDT:USDT',\n",
398
+ " 'NULS/USDT:USDT',\n",
399
+ " 'DOGS/USDT:USDT',\n",
400
+ " 'MBOX/USDT:USDT',\n",
401
+ " 'CHESS/USDT:USDT',\n",
402
+ " 'FLUX/USDT:USDT',\n",
403
+ " 'BSW/USDT:USDT',\n",
404
+ " 'QUICK/USDT:USDT',\n",
405
+ " 'NEIROETH/USDT:USDT']"
406
+ ]
407
+ },
408
+ "execution_count": 4,
409
+ "metadata": {},
410
+ "output_type": "execute_result"
411
+ }
412
+ ],
413
+ "source": [
414
+ "perp_tickers"
415
+ ]
416
+ },
417
+ {
418
+ "cell_type": "code",
419
+ "execution_count": 5,
420
+ "id": "5e796745",
421
+ "metadata": {},
422
+ "outputs": [
423
+ {
424
+ "data": {
425
+ "text/plain": [
426
+ "True"
427
+ ]
428
+ },
429
+ "execution_count": 5,
430
+ "metadata": {},
431
+ "output_type": "execute_result"
432
+ }
433
+ ],
434
+ "source": [
435
+ "'BTCST/USDT:USDT' in perp_tickers"
436
+ ]
437
+ },
438
+ {
439
+ "cell_type": "code",
440
+ "execution_count": 6,
67
441
  "id": "fcb74458",
68
442
  "metadata": {},
69
443
  "outputs": [],
@@ -75,7 +449,49 @@
75
449
  },
76
450
  {
77
451
  "cell_type": "code",
78
- "execution_count": 5,
452
+ "execution_count": 7,
453
+ "id": "85c99716",
454
+ "metadata": {},
455
+ "outputs": [
456
+ {
457
+ "data": {
458
+ "text/plain": [
459
+ "3121"
460
+ ]
461
+ },
462
+ "execution_count": 7,
463
+ "metadata": {},
464
+ "output_type": "execute_result"
465
+ }
466
+ ],
467
+ "source": [
468
+ "len(spot_tickers)"
469
+ ]
470
+ },
471
+ {
472
+ "cell_type": "code",
473
+ "execution_count": 8,
474
+ "id": "4b86fa0d",
475
+ "metadata": {},
476
+ "outputs": [
477
+ {
478
+ "data": {
479
+ "text/plain": [
480
+ "True"
481
+ ]
482
+ },
483
+ "execution_count": 8,
484
+ "metadata": {},
485
+ "output_type": "execute_result"
486
+ }
487
+ ],
488
+ "source": [
489
+ "'BTCST/USDT:USDT' in spot_tickers"
490
+ ]
491
+ },
492
+ {
493
+ "cell_type": "code",
494
+ "execution_count": 9,
79
495
  "id": "7962f7e5",
80
496
  "metadata": {},
81
497
  "outputs": [],
@@ -86,17 +502,17 @@
86
502
  },
87
503
  {
88
504
  "cell_type": "code",
89
- "execution_count": 6,
505
+ "execution_count": 10,
90
506
  "id": "877811c1",
91
507
  "metadata": {},
92
508
  "outputs": [
93
509
  {
94
510
  "data": {
95
511
  "text/plain": [
96
- "314"
512
+ "333"
97
513
  ]
98
514
  },
99
- "execution_count": 6,
515
+ "execution_count": 10,
100
516
  "metadata": {},
101
517
  "output_type": "execute_result"
102
518
  }
@@ -108,7 +524,381 @@
108
524
  },
109
525
  {
110
526
  "cell_type": "code",
111
- "execution_count": 7,
527
+ "execution_count": 11,
528
+ "id": "ef415480-a980-47a1-8ad7-7555603ebcf3",
529
+ "metadata": {},
530
+ "outputs": [
531
+ {
532
+ "data": {
533
+ "text/plain": [
534
+ "['BTC/USDT:USDT',\n",
535
+ " 'ETH/USDT:USDT',\n",
536
+ " 'BCH/USDT:USDT',\n",
537
+ " 'XRP/USDT:USDT',\n",
538
+ " 'EOS/USDT:USDT',\n",
539
+ " 'LTC/USDT:USDT',\n",
540
+ " 'TRX/USDT:USDT',\n",
541
+ " 'ETC/USDT:USDT',\n",
542
+ " 'LINK/USDT:USDT',\n",
543
+ " 'XLM/USDT:USDT',\n",
544
+ " 'ADA/USDT:USDT',\n",
545
+ " 'XMR/USDT:USDT',\n",
546
+ " 'DASH/USDT:USDT',\n",
547
+ " 'ZEC/USDT:USDT',\n",
548
+ " 'XTZ/USDT:USDT',\n",
549
+ " 'BNB/USDT:USDT',\n",
550
+ " 'ATOM/USDT:USDT',\n",
551
+ " 'ONT/USDT:USDT',\n",
552
+ " 'IOTA/USDT:USDT',\n",
553
+ " 'BAT/USDT:USDT',\n",
554
+ " 'VET/USDT:USDT',\n",
555
+ " 'NEO/USDT:USDT',\n",
556
+ " 'QTUM/USDT:USDT',\n",
557
+ " 'IOST/USDT:USDT',\n",
558
+ " 'THETA/USDT:USDT',\n",
559
+ " 'ALGO/USDT:USDT',\n",
560
+ " 'ZIL/USDT:USDT',\n",
561
+ " 'KNC/USDT:USDT',\n",
562
+ " 'ZRX/USDT:USDT',\n",
563
+ " 'COMP/USDT:USDT',\n",
564
+ " 'OMG/USDT:USDT',\n",
565
+ " 'DOGE/USDT:USDT',\n",
566
+ " 'SXP/USDT:USDT',\n",
567
+ " 'KAVA/USDT:USDT',\n",
568
+ " 'BAND/USDT:USDT',\n",
569
+ " 'RLC/USDT:USDT',\n",
570
+ " 'WAVES/USDT:USDT',\n",
571
+ " 'MKR/USDT:USDT',\n",
572
+ " 'SNX/USDT:USDT',\n",
573
+ " 'DOT/USDT:USDT',\n",
574
+ " 'DEFI/USDT:USDT',\n",
575
+ " 'YFI/USDT:USDT',\n",
576
+ " 'BAL/USDT:USDT',\n",
577
+ " 'CRV/USDT:USDT',\n",
578
+ " 'TRB/USDT:USDT',\n",
579
+ " 'RUNE/USDT:USDT',\n",
580
+ " 'SUSHI/USDT:USDT',\n",
581
+ " 'EGLD/USDT:USDT',\n",
582
+ " 'SOL/USDT:USDT',\n",
583
+ " 'ICX/USDT:USDT',\n",
584
+ " 'STORJ/USDT:USDT',\n",
585
+ " 'BLZ/USDT:USDT',\n",
586
+ " 'UNI/USDT:USDT',\n",
587
+ " 'AVAX/USDT:USDT',\n",
588
+ " 'FTM/USDT:USDT',\n",
589
+ " 'ENJ/USDT:USDT',\n",
590
+ " 'FLM/USDT:USDT',\n",
591
+ " 'REN/USDT:USDT',\n",
592
+ " 'KSM/USDT:USDT',\n",
593
+ " 'NEAR/USDT:USDT',\n",
594
+ " 'AAVE/USDT:USDT',\n",
595
+ " 'FIL/USDT:USDT',\n",
596
+ " 'RSR/USDT:USDT',\n",
597
+ " 'LRC/USDT:USDT',\n",
598
+ " 'MATIC/USDT:USDT',\n",
599
+ " 'OCEAN/USDT:USDT',\n",
600
+ " 'CVC/USDT:USDT',\n",
601
+ " 'BEL/USDT:USDT',\n",
602
+ " 'CTK/USDT:USDT',\n",
603
+ " 'AXS/USDT:USDT',\n",
604
+ " 'ALPHA/USDT:USDT',\n",
605
+ " 'ZEN/USDT:USDT',\n",
606
+ " 'SKL/USDT:USDT',\n",
607
+ " 'GRT/USDT:USDT',\n",
608
+ " '1INCH/USDT:USDT',\n",
609
+ " 'CHZ/USDT:USDT',\n",
610
+ " 'SAND/USDT:USDT',\n",
611
+ " 'ANKR/USDT:USDT',\n",
612
+ " 'LIT/USDT:USDT',\n",
613
+ " 'UNFI/USDT:USDT',\n",
614
+ " 'REEF/USDT:USDT',\n",
615
+ " 'RVN/USDT:USDT',\n",
616
+ " 'SFP/USDT:USDT',\n",
617
+ " 'XEM/USDT:USDT',\n",
618
+ " 'BTCST/USDT:USDT',\n",
619
+ " 'COTI/USDT:USDT',\n",
620
+ " 'CHR/USDT:USDT',\n",
621
+ " 'MANA/USDT:USDT',\n",
622
+ " 'ALICE/USDT:USDT',\n",
623
+ " 'HBAR/USDT:USDT',\n",
624
+ " 'ONE/USDT:USDT',\n",
625
+ " 'LINA/USDT:USDT',\n",
626
+ " 'STMX/USDT:USDT',\n",
627
+ " 'DENT/USDT:USDT',\n",
628
+ " 'CELR/USDT:USDT',\n",
629
+ " 'HOT/USDT:USDT',\n",
630
+ " 'MTL/USDT:USDT',\n",
631
+ " 'OGN/USDT:USDT',\n",
632
+ " 'NKN/USDT:USDT',\n",
633
+ " 'SC/USDT:USDT',\n",
634
+ " 'DGB/USDT:USDT',\n",
635
+ " '1000SHIB/USDT:USDT',\n",
636
+ " 'BAKE/USDT:USDT',\n",
637
+ " 'GTC/USDT:USDT',\n",
638
+ " 'BTCDOM/USDT:USDT',\n",
639
+ " 'IOTX/USDT:USDT',\n",
640
+ " 'RAY/USDT:USDT',\n",
641
+ " 'C98/USDT:USDT',\n",
642
+ " 'MASK/USDT:USDT',\n",
643
+ " 'ATA/USDT:USDT',\n",
644
+ " 'DYDX/USDT:USDT',\n",
645
+ " '1000XEC/USDT:USDT',\n",
646
+ " 'GALA/USDT:USDT',\n",
647
+ " 'CELO/USDT:USDT',\n",
648
+ " 'AR/USDT:USDT',\n",
649
+ " 'KLAY/USDT:USDT',\n",
650
+ " 'ARPA/USDT:USDT',\n",
651
+ " 'CTSI/USDT:USDT',\n",
652
+ " 'LPT/USDT:USDT',\n",
653
+ " 'ENS/USDT:USDT',\n",
654
+ " 'PEOPLE/USDT:USDT',\n",
655
+ " 'ROSE/USDT:USDT',\n",
656
+ " 'DUSK/USDT:USDT',\n",
657
+ " 'FLOW/USDT:USDT',\n",
658
+ " 'IMX/USDT:USDT',\n",
659
+ " 'API3/USDT:USDT',\n",
660
+ " 'GMT/USDT:USDT',\n",
661
+ " 'APE/USDT:USDT',\n",
662
+ " 'WOO/USDT:USDT',\n",
663
+ " 'FTT/USDT:USDT',\n",
664
+ " 'JASMY/USDT:USDT',\n",
665
+ " 'DAR/USDT:USDT',\n",
666
+ " 'OP/USDT:USDT',\n",
667
+ " 'INJ/USDT:USDT',\n",
668
+ " 'STG/USDT:USDT',\n",
669
+ " 'SPELL/USDT:USDT',\n",
670
+ " '1000LUNC/USDT:USDT',\n",
671
+ " 'LUNA2/USDT:USDT',\n",
672
+ " 'LDO/USDT:USDT',\n",
673
+ " 'CVX/USDT:USDT',\n",
674
+ " 'ICP/USDT:USDT',\n",
675
+ " 'APT/USDT:USDT',\n",
676
+ " 'QNT/USDT:USDT',\n",
677
+ " 'FET/USDT:USDT',\n",
678
+ " 'FXS/USDT:USDT',\n",
679
+ " 'HOOK/USDT:USDT',\n",
680
+ " 'MAGIC/USDT:USDT',\n",
681
+ " 'T/USDT:USDT',\n",
682
+ " 'HIGH/USDT:USDT',\n",
683
+ " 'MINA/USDT:USDT',\n",
684
+ " 'ASTR/USDT:USDT',\n",
685
+ " 'AGIX/USDT:USDT',\n",
686
+ " 'PHB/USDT:USDT',\n",
687
+ " 'GMX/USDT:USDT',\n",
688
+ " 'CFX/USDT:USDT',\n",
689
+ " 'STX/USDT:USDT',\n",
690
+ " 'BNX/USDT:USDT',\n",
691
+ " 'ACH/USDT:USDT',\n",
692
+ " 'SSV/USDT:USDT',\n",
693
+ " 'CKB/USDT:USDT',\n",
694
+ " 'PERP/USDT:USDT',\n",
695
+ " 'TRU/USDT:USDT',\n",
696
+ " 'LQTY/USDT:USDT',\n",
697
+ " 'USDC/USDT:USDT',\n",
698
+ " 'ID/USDT:USDT',\n",
699
+ " 'ARB/USDT:USDT',\n",
700
+ " 'JOE/USDT:USDT',\n",
701
+ " 'TLM/USDT:USDT',\n",
702
+ " 'AMB/USDT:USDT',\n",
703
+ " 'LEVER/USDT:USDT',\n",
704
+ " 'RDNT/USDT:USDT',\n",
705
+ " 'HFT/USDT:USDT',\n",
706
+ " 'XVS/USDT:USDT',\n",
707
+ " 'ETH/BTC:BTC',\n",
708
+ " 'BLUR/USDT:USDT',\n",
709
+ " 'EDU/USDT:USDT',\n",
710
+ " 'IDEX/USDT:USDT',\n",
711
+ " 'SUI/USDT:USDT',\n",
712
+ " '1000PEPE/USDT:USDT',\n",
713
+ " '1000FLOKI/USDT:USDT',\n",
714
+ " 'UMA/USDT:USDT',\n",
715
+ " 'RAD/USDT:USDT',\n",
716
+ " 'KEY/USDT:USDT',\n",
717
+ " 'COMBO/USDT:USDT',\n",
718
+ " 'NMR/USDT:USDT',\n",
719
+ " 'MAV/USDT:USDT',\n",
720
+ " 'MDT/USDT:USDT',\n",
721
+ " 'XVG/USDT:USDT',\n",
722
+ " 'WLD/USDT:USDT',\n",
723
+ " 'PENDLE/USDT:USDT',\n",
724
+ " 'ARKM/USDT:USDT',\n",
725
+ " 'AGLD/USDT:USDT',\n",
726
+ " 'YGG/USDT:USDT',\n",
727
+ " 'DODOX/USDT:USDT',\n",
728
+ " 'BNT/USDT:USDT',\n",
729
+ " 'OXT/USDT:USDT',\n",
730
+ " 'SEI/USDT:USDT',\n",
731
+ " 'CYBER/USDT:USDT',\n",
732
+ " 'HIFI/USDT:USDT',\n",
733
+ " 'ARK/USDT:USDT',\n",
734
+ " 'FRONT/USDT:USDT',\n",
735
+ " 'GLMR/USDT:USDT',\n",
736
+ " 'BICO/USDT:USDT',\n",
737
+ " 'STRAX/USDT:USDT',\n",
738
+ " 'LOOM/USDT:USDT',\n",
739
+ " 'BIGTIME/USDT:USDT',\n",
740
+ " 'BOND/USDT:USDT',\n",
741
+ " 'ORBS/USDT:USDT',\n",
742
+ " 'STPT/USDT:USDT',\n",
743
+ " 'WAXP/USDT:USDT',\n",
744
+ " 'BSV/USDT:USDT',\n",
745
+ " 'RIF/USDT:USDT',\n",
746
+ " 'POLYX/USDT:USDT',\n",
747
+ " 'GAS/USDT:USDT',\n",
748
+ " 'POWR/USDT:USDT',\n",
749
+ " 'SLP/USDT:USDT',\n",
750
+ " 'TIA/USDT:USDT',\n",
751
+ " 'SNT/USDT:USDT',\n",
752
+ " 'CAKE/USDT:USDT',\n",
753
+ " 'MEME/USDT:USDT',\n",
754
+ " 'TWT/USDT:USDT',\n",
755
+ " 'TOKEN/USDT:USDT',\n",
756
+ " 'ORDI/USDT:USDT',\n",
757
+ " 'STEEM/USDT:USDT',\n",
758
+ " 'BADGER/USDT:USDT',\n",
759
+ " 'ILV/USDT:USDT',\n",
760
+ " 'NTRN/USDT:USDT',\n",
761
+ " 'KAS/USDT:USDT',\n",
762
+ " 'BEAMX/USDT:USDT',\n",
763
+ " '1000BONK/USDT:USDT',\n",
764
+ " 'PYTH/USDT:USDT',\n",
765
+ " 'SUPER/USDT:USDT',\n",
766
+ " 'USTC/USDT:USDT',\n",
767
+ " 'ONG/USDT:USDT',\n",
768
+ " 'ETHW/USDT:USDT',\n",
769
+ " 'JTO/USDT:USDT',\n",
770
+ " '1000SATS/USDT:USDT',\n",
771
+ " 'AUCTION/USDT:USDT',\n",
772
+ " '1000RATS/USDT:USDT',\n",
773
+ " 'ACE/USDT:USDT',\n",
774
+ " 'MOVR/USDT:USDT',\n",
775
+ " 'NFP/USDT:USDT',\n",
776
+ " 'BTC/USDC:USDC',\n",
777
+ " 'ETH/USDC:USDC',\n",
778
+ " 'BNB/USDC:USDC',\n",
779
+ " 'SOL/USDC:USDC',\n",
780
+ " 'XRP/USDC:USDC',\n",
781
+ " 'AI/USDT:USDT',\n",
782
+ " 'XAI/USDT:USDT',\n",
783
+ " 'DOGE/USDC:USDC',\n",
784
+ " 'WIF/USDT:USDT',\n",
785
+ " 'MANTA/USDT:USDT',\n",
786
+ " 'ONDO/USDT:USDT',\n",
787
+ " 'LSK/USDT:USDT',\n",
788
+ " 'ALT/USDT:USDT',\n",
789
+ " 'JUP/USDT:USDT',\n",
790
+ " 'ZETA/USDT:USDT',\n",
791
+ " 'RONIN/USDT:USDT',\n",
792
+ " 'DYM/USDT:USDT',\n",
793
+ " 'SUI/USDC:USDC',\n",
794
+ " 'OM/USDT:USDT',\n",
795
+ " 'LINK/USDC:USDC',\n",
796
+ " 'PIXEL/USDT:USDT',\n",
797
+ " 'STRK/USDT:USDT',\n",
798
+ " 'MAVIA/USDT:USDT',\n",
799
+ " 'ORDI/USDC:USDC',\n",
800
+ " 'GLM/USDT:USDT',\n",
801
+ " 'PORTAL/USDT:USDT',\n",
802
+ " 'TON/USDT:USDT',\n",
803
+ " 'AXL/USDT:USDT',\n",
804
+ " 'MYRO/USDT:USDT',\n",
805
+ " '1000PEPE/USDC:USDC',\n",
806
+ " 'METIS/USDT:USDT',\n",
807
+ " 'AEVO/USDT:USDT',\n",
808
+ " 'WLD/USDC:USDC',\n",
809
+ " 'VANRY/USDT:USDT',\n",
810
+ " 'BOME/USDT:USDT',\n",
811
+ " 'ETHFI/USDT:USDT',\n",
812
+ " 'AVAX/USDC:USDC',\n",
813
+ " '1000SHIB/USDC:USDC',\n",
814
+ " 'BTC/USDT:USDT-240927',\n",
815
+ " 'ETH/USDT:USDT-240927',\n",
816
+ " 'ENA/USDT:USDT',\n",
817
+ " 'W/USDT:USDT',\n",
818
+ " 'WIF/USDC:USDC',\n",
819
+ " 'BCH/USDC:USDC',\n",
820
+ " 'TNSR/USDT:USDT',\n",
821
+ " 'SAGA/USDT:USDT',\n",
822
+ " 'LTC/USDC:USDC',\n",
823
+ " 'NEAR/USDC:USDC',\n",
824
+ " 'TAO/USDT:USDT',\n",
825
+ " 'OMNI/USDT:USDT',\n",
826
+ " 'ARB/USDC:USDC',\n",
827
+ " 'NEO/USDC:USDC',\n",
828
+ " 'FIL/USDC:USDC',\n",
829
+ " 'MATIC/USDC:USDC',\n",
830
+ " 'TIA/USDC:USDC',\n",
831
+ " 'BOME/USDC:USDC',\n",
832
+ " 'REZ/USDT:USDT',\n",
833
+ " 'ENA/USDC:USDC',\n",
834
+ " 'ETHFI/USDC:USDC',\n",
835
+ " '1000BONK/USDC:USDC',\n",
836
+ " 'BB/USDT:USDT',\n",
837
+ " 'NOT/USDT:USDT',\n",
838
+ " 'TURBO/USDT:USDT',\n",
839
+ " 'IO/USDT:USDT',\n",
840
+ " 'ZK/USDT:USDT',\n",
841
+ " 'MEW/USDT:USDT',\n",
842
+ " 'LISTA/USDT:USDT',\n",
843
+ " 'ZRO/USDT:USDT',\n",
844
+ " 'BTC/USDT:USDT-241227',\n",
845
+ " 'ETH/USDT:USDT-241227',\n",
846
+ " 'CRV/USDC:USDC',\n",
847
+ " 'RENDER/USDT:USDT',\n",
848
+ " 'BANANA/USDT:USDT',\n",
849
+ " 'RARE/USDT:USDT',\n",
850
+ " 'G/USDT:USDT',\n",
851
+ " 'SYN/USDT:USDT',\n",
852
+ " 'SYS/USDT:USDT',\n",
853
+ " 'VOXEL/USDT:USDT',\n",
854
+ " 'BRETT/USDT:USDT',\n",
855
+ " 'ALPACA/USDT:USDT',\n",
856
+ " 'POPCAT/USDT:USDT',\n",
857
+ " 'SUN/USDT:USDT',\n",
858
+ " 'VIDT/USDT:USDT',\n",
859
+ " 'NULS/USDT:USDT',\n",
860
+ " 'DOGS/USDT:USDT',\n",
861
+ " 'MBOX/USDT:USDT',\n",
862
+ " 'CHESS/USDT:USDT',\n",
863
+ " 'FLUX/USDT:USDT',\n",
864
+ " 'BSW/USDT:USDT',\n",
865
+ " 'QUICK/USDT:USDT',\n",
866
+ " 'NEIROETH/USDT:USDT']"
867
+ ]
868
+ },
869
+ "execution_count": 11,
870
+ "metadata": {},
871
+ "output_type": "execute_result"
872
+ }
873
+ ],
874
+ "source": [
875
+ "binance_tickers"
876
+ ]
877
+ },
878
+ {
879
+ "cell_type": "code",
880
+ "execution_count": 12,
881
+ "id": "4ef7a85b",
882
+ "metadata": {},
883
+ "outputs": [
884
+ {
885
+ "data": {
886
+ "text/plain": [
887
+ "True"
888
+ ]
889
+ },
890
+ "execution_count": 12,
891
+ "metadata": {},
892
+ "output_type": "execute_result"
893
+ }
894
+ ],
895
+ "source": [
896
+ "'BTCST/USDT:USDT' in binance_tickers"
897
+ ]
898
+ },
899
+ {
900
+ "cell_type": "code",
901
+ "execution_count": 13,
112
902
  "id": "fe425163",
113
903
  "metadata": {},
114
904
  "outputs": [],
@@ -120,7 +910,28 @@
120
910
  },
121
911
  {
122
912
  "cell_type": "code",
123
- "execution_count": 8,
913
+ "execution_count": 14,
914
+ "id": "9c63cd43",
915
+ "metadata": {},
916
+ "outputs": [
917
+ {
918
+ "data": {
919
+ "text/plain": [
920
+ "True"
921
+ ]
922
+ },
923
+ "execution_count": 14,
924
+ "metadata": {},
925
+ "output_type": "execute_result"
926
+ }
927
+ ],
928
+ "source": [
929
+ "'BTCST' in cc_tickers"
930
+ ]
931
+ },
932
+ {
933
+ "cell_type": "code",
934
+ "execution_count": 15,
124
935
  "id": "165053db",
125
936
  "metadata": {},
126
937
  "outputs": [],
@@ -128,24 +939,408 @@
128
939
  "# keep only USDT ticker\n",
129
940
  "bin_tickers = []\n",
130
941
  "for ticker in binance_tickers:\n",
131
- " if '/' in ticker and ticker.split('/')[1] == 'USDT':\n",
942
+ " if '/' in ticker and ticker.split('/')[1] == 'USDT:USDT':\n",
132
943
  " bin_tickers.append(ticker.split('/')[0])"
133
944
  ]
134
945
  },
135
946
  {
136
947
  "cell_type": "code",
137
- "execution_count": 9,
948
+ "execution_count": 16,
949
+ "id": "ea69d661",
950
+ "metadata": {},
951
+ "outputs": [
952
+ {
953
+ "data": {
954
+ "text/plain": [
955
+ "301"
956
+ ]
957
+ },
958
+ "execution_count": 16,
959
+ "metadata": {},
960
+ "output_type": "execute_result"
961
+ }
962
+ ],
963
+ "source": [
964
+ "len(bin_tickers)"
965
+ ]
966
+ },
967
+ {
968
+ "cell_type": "code",
969
+ "execution_count": 17,
970
+ "id": "c93e487a",
971
+ "metadata": {},
972
+ "outputs": [
973
+ {
974
+ "data": {
975
+ "text/plain": [
976
+ "True"
977
+ ]
978
+ },
979
+ "execution_count": 17,
980
+ "metadata": {},
981
+ "output_type": "execute_result"
982
+ }
983
+ ],
984
+ "source": [
985
+ "'BTCST' in bin_tickers"
986
+ ]
987
+ },
988
+ {
989
+ "cell_type": "code",
990
+ "execution_count": 18,
991
+ "id": "3c8ce79e",
992
+ "metadata": {},
993
+ "outputs": [
994
+ {
995
+ "data": {
996
+ "text/plain": [
997
+ "['BTC',\n",
998
+ " 'ETH',\n",
999
+ " 'BCH',\n",
1000
+ " 'XRP',\n",
1001
+ " 'EOS',\n",
1002
+ " 'LTC',\n",
1003
+ " 'TRX',\n",
1004
+ " 'ETC',\n",
1005
+ " 'LINK',\n",
1006
+ " 'XLM',\n",
1007
+ " 'ADA',\n",
1008
+ " 'XMR',\n",
1009
+ " 'DASH',\n",
1010
+ " 'ZEC',\n",
1011
+ " 'XTZ',\n",
1012
+ " 'BNB',\n",
1013
+ " 'ATOM',\n",
1014
+ " 'ONT',\n",
1015
+ " 'IOTA',\n",
1016
+ " 'BAT',\n",
1017
+ " 'VET',\n",
1018
+ " 'NEO',\n",
1019
+ " 'QTUM',\n",
1020
+ " 'IOST',\n",
1021
+ " 'THETA',\n",
1022
+ " 'ALGO',\n",
1023
+ " 'ZIL',\n",
1024
+ " 'KNC',\n",
1025
+ " 'ZRX',\n",
1026
+ " 'COMP',\n",
1027
+ " 'OMG',\n",
1028
+ " 'DOGE',\n",
1029
+ " 'SXP',\n",
1030
+ " 'KAVA',\n",
1031
+ " 'BAND',\n",
1032
+ " 'RLC',\n",
1033
+ " 'WAVES',\n",
1034
+ " 'MKR',\n",
1035
+ " 'SNX',\n",
1036
+ " 'DOT',\n",
1037
+ " 'DEFI',\n",
1038
+ " 'YFI',\n",
1039
+ " 'BAL',\n",
1040
+ " 'CRV',\n",
1041
+ " 'TRB',\n",
1042
+ " 'RUNE',\n",
1043
+ " 'SUSHI',\n",
1044
+ " 'EGLD',\n",
1045
+ " 'SOL',\n",
1046
+ " 'ICX',\n",
1047
+ " 'STORJ',\n",
1048
+ " 'BLZ',\n",
1049
+ " 'UNI',\n",
1050
+ " 'AVAX',\n",
1051
+ " 'FTM',\n",
1052
+ " 'ENJ',\n",
1053
+ " 'FLM',\n",
1054
+ " 'REN',\n",
1055
+ " 'KSM',\n",
1056
+ " 'NEAR',\n",
1057
+ " 'AAVE',\n",
1058
+ " 'FIL',\n",
1059
+ " 'RSR',\n",
1060
+ " 'LRC',\n",
1061
+ " 'MATIC',\n",
1062
+ " 'OCEAN',\n",
1063
+ " 'CVC',\n",
1064
+ " 'BEL',\n",
1065
+ " 'CTK',\n",
1066
+ " 'AXS',\n",
1067
+ " 'ALPHA',\n",
1068
+ " 'ZEN',\n",
1069
+ " 'SKL',\n",
1070
+ " 'GRT',\n",
1071
+ " '1INCH',\n",
1072
+ " 'CHZ',\n",
1073
+ " 'SAND',\n",
1074
+ " 'ANKR',\n",
1075
+ " 'LIT',\n",
1076
+ " 'UNFI',\n",
1077
+ " 'REEF',\n",
1078
+ " 'RVN',\n",
1079
+ " 'SFP',\n",
1080
+ " 'XEM',\n",
1081
+ " 'BTCST',\n",
1082
+ " 'COTI',\n",
1083
+ " 'CHR',\n",
1084
+ " 'MANA',\n",
1085
+ " 'ALICE',\n",
1086
+ " 'HBAR',\n",
1087
+ " 'ONE',\n",
1088
+ " 'LINA',\n",
1089
+ " 'STMX',\n",
1090
+ " 'DENT',\n",
1091
+ " 'CELR',\n",
1092
+ " 'HOT',\n",
1093
+ " 'MTL',\n",
1094
+ " 'OGN',\n",
1095
+ " 'NKN',\n",
1096
+ " 'SC',\n",
1097
+ " 'DGB',\n",
1098
+ " '1000SHIB',\n",
1099
+ " 'BAKE',\n",
1100
+ " 'GTC',\n",
1101
+ " 'BTCDOM',\n",
1102
+ " 'IOTX',\n",
1103
+ " 'RAY',\n",
1104
+ " 'C98',\n",
1105
+ " 'MASK',\n",
1106
+ " 'ATA',\n",
1107
+ " 'DYDX',\n",
1108
+ " '1000XEC',\n",
1109
+ " 'GALA',\n",
1110
+ " 'CELO',\n",
1111
+ " 'AR',\n",
1112
+ " 'KLAY',\n",
1113
+ " 'ARPA',\n",
1114
+ " 'CTSI',\n",
1115
+ " 'LPT',\n",
1116
+ " 'ENS',\n",
1117
+ " 'PEOPLE',\n",
1118
+ " 'ROSE',\n",
1119
+ " 'DUSK',\n",
1120
+ " 'FLOW',\n",
1121
+ " 'IMX',\n",
1122
+ " 'API3',\n",
1123
+ " 'GMT',\n",
1124
+ " 'APE',\n",
1125
+ " 'WOO',\n",
1126
+ " 'FTT',\n",
1127
+ " 'JASMY',\n",
1128
+ " 'DAR',\n",
1129
+ " 'OP',\n",
1130
+ " 'INJ',\n",
1131
+ " 'STG',\n",
1132
+ " 'SPELL',\n",
1133
+ " '1000LUNC',\n",
1134
+ " 'LUNA2',\n",
1135
+ " 'LDO',\n",
1136
+ " 'CVX',\n",
1137
+ " 'ICP',\n",
1138
+ " 'APT',\n",
1139
+ " 'QNT',\n",
1140
+ " 'FET',\n",
1141
+ " 'FXS',\n",
1142
+ " 'HOOK',\n",
1143
+ " 'MAGIC',\n",
1144
+ " 'T',\n",
1145
+ " 'HIGH',\n",
1146
+ " 'MINA',\n",
1147
+ " 'ASTR',\n",
1148
+ " 'AGIX',\n",
1149
+ " 'PHB',\n",
1150
+ " 'GMX',\n",
1151
+ " 'CFX',\n",
1152
+ " 'STX',\n",
1153
+ " 'BNX',\n",
1154
+ " 'ACH',\n",
1155
+ " 'SSV',\n",
1156
+ " 'CKB',\n",
1157
+ " 'PERP',\n",
1158
+ " 'TRU',\n",
1159
+ " 'LQTY',\n",
1160
+ " 'USDC',\n",
1161
+ " 'ID',\n",
1162
+ " 'ARB',\n",
1163
+ " 'JOE',\n",
1164
+ " 'TLM',\n",
1165
+ " 'AMB',\n",
1166
+ " 'LEVER',\n",
1167
+ " 'RDNT',\n",
1168
+ " 'HFT',\n",
1169
+ " 'XVS',\n",
1170
+ " 'BLUR',\n",
1171
+ " 'EDU',\n",
1172
+ " 'IDEX',\n",
1173
+ " 'SUI',\n",
1174
+ " '1000PEPE',\n",
1175
+ " '1000FLOKI',\n",
1176
+ " 'UMA',\n",
1177
+ " 'RAD',\n",
1178
+ " 'KEY',\n",
1179
+ " 'COMBO',\n",
1180
+ " 'NMR',\n",
1181
+ " 'MAV',\n",
1182
+ " 'MDT',\n",
1183
+ " 'XVG',\n",
1184
+ " 'WLD',\n",
1185
+ " 'PENDLE',\n",
1186
+ " 'ARKM',\n",
1187
+ " 'AGLD',\n",
1188
+ " 'YGG',\n",
1189
+ " 'DODOX',\n",
1190
+ " 'BNT',\n",
1191
+ " 'OXT',\n",
1192
+ " 'SEI',\n",
1193
+ " 'CYBER',\n",
1194
+ " 'HIFI',\n",
1195
+ " 'ARK',\n",
1196
+ " 'FRONT',\n",
1197
+ " 'GLMR',\n",
1198
+ " 'BICO',\n",
1199
+ " 'STRAX',\n",
1200
+ " 'LOOM',\n",
1201
+ " 'BIGTIME',\n",
1202
+ " 'BOND',\n",
1203
+ " 'ORBS',\n",
1204
+ " 'STPT',\n",
1205
+ " 'WAXP',\n",
1206
+ " 'BSV',\n",
1207
+ " 'RIF',\n",
1208
+ " 'POLYX',\n",
1209
+ " 'GAS',\n",
1210
+ " 'POWR',\n",
1211
+ " 'SLP',\n",
1212
+ " 'TIA',\n",
1213
+ " 'SNT',\n",
1214
+ " 'CAKE',\n",
1215
+ " 'MEME',\n",
1216
+ " 'TWT',\n",
1217
+ " 'TOKEN',\n",
1218
+ " 'ORDI',\n",
1219
+ " 'STEEM',\n",
1220
+ " 'BADGER',\n",
1221
+ " 'ILV',\n",
1222
+ " 'NTRN',\n",
1223
+ " 'KAS',\n",
1224
+ " 'BEAMX',\n",
1225
+ " '1000BONK',\n",
1226
+ " 'PYTH',\n",
1227
+ " 'SUPER',\n",
1228
+ " 'USTC',\n",
1229
+ " 'ONG',\n",
1230
+ " 'ETHW',\n",
1231
+ " 'JTO',\n",
1232
+ " '1000SATS',\n",
1233
+ " 'AUCTION',\n",
1234
+ " '1000RATS',\n",
1235
+ " 'ACE',\n",
1236
+ " 'MOVR',\n",
1237
+ " 'NFP',\n",
1238
+ " 'AI',\n",
1239
+ " 'XAI',\n",
1240
+ " 'WIF',\n",
1241
+ " 'MANTA',\n",
1242
+ " 'ONDO',\n",
1243
+ " 'LSK',\n",
1244
+ " 'ALT',\n",
1245
+ " 'JUP',\n",
1246
+ " 'ZETA',\n",
1247
+ " 'RONIN',\n",
1248
+ " 'DYM',\n",
1249
+ " 'OM',\n",
1250
+ " 'PIXEL',\n",
1251
+ " 'STRK',\n",
1252
+ " 'MAVIA',\n",
1253
+ " 'GLM',\n",
1254
+ " 'PORTAL',\n",
1255
+ " 'TON',\n",
1256
+ " 'AXL',\n",
1257
+ " 'MYRO',\n",
1258
+ " 'METIS',\n",
1259
+ " 'AEVO',\n",
1260
+ " 'VANRY',\n",
1261
+ " 'BOME',\n",
1262
+ " 'ETHFI',\n",
1263
+ " 'ENA',\n",
1264
+ " 'W',\n",
1265
+ " 'TNSR',\n",
1266
+ " 'SAGA',\n",
1267
+ " 'TAO',\n",
1268
+ " 'OMNI',\n",
1269
+ " 'REZ',\n",
1270
+ " 'BB',\n",
1271
+ " 'NOT',\n",
1272
+ " 'TURBO',\n",
1273
+ " 'IO',\n",
1274
+ " 'ZK',\n",
1275
+ " 'MEW',\n",
1276
+ " 'LISTA',\n",
1277
+ " 'ZRO',\n",
1278
+ " 'RENDER',\n",
1279
+ " 'BANANA',\n",
1280
+ " 'RARE',\n",
1281
+ " 'G',\n",
1282
+ " 'SYN',\n",
1283
+ " 'SYS',\n",
1284
+ " 'VOXEL',\n",
1285
+ " 'BRETT',\n",
1286
+ " 'ALPACA',\n",
1287
+ " 'POPCAT',\n",
1288
+ " 'SUN',\n",
1289
+ " 'VIDT',\n",
1290
+ " 'NULS',\n",
1291
+ " 'DOGS',\n",
1292
+ " 'MBOX',\n",
1293
+ " 'CHESS',\n",
1294
+ " 'FLUX',\n",
1295
+ " 'BSW',\n",
1296
+ " 'QUICK',\n",
1297
+ " 'NEIROETH']"
1298
+ ]
1299
+ },
1300
+ "execution_count": 18,
1301
+ "metadata": {},
1302
+ "output_type": "execute_result"
1303
+ }
1304
+ ],
1305
+ "source": [
1306
+ "bin_tickers"
1307
+ ]
1308
+ },
1309
+ {
1310
+ "cell_type": "code",
1311
+ "execution_count": 19,
138
1312
  "id": "d6cf8a4c",
139
1313
  "metadata": {},
140
1314
  "outputs": [],
141
1315
  "source": [
142
1316
  "# usdt tickers\n",
143
- "usdt_tickers = [ticker.split('/')[0] for ticker in binance_tickers if '/'in ticker and ticker.split('/')[1] == 'USDT']"
1317
+ "usdt_tickers = [ticker.split('/')[0] for ticker in binance_tickers if '/'in ticker and ticker.split('/')[1] == 'USDT:USDT']"
144
1318
  ]
145
1319
  },
146
1320
  {
147
1321
  "cell_type": "code",
148
- "execution_count": 10,
1322
+ "execution_count": 20,
1323
+ "id": "11ec0e6d",
1324
+ "metadata": {},
1325
+ "outputs": [
1326
+ {
1327
+ "data": {
1328
+ "text/plain": [
1329
+ "301"
1330
+ ]
1331
+ },
1332
+ "execution_count": 20,
1333
+ "metadata": {},
1334
+ "output_type": "execute_result"
1335
+ }
1336
+ ],
1337
+ "source": [
1338
+ "len(usdt_tickers)"
1339
+ ]
1340
+ },
1341
+ {
1342
+ "cell_type": "code",
1343
+ "execution_count": 21,
149
1344
  "id": "633f7a3e",
150
1345
  "metadata": {},
151
1346
  "outputs": [],
@@ -156,17 +1351,17 @@
156
1351
  },
157
1352
  {
158
1353
  "cell_type": "code",
159
- "execution_count": 11,
1354
+ "execution_count": 22,
160
1355
  "id": "30337a71",
161
1356
  "metadata": {},
162
1357
  "outputs": [
163
1358
  {
164
1359
  "data": {
165
1360
  "text/plain": [
166
- "0"
1361
+ "289"
167
1362
  ]
168
1363
  },
169
- "execution_count": 11,
1364
+ "execution_count": 22,
170
1365
  "metadata": {},
171
1366
  "output_type": "execute_result"
172
1367
  }
@@ -176,53 +1371,134 @@
176
1371
  ]
177
1372
  },
178
1373
  {
179
- "cell_type": "markdown",
180
- "id": "f80eb97d",
1374
+ "cell_type": "code",
1375
+ "execution_count": 23,
1376
+ "id": "7bb3b25f",
181
1377
  "metadata": {},
1378
+ "outputs": [
1379
+ {
1380
+ "data": {
1381
+ "text/plain": [
1382
+ "True"
1383
+ ]
1384
+ },
1385
+ "execution_count": 23,
1386
+ "metadata": {},
1387
+ "output_type": "execute_result"
1388
+ }
1389
+ ],
182
1390
  "source": [
183
- "### Binance Perp Futures"
1391
+ "'USDC' in tickers"
184
1392
  ]
185
1393
  },
186
1394
  {
187
1395
  "cell_type": "code",
188
- "execution_count": 12,
189
- "id": "49b09508",
1396
+ "execution_count": 24,
1397
+ "id": "a8e7f96e-107c-4d13-bf2e-ad967e1cd498",
190
1398
  "metadata": {},
191
1399
  "outputs": [],
192
1400
  "source": [
193
- "# pull daily OHLC and funding rates for perp futures on Binance USDM exchange\n",
194
- "data_req = DataRequest(source='ccxt',\n",
195
- " tickers=tickers, \n",
196
- " fields=['open', 'high', 'low', 'close', 'volume', 'funding_rate'], \n",
197
- " mkt_type='perpetual_future', \n",
198
- " freq='d')"
1401
+ "tickers.remove('USDC')"
199
1402
  ]
200
1403
  },
201
1404
  {
202
1405
  "cell_type": "code",
203
- "execution_count": 13,
204
- "id": "6ac9365b",
1406
+ "execution_count": 25,
1407
+ "id": "6fb552cc",
205
1408
  "metadata": {},
206
1409
  "outputs": [],
207
1410
  "source": [
208
- "# df1 = GetData(data_req).get_series()"
1411
+ "for tick in tickers:\n",
1412
+ " if tick[:3] == 'USD':\n",
1413
+ " print(tick)"
209
1414
  ]
210
1415
  },
211
1416
  {
212
1417
  "cell_type": "code",
213
- "execution_count": 14,
214
- "id": "98a425b2",
1418
+ "execution_count": 26,
1419
+ "id": "4d353f30-2fb2-4e3f-ac8d-e74379622a7d",
1420
+ "metadata": {},
1421
+ "outputs": [
1422
+ {
1423
+ "data": {
1424
+ "text/plain": [
1425
+ "['BTC', 'ETH', 'BCH', 'XRP', 'EOS', 'LTC', 'TRX', 'ETC', 'LINK', 'XLM']"
1426
+ ]
1427
+ },
1428
+ "execution_count": 26,
1429
+ "metadata": {},
1430
+ "output_type": "execute_result"
1431
+ }
1432
+ ],
1433
+ "source": [
1434
+ "tickers[:10]"
1435
+ ]
1436
+ },
1437
+ {
1438
+ "cell_type": "markdown",
1439
+ "id": "f80eb97d",
215
1440
  "metadata": {},
216
- "outputs": [],
217
1441
  "source": [
218
- "# df1.to_csv('binance_perp_futures.csv')\n",
219
- "df1 = pd.read_csv('../../../../factorlab/notebooks/binance_perp_futures.csv', index_col=['date', 'ticker'], parse_dates=['date'])"
1442
+ "### Binance Perp Futures"
220
1443
  ]
221
1444
  },
222
1445
  {
223
1446
  "cell_type": "code",
224
- "execution_count": 15,
225
- "id": "0e04da4a",
1447
+ "execution_count": 27,
1448
+ "id": "49b09508",
1449
+ "metadata": {},
1450
+ "outputs": [],
1451
+ "source": [
1452
+ "# pull daily OHLC and funding rates for perp futures on Binance USDM exchange\n",
1453
+ "data_req = DataRequest(source='ccxt',\n",
1454
+ " tickers=tickers, \n",
1455
+ " fields=['open', 'high', 'low', 'close', 'volume', 'funding_rate'], \n",
1456
+ " mkt_type='perpetual_future', \n",
1457
+ " freq='d')"
1458
+ ]
1459
+ },
1460
+ {
1461
+ "cell_type": "code",
1462
+ "execution_count": 28,
1463
+ "id": "6ac9365b",
1464
+ "metadata": {},
1465
+ "outputs": [
1466
+ {
1467
+ "name": "stderr",
1468
+ "output_type": "stream",
1469
+ "text": [
1470
+ "WARNING:root:Failed to get ohlcv data for BTCST/USDT:USDT.\n",
1471
+ "WARNING:root:binanceusdm {\"code\":-1122,\"msg\":\"Invalid symbol status.\"}\n",
1472
+ "WARNING:root:Failed to pull data on attempt #1.\n",
1473
+ "WARNING:root:Failed to get ohlcv data for BTCST/USDT:USDT.\n",
1474
+ "WARNING:root:binanceusdm {\"code\":-1122,\"msg\":\"Invalid symbol status.\"}\n",
1475
+ "WARNING:root:Failed to pull data on attempt #2.\n",
1476
+ "WARNING:root:Failed to get ohlcv data for BTCST/USDT:USDT.\n",
1477
+ "WARNING:root:binanceusdm {\"code\":-1122,\"msg\":\"Invalid symbol status.\"}\n",
1478
+ "WARNING:root:Failed to pull data on attempt #3.\n",
1479
+ "WARNING:root:Failed to get OHLCV data from binanceusdm for BTCST/USDT:USDT after many attempts.\n"
1480
+ ]
1481
+ }
1482
+ ],
1483
+ "source": [
1484
+ "df1 = GetData(data_req).get_series()"
1485
+ ]
1486
+ },
1487
+ {
1488
+ "cell_type": "code",
1489
+ "execution_count": 29,
1490
+ "id": "98a425b2",
1491
+ "metadata": {},
1492
+ "outputs": [],
1493
+ "source": [
1494
+ "# # df1.to_csv('binance_perp_futures.csv')\n",
1495
+ "# df1 = pd.read_csv('../../../../factorlab/notebooks/binance_perp_futures.csv', index_col=['date', 'ticker'], parse_dates=['date'])"
1496
+ ]
1497
+ },
1498
+ {
1499
+ "cell_type": "code",
1500
+ "execution_count": 30,
1501
+ "id": "0e04da4a",
226
1502
  "metadata": {},
227
1503
  "outputs": [
228
1504
  {
@@ -269,12 +1545,12 @@
269
1545
  " <tr>\n",
270
1546
  " <th>2019-09-08</th>\n",
271
1547
  " <th>BTC</th>\n",
272
- " <td>10000.00</td>\n",
1548
+ " <td>10000.0</td>\n",
273
1549
  " <td>10412.65</td>\n",
274
- " <td>10000.00</td>\n",
1550
+ " <td>10000.0</td>\n",
275
1551
  " <td>10391.63</td>\n",
276
1552
  " <td>3096.291</td>\n",
277
- " <td>NaN</td>\n",
1553
+ " <td>&lt;NA&gt;</td>\n",
278
1554
  " </tr>\n",
279
1555
  " <tr>\n",
280
1556
  " <th>2019-09-09</th>\n",
@@ -282,14 +1558,14 @@
282
1558
  " <td>10316.62</td>\n",
283
1559
  " <td>10475.54</td>\n",
284
1560
  " <td>10077.22</td>\n",
285
- " <td>10307.00</td>\n",
1561
+ " <td>10307.0</td>\n",
286
1562
  " <td>14824.373</td>\n",
287
- " <td>NaN</td>\n",
1563
+ " <td>&lt;NA&gt;</td>\n",
288
1564
  " </tr>\n",
289
1565
  " <tr>\n",
290
1566
  " <th>2019-09-10</th>\n",
291
1567
  " <th>BTC</th>\n",
292
- " <td>10307.00</td>\n",
1568
+ " <td>10307.0</td>\n",
293
1569
  " <td>10382.97</td>\n",
294
1570
  " <td>9940.87</td>\n",
295
1571
  " <td>10102.02</td>\n",
@@ -323,22 +1599,22 @@
323
1599
  "text/plain": [
324
1600
  " open high low close volume \\\n",
325
1601
  "date ticker \n",
326
- "2019-09-08 BTC 10000.00 10412.65 10000.00 10391.63 3096.291 \n",
327
- "2019-09-09 BTC 10316.62 10475.54 10077.22 10307.00 14824.373 \n",
328
- "2019-09-10 BTC 10307.00 10382.97 9940.87 10102.02 9068.955 \n",
1602
+ "2019-09-08 BTC 10000.0 10412.65 10000.0 10391.63 3096.291 \n",
1603
+ "2019-09-09 BTC 10316.62 10475.54 10077.22 10307.0 14824.373 \n",
1604
+ "2019-09-10 BTC 10307.0 10382.97 9940.87 10102.02 9068.955 \n",
329
1605
  "2019-09-11 BTC 10094.27 10293.11 9884.31 10159.55 10897.922 \n",
330
1606
  "2019-09-12 BTC 10163.06 10450.13 10042.12 10415.13 15609.634 \n",
331
1607
  "\n",
332
1608
  " funding_rate \n",
333
1609
  "date ticker \n",
334
- "2019-09-08 BTC NaN \n",
335
- "2019-09-09 BTC NaN \n",
1610
+ "2019-09-08 BTC <NA> \n",
1611
+ "2019-09-09 BTC <NA> \n",
336
1612
  "2019-09-10 BTC 0.0002 \n",
337
1613
  "2019-09-11 BTC 0.0003 \n",
338
1614
  "2019-09-12 BTC 0.0003 "
339
1615
  ]
340
1616
  },
341
- "execution_count": 15,
1617
+ "execution_count": 30,
342
1618
  "metadata": {},
343
1619
  "output_type": "execute_result"
344
1620
  }
@@ -347,6 +1623,27 @@
347
1623
  "df1.head()"
348
1624
  ]
349
1625
  },
1626
+ {
1627
+ "cell_type": "code",
1628
+ "execution_count": 32,
1629
+ "id": "9bf4c202-f352-4bc8-9e22-5ce3b77fe72b",
1630
+ "metadata": {},
1631
+ "outputs": [
1632
+ {
1633
+ "data": {
1634
+ "text/plain": [
1635
+ "(288,)"
1636
+ ]
1637
+ },
1638
+ "execution_count": 32,
1639
+ "metadata": {},
1640
+ "output_type": "execute_result"
1641
+ }
1642
+ ],
1643
+ "source": [
1644
+ "df1.index.get_level_values(1).unique().shape"
1645
+ ]
1646
+ },
350
1647
  {
351
1648
  "cell_type": "markdown",
352
1649
  "id": "32f15191",
@@ -357,7 +1654,7 @@
357
1654
  },
358
1655
  {
359
1656
  "cell_type": "code",
360
- "execution_count": 16,
1657
+ "execution_count": 33,
361
1658
  "id": "83e9e466",
362
1659
  "metadata": {},
363
1660
  "outputs": [],
@@ -371,28 +1668,47 @@
371
1668
  },
372
1669
  {
373
1670
  "cell_type": "code",
374
- "execution_count": 17,
1671
+ "execution_count": 34,
375
1672
  "id": "82d4bbc7",
376
1673
  "metadata": {},
377
- "outputs": [],
1674
+ "outputs": [
1675
+ {
1676
+ "name": "stderr",
1677
+ "output_type": "stream",
1678
+ "text": [
1679
+ "WARNING:root:Missing recent OHLCV data for XMR/USDT.\n",
1680
+ "WARNING:root:Missing recent OHLCV data for OMG/USDT.\n",
1681
+ "WARNING:root:Missing recent OHLCV data for WAVES/USDT.\n",
1682
+ "WARNING:root:Missing recent OHLCV data for OCEAN/USDT.\n",
1683
+ "WARNING:root:Missing recent OHLCV data for REEF/USDT.\n",
1684
+ "WARNING:root:Missing recent OHLCV data for XEM/USDT.\n",
1685
+ "WARNING:root:Missing recent OHLCV data for BTCST/USDT.\n",
1686
+ "WARNING:root:Missing recent OHLCV data for AGIX/USDT.\n",
1687
+ "WARNING:root:Missing recent OHLCV data for FRONT/USDT.\n",
1688
+ "WARNING:root:Missing recent OHLCV data for LOOM/USDT.\n",
1689
+ "WARNING:root:Missing recent OHLCV data for BOND/USDT.\n",
1690
+ "WARNING:root:Missing recent OHLCV data for BSV/USDT.\n"
1691
+ ]
1692
+ }
1693
+ ],
378
1694
  "source": [
379
- "# df2 = GetData(data_req).get_series()"
1695
+ "df2 = GetData(data_req).get_series()"
380
1696
  ]
381
1697
  },
382
1698
  {
383
1699
  "cell_type": "code",
384
- "execution_count": 18,
1700
+ "execution_count": 35,
385
1701
  "id": "4f63eb21",
386
1702
  "metadata": {},
387
1703
  "outputs": [],
388
1704
  "source": [
389
- "# df2.to_csv('binance_spot.csv')\n",
390
- "df2 = pd.read_csv('../../../../factorlab/notebooks/binance_spot.csv', index_col=['date', 'ticker'], parse_dates=['date'])"
1705
+ "# # df2.to_csv('binance_spot.csv')\n",
1706
+ "# df2 = pd.read_csv('../../../../factorlab/notebooks/binance_spot.csv', index_col=['date', 'ticker'], parse_dates=['date'])"
391
1707
  ]
392
1708
  },
393
1709
  {
394
1710
  "cell_type": "code",
395
- "execution_count": 19,
1711
+ "execution_count": 36,
396
1712
  "id": "ce8929c1",
397
1713
  "metadata": {},
398
1714
  "outputs": [
@@ -448,9 +1764,9 @@
448
1764
  " <th>ETH</th>\n",
449
1765
  " <td>301.13</td>\n",
450
1766
  " <td>312.18</td>\n",
451
- " <td>298.00</td>\n",
452
- " <td>302.00</td>\n",
453
- " <td>7030.710340</td>\n",
1767
+ " <td>298.0</td>\n",
1768
+ " <td>302.0</td>\n",
1769
+ " <td>7030.71034</td>\n",
454
1770
  " </tr>\n",
455
1771
  " <tr>\n",
456
1772
  " <th rowspan=\"2\" valign=\"top\">2017-08-18</th>\n",
@@ -463,18 +1779,18 @@
463
1779
  " </tr>\n",
464
1780
  " <tr>\n",
465
1781
  " <th>ETH</th>\n",
466
- " <td>302.00</td>\n",
1782
+ " <td>302.0</td>\n",
467
1783
  " <td>311.79</td>\n",
468
1784
  " <td>283.94</td>\n",
469
1785
  " <td>293.96</td>\n",
470
- " <td>9537.846460</td>\n",
1786
+ " <td>9537.84646</td>\n",
471
1787
  " </tr>\n",
472
1788
  " <tr>\n",
473
1789
  " <th>2017-08-19</th>\n",
474
1790
  " <th>BTC</th>\n",
475
1791
  " <td>4108.37</td>\n",
476
1792
  " <td>4184.69</td>\n",
477
- " <td>3850.00</td>\n",
1793
+ " <td>3850.0</td>\n",
478
1794
  " <td>4139.98</td>\n",
479
1795
  " <td>381.309763</td>\n",
480
1796
  " </tr>\n",
@@ -486,13 +1802,13 @@
486
1802
  " open high low close volume\n",
487
1803
  "date ticker \n",
488
1804
  "2017-08-17 BTC 4261.48 4485.39 4200.74 4285.08 795.150377\n",
489
- " ETH 301.13 312.18 298.00 302.00 7030.710340\n",
1805
+ " ETH 301.13 312.18 298.0 302.0 7030.71034\n",
490
1806
  "2017-08-18 BTC 4285.08 4371.52 3938.77 4108.37 1199.888264\n",
491
- " ETH 302.00 311.79 283.94 293.96 9537.846460\n",
492
- "2017-08-19 BTC 4108.37 4184.69 3850.00 4139.98 381.309763"
1807
+ " ETH 302.0 311.79 283.94 293.96 9537.84646\n",
1808
+ "2017-08-19 BTC 4108.37 4184.69 3850.0 4139.98 381.309763"
493
1809
  ]
494
1810
  },
495
- "execution_count": 19,
1811
+ "execution_count": 36,
496
1812
  "metadata": {},
497
1813
  "output_type": "execute_result"
498
1814
  }
@@ -501,6 +1817,27 @@
501
1817
  "df2.head()"
502
1818
  ]
503
1819
  },
1820
+ {
1821
+ "cell_type": "code",
1822
+ "execution_count": 37,
1823
+ "id": "35b3d731-2a0f-4ec2-9444-f79d5cb7e680",
1824
+ "metadata": {},
1825
+ "outputs": [
1826
+ {
1827
+ "data": {
1828
+ "text/plain": [
1829
+ "(288,)"
1830
+ ]
1831
+ },
1832
+ "execution_count": 37,
1833
+ "metadata": {},
1834
+ "output_type": "execute_result"
1835
+ }
1836
+ ],
1837
+ "source": [
1838
+ "df2.index.get_level_values(1).unique().shape"
1839
+ ]
1840
+ },
504
1841
  {
505
1842
  "cell_type": "markdown",
506
1843
  "id": "05f93b91",
@@ -511,7 +1848,7 @@
511
1848
  },
512
1849
  {
513
1850
  "cell_type": "code",
514
- "execution_count": 20,
1851
+ "execution_count": 38,
515
1852
  "id": "7f14d874",
516
1853
  "metadata": {},
517
1854
  "outputs": [],
@@ -525,48 +1862,29 @@
525
1862
  },
526
1863
  {
527
1864
  "cell_type": "code",
528
- "execution_count": 21,
1865
+ "execution_count": 39,
529
1866
  "id": "3a8708d3",
530
1867
  "metadata": {},
531
1868
  "outputs": [],
532
1869
  "source": [
533
- "# df3 = GetData(data_req).get_series()"
1870
+ "df3 = GetData(data_req).get_series()"
534
1871
  ]
535
1872
  },
536
1873
  {
537
1874
  "cell_type": "code",
538
- "execution_count": 22,
1875
+ "execution_count": 40,
539
1876
  "id": "aa265538",
540
1877
  "metadata": {},
541
1878
  "outputs": [],
542
1879
  "source": [
543
- "# df3.to_csv('cc_spot.csv')\n",
544
- "df3 = pd.read_csv('../../../../factorlab/notebooks/cc_spot.csv', index_col=['date', 'ticker'], parse_dates=['date'])"
545
- ]
546
- },
547
- {
548
- "cell_type": "markdown",
549
- "id": "5664e968",
550
- "metadata": {},
551
- "source": [
552
- "### Clean Data"
1880
+ "# # df3.to_csv('cc_spot.csv')\n",
1881
+ "# df3 = pd.read_csv('../../../../factorlab/notebooks/cc_spot.csv', index_col=['date', 'ticker'], parse_dates=['date'])"
553
1882
  ]
554
1883
  },
555
1884
  {
556
1885
  "cell_type": "code",
557
- "execution_count": 23,
558
- "id": "f5ee4f6d",
559
- "metadata": {},
560
- "outputs": [],
561
- "source": [
562
- "df = stitch_dataframes([df1, df2, df3])\n",
563
- "df.funding_rate = df.funding_rate.fillna(0)"
564
- ]
565
- },
566
- {
567
- "cell_type": "code",
568
- "execution_count": 24,
569
- "id": "cbe07c91",
1886
+ "execution_count": 41,
1887
+ "id": "17274df7",
570
1888
  "metadata": {},
571
1889
  "outputs": [
572
1890
  {
@@ -596,7 +1914,6 @@
596
1914
  " <th>low</th>\n",
597
1915
  " <th>close</th>\n",
598
1916
  " <th>volume</th>\n",
599
- " <th>funding_rate</th>\n",
600
1917
  " </tr>\n",
601
1918
  " <tr>\n",
602
1919
  " <th>date</th>\n",
@@ -606,7 +1923,6 @@
606
1923
  " <th></th>\n",
607
1924
  " <th></th>\n",
608
1925
  " <th></th>\n",
609
- " <th></th>\n",
610
1926
  " </tr>\n",
611
1927
  " </thead>\n",
612
1928
  " <tbody>\n",
@@ -617,8 +1933,7 @@
617
1933
  " <td>0.04951</td>\n",
618
1934
  " <td>0.04951</td>\n",
619
1935
  " <td>0.04951</td>\n",
620
- " <td>20.00</td>\n",
621
- " <td>0.0</td>\n",
1936
+ " <td>20.0</td>\n",
622
1937
  " </tr>\n",
623
1938
  " <tr>\n",
624
1939
  " <th>2010-07-18</th>\n",
@@ -628,7 +1943,6 @@
628
1943
  " <td>0.04951</td>\n",
629
1944
  " <td>0.08584</td>\n",
630
1945
  " <td>75.01</td>\n",
631
- " <td>0.0</td>\n",
632
1946
  " </tr>\n",
633
1947
  " <tr>\n",
634
1948
  " <th>2010-07-19</th>\n",
@@ -636,19 +1950,17 @@
636
1950
  " <td>0.08584</td>\n",
637
1951
  " <td>0.09307</td>\n",
638
1952
  " <td>0.07723</td>\n",
639
- " <td>0.08080</td>\n",
640
- " <td>574.00</td>\n",
641
- " <td>0.0</td>\n",
1953
+ " <td>0.0808</td>\n",
1954
+ " <td>574.0</td>\n",
642
1955
  " </tr>\n",
643
1956
  " <tr>\n",
644
1957
  " <th>2010-07-20</th>\n",
645
1958
  " <th>BTC</th>\n",
646
- " <td>0.08080</td>\n",
1959
+ " <td>0.0808</td>\n",
647
1960
  " <td>0.08181</td>\n",
648
1961
  " <td>0.07426</td>\n",
649
1962
  " <td>0.07474</td>\n",
650
- " <td>262.00</td>\n",
651
- " <td>0.0</td>\n",
1963
+ " <td>262.0</td>\n",
652
1964
  " </tr>\n",
653
1965
  " <tr>\n",
654
1966
  " <th>2010-07-21</th>\n",
@@ -657,113 +1969,85 @@
657
1969
  " <td>0.07921</td>\n",
658
1970
  " <td>0.06634</td>\n",
659
1971
  " <td>0.07921</td>\n",
660
- " <td>575.00</td>\n",
661
- " <td>0.0</td>\n",
1972
+ " <td>575.0</td>\n",
662
1973
  " </tr>\n",
663
1974
  " </tbody>\n",
664
1975
  "</table>\n",
665
1976
  "</div>"
666
1977
  ],
667
1978
  "text/plain": [
668
- " open high low close volume funding_rate\n",
669
- "date ticker \n",
670
- "2010-07-17 BTC 0.04951 0.04951 0.04951 0.04951 20.00 0.0\n",
671
- "2010-07-18 BTC 0.04951 0.08585 0.04951 0.08584 75.01 0.0\n",
672
- "2010-07-19 BTC 0.08584 0.09307 0.07723 0.08080 574.00 0.0\n",
673
- "2010-07-20 BTC 0.08080 0.08181 0.07426 0.07474 262.00 0.0\n",
674
- "2010-07-21 BTC 0.07474 0.07921 0.06634 0.07921 575.00 0.0"
1979
+ " open high low close volume\n",
1980
+ "date ticker \n",
1981
+ "2010-07-17 BTC 0.04951 0.04951 0.04951 0.04951 20.0\n",
1982
+ "2010-07-18 BTC 0.04951 0.08585 0.04951 0.08584 75.01\n",
1983
+ "2010-07-19 BTC 0.08584 0.09307 0.07723 0.0808 574.0\n",
1984
+ "2010-07-20 BTC 0.0808 0.08181 0.07426 0.07474 262.0\n",
1985
+ "2010-07-21 BTC 0.07474 0.07921 0.06634 0.07921 575.0"
675
1986
  ]
676
1987
  },
677
- "execution_count": 24,
1988
+ "execution_count": 41,
678
1989
  "metadata": {},
679
1990
  "output_type": "execute_result"
680
1991
  }
681
1992
  ],
682
1993
  "source": [
683
- "df.head()"
1994
+ "df3.head()"
684
1995
  ]
685
1996
  },
686
1997
  {
687
1998
  "cell_type": "code",
688
- "execution_count": 25,
689
- "id": "d4c497d1",
1999
+ "execution_count": 42,
2000
+ "id": "4d8c7b38-4c3d-4c97-8f8d-34fb88c29229",
2001
+ "metadata": {},
2002
+ "outputs": [
2003
+ {
2004
+ "data": {
2005
+ "text/plain": [
2006
+ "(285,)"
2007
+ ]
2008
+ },
2009
+ "execution_count": 42,
2010
+ "metadata": {},
2011
+ "output_type": "execute_result"
2012
+ }
2013
+ ],
2014
+ "source": [
2015
+ "df3.index.get_level_values(1).unique().shape"
2016
+ ]
2017
+ },
2018
+ {
2019
+ "cell_type": "markdown",
2020
+ "id": "5664e968",
690
2021
  "metadata": {},
691
- "outputs": [],
692
2022
  "source": [
693
- "delisted_tickers = ['AGIX', 'CTK', 'CVC', 'CVX', 'DGB', 'FTT', 'GLMR', 'IDEX', 'MDT',\n",
694
- " 'OCEAN', 'RAD', 'RAY', 'SC', 'SLP', 'SNT', 'STPT', 'STRAX', 'WAVES']"
2023
+ "### Clean Data"
695
2024
  ]
696
2025
  },
697
2026
  {
698
2027
  "cell_type": "code",
699
- "execution_count": 26,
700
- "id": "a9b1764c",
2028
+ "execution_count": 43,
2029
+ "id": "f5ee4f6d",
701
2030
  "metadata": {},
702
- "outputs": [
703
- {
704
- "name": "stdout",
705
- "output_type": "stream",
706
- "text": [
707
- "Index(['AGIX', 'CTK', 'CVC', 'CVX', 'DGB', 'FTT', 'GLMR', 'IDEX', 'MDT',\n",
708
- " 'OCEAN', 'RAD', 'RAY', 'SC', 'SLP', 'SNT', 'STPT', 'STRAX', 'WAVES'],\n",
709
- " dtype='object', name='ticker')\n"
710
- ]
711
- }
712
- ],
2031
+ "outputs": [],
713
2032
  "source": [
714
- "# clean data\n",
715
- "clean_df = CleanData(df).filter_delisted_tickers().\\\n",
716
- " filter_min_nobs(ts_obs=1500, cs_obs=10).\\\n",
717
- " filter_outliers(od_method='mad', excl_cols=['volume', 'funding_rate'], thresh_val=10).\\\n",
718
- " repair_outliers(imp_method='fcst').\\\n",
719
- " filter_avg_trading_val(thresh_val=1000000).\\\n",
720
- " filter_missing_vals_gaps().\\\n",
721
- " get(attr='df').dropna(how='all')"
2033
+ "df = stitch_dataframes([df1, df2, df3])\n",
2034
+ "df.funding_rate = df.funding_rate.fillna(0)"
722
2035
  ]
723
2036
  },
724
2037
  {
725
2038
  "cell_type": "code",
726
- "execution_count": 27,
727
- "id": "3d423e53",
2039
+ "execution_count": 44,
2040
+ "id": "0f41592e",
728
2041
  "metadata": {},
729
- "outputs": [
730
- {
731
- "ename": "KeyError",
732
- "evalue": "'OCEAN'",
733
- "output_type": "error",
734
- "traceback": [
735
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
736
- "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
737
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexes/base.py:3800\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3799\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3801\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n",
738
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/_libs/index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
739
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/_libs/index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
740
- "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
741
- "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
742
- "\u001b[0;31mKeyError\u001b[0m: 'OCEAN'",
743
- "\nThe above exception was the direct cause of the following exception:\n",
744
- "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
745
- "Cell \u001b[0;32mIn [27], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m clean_df\u001b[38;5;241m.\u001b[39mloc[:, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOCEAN\u001b[39m\u001b[38;5;124m'\u001b[39m, :]\n",
746
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexing.py:1068\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1066\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_is_scalar_access(key):\n\u001b[1;32m 1067\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_get_value(\u001b[38;5;241m*\u001b[39mkey, takeable\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_takeable)\n\u001b[0;32m-> 1068\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_tuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1069\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1070\u001b[0m \u001b[38;5;66;03m# we by definition only have the 0th axis\u001b[39;00m\n\u001b[1;32m 1071\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n",
747
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexing.py:1248\u001b[0m, in \u001b[0;36m_LocIndexer._getitem_tuple\u001b[0;34m(self, tup)\u001b[0m\n\u001b[1;32m 1246\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m suppress(IndexingError):\n\u001b[1;32m 1247\u001b[0m tup \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_expand_ellipsis(tup)\n\u001b[0;32m-> 1248\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_lowerdim\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtup\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1250\u001b[0m \u001b[38;5;66;03m# no multi-index, so validate all of the indexers\u001b[39;00m\n\u001b[1;32m 1251\u001b[0m tup \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_tuple_indexer(tup)\n",
748
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexing.py:942\u001b[0m, in \u001b[0;36m_LocationIndexer._getitem_lowerdim\u001b[0;34m(self, tup)\u001b[0m\n\u001b[1;32m 940\u001b[0m \u001b[38;5;66;03m# we may have a nested tuples indexer here\u001b[39;00m\n\u001b[1;32m 941\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_is_nested_tuple_indexer(tup):\n\u001b[0;32m--> 942\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_nested_tuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtup\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;66;03m# we maybe be using a tuple to represent multiple dimensions here\u001b[39;00m\n\u001b[1;32m 945\u001b[0m ax0 \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_get_axis(\u001b[38;5;241m0\u001b[39m)\n",
749
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexing.py:1034\u001b[0m, in \u001b[0;36m_LocationIndexer._getitem_nested_tuple\u001b[0;34m(self, tup)\u001b[0m\n\u001b[1;32m 1031\u001b[0m \u001b[38;5;66;03m# this is a series with a multi-index specified a tuple of\u001b[39;00m\n\u001b[1;32m 1032\u001b[0m \u001b[38;5;66;03m# selectors\u001b[39;00m\n\u001b[1;32m 1033\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m-> 1034\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtup\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1036\u001b[0m \u001b[38;5;66;03m# handle the multi-axis by taking sections and reducing\u001b[39;00m\n\u001b[1;32m 1037\u001b[0m \u001b[38;5;66;03m# this is iterative\u001b[39;00m\n\u001b[1;32m 1038\u001b[0m obj \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\n",
750
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexing.py:1306\u001b[0m, in \u001b[0;36m_LocIndexer._getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1304\u001b[0m \u001b[38;5;66;03m# nested tuple slicing\u001b[39;00m\n\u001b[1;32m 1305\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_nested_tuple(key, labels):\n\u001b[0;32m-> 1306\u001b[0m locs \u001b[38;5;241m=\u001b[39m \u001b[43mlabels\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_locs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1307\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [\u001b[38;5;28mslice\u001b[39m(\u001b[38;5;28;01mNone\u001b[39;00m)] \u001b[38;5;241m*\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mndim\n\u001b[1;32m 1308\u001b[0m indexer[axis] \u001b[38;5;241m=\u001b[39m locs\n",
751
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexes/multi.py:3422\u001b[0m, in \u001b[0;36mMultiIndex.get_locs\u001b[0;34m(self, seq)\u001b[0m\n\u001b[1;32m 3418\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 3420\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 3421\u001b[0m \u001b[38;5;66;03m# a slice or a single label\u001b[39;00m\n\u001b[0;32m-> 3422\u001b[0m lvl_indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_level_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindexer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindexer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3424\u001b[0m \u001b[38;5;66;03m# update indexer\u001b[39;00m\n\u001b[1;32m 3425\u001b[0m lvl_indexer \u001b[38;5;241m=\u001b[39m _to_bool_indexer(lvl_indexer)\n",
752
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexes/multi.py:3262\u001b[0m, in \u001b[0;36mMultiIndex._get_level_indexer\u001b[0;34m(self, key, level, indexer)\u001b[0m\n\u001b[1;32m 3258\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mslice\u001b[39m(i, j, step)\n\u001b[1;32m 3260\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 3262\u001b[0m idx \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_loc_single_level_index\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlevel_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3264\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m level \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lexsort_depth \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 3265\u001b[0m \u001b[38;5;66;03m# Desired level is not sorted\u001b[39;00m\n\u001b[1;32m 3266\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(idx, \u001b[38;5;28mslice\u001b[39m):\n\u001b[1;32m 3267\u001b[0m \u001b[38;5;66;03m# test_get_loc_partial_timestamp_multiindex\u001b[39;00m\n",
753
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexes/multi.py:2848\u001b[0m, in \u001b[0;36mMultiIndex._get_loc_single_level_index\u001b[0;34m(self, level_index, key)\u001b[0m\n\u001b[1;32m 2846\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 2847\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 2848\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mlevel_index\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n",
754
- "File \u001b[0;32m~/opt/anaconda3/envs/cryptodatapy/lib/python3.9/site-packages/pandas/core/indexes/base.py:3802\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3801\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3802\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3804\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3805\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3807\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n",
755
- "\u001b[0;31mKeyError\u001b[0m: 'OCEAN'"
756
- ]
757
- }
758
- ],
2042
+ "outputs": [],
759
2043
  "source": [
760
- "clean_df.loc[:, 'OCEAN', :]"
2044
+ "df.to_csv('../../../../factorlab/notebooks/crypto_historical_ohlcv_daily.csv')"
761
2045
  ]
762
2046
  },
763
2047
  {
764
2048
  "cell_type": "code",
765
- "execution_count": 28,
766
- "id": "ad5a885c",
2049
+ "execution_count": 45,
2050
+ "id": "723834e6-9895-4b03-9fd8-5db1b274b3b7",
767
2051
  "metadata": {},
768
2052
  "outputs": [
769
2053
  {
@@ -787,6 +2071,7 @@
787
2071
  " <thead>\n",
788
2072
  " <tr style=\"text-align: right;\">\n",
789
2073
  " <th></th>\n",
2074
+ " <th></th>\n",
790
2075
  " <th>open</th>\n",
791
2076
  " <th>high</th>\n",
792
2077
  " <th>low</th>\n",
@@ -796,6 +2081,7 @@
796
2081
  " </tr>\n",
797
2082
  " <tr>\n",
798
2083
  " <th>date</th>\n",
2084
+ " <th>ticker</th>\n",
799
2085
  " <th></th>\n",
800
2086
  " <th></th>\n",
801
2087
  " <th></th>\n",
@@ -806,52 +2092,58 @@
806
2092
  " </thead>\n",
807
2093
  " <tbody>\n",
808
2094
  " <tr>\n",
809
- " <th>2015-06-12</th>\n",
810
- " <td>229.88</td>\n",
811
- " <td>231.58</td>\n",
812
- " <td>229.29</td>\n",
813
- " <td>230.46</td>\n",
814
- " <td>40744.820</td>\n",
815
- " <td>0.000000</td>\n",
2095
+ " <th>2010-07-17</th>\n",
2096
+ " <th>BTC</th>\n",
2097
+ " <td>0.04951</td>\n",
2098
+ " <td>0.04951</td>\n",
2099
+ " <td>0.04951</td>\n",
2100
+ " <td>0.04951</td>\n",
2101
+ " <td>20.0</td>\n",
2102
+ " <td>0.0</td>\n",
816
2103
  " </tr>\n",
817
2104
  " <tr>\n",
818
- " <th>2015-06-13</th>\n",
819
- " <td>230.46</td>\n",
820
- " <td>233.14</td>\n",
821
- " <td>229.01</td>\n",
822
- " <td>232.48</td>\n",
823
- " <td>38008.730</td>\n",
824
- " <td>0.000000</td>\n",
2105
+ " <th>2010-07-18</th>\n",
2106
+ " <th>BTC</th>\n",
2107
+ " <td>0.04951</td>\n",
2108
+ " <td>0.08585</td>\n",
2109
+ " <td>0.04951</td>\n",
2110
+ " <td>0.08584</td>\n",
2111
+ " <td>75.01</td>\n",
2112
+ " <td>0.0</td>\n",
825
2113
  " </tr>\n",
826
2114
  " <tr>\n",
827
- " <th>2015-06-14</th>\n",
828
- " <td>232.48</td>\n",
829
- " <td>235.51</td>\n",
830
- " <td>232.09</td>\n",
831
- " <td>233.75</td>\n",
832
- " <td>32894.870</td>\n",
833
- " <td>0.000000</td>\n",
2115
+ " <th>2010-07-19</th>\n",
2116
+ " <th>BTC</th>\n",
2117
+ " <td>0.08584</td>\n",
2118
+ " <td>0.09307</td>\n",
2119
+ " <td>0.07723</td>\n",
2120
+ " <td>0.0808</td>\n",
2121
+ " <td>574.0</td>\n",
2122
+ " <td>0.0</td>\n",
834
2123
  " </tr>\n",
835
2124
  " <tr>\n",
836
- " <th>2015-06-15</th>\n",
837
- " <td>233.75</td>\n",
838
- " <td>238.55</td>\n",
839
- " <td>233.29</td>\n",
840
- " <td>237.0</td>\n",
841
- " <td>63467.090</td>\n",
842
- " <td>0.000000</td>\n",
2125
+ " <th>2010-07-20</th>\n",
2126
+ " <th>BTC</th>\n",
2127
+ " <td>0.0808</td>\n",
2128
+ " <td>0.08181</td>\n",
2129
+ " <td>0.07426</td>\n",
2130
+ " <td>0.07474</td>\n",
2131
+ " <td>262.0</td>\n",
2132
+ " <td>0.0</td>\n",
843
2133
  " </tr>\n",
844
2134
  " <tr>\n",
845
- " <th>2015-06-16</th>\n",
846
- " <td>237.0</td>\n",
847
- " <td>254.15</td>\n",
848
- " <td>235.7</td>\n",
849
- " <td>249.82</td>\n",
850
- " <td>122473.610</td>\n",
851
- " <td>0.000000</td>\n",
2135
+ " <th>2010-07-21</th>\n",
2136
+ " <th>BTC</th>\n",
2137
+ " <td>0.07474</td>\n",
2138
+ " <td>0.07921</td>\n",
2139
+ " <td>0.06634</td>\n",
2140
+ " <td>0.07921</td>\n",
2141
+ " <td>575.0</td>\n",
2142
+ " <td>0.0</td>\n",
852
2143
  " </tr>\n",
853
2144
  " <tr>\n",
854
2145
  " <th>...</th>\n",
2146
+ " <th>...</th>\n",
855
2147
  " <td>...</td>\n",
856
2148
  " <td>...</td>\n",
857
2149
  " <td>...</td>\n",
@@ -860,130 +2152,436 @@
860
2152
  " <td>...</td>\n",
861
2153
  " </tr>\n",
862
2154
  " <tr>\n",
863
- " <th>2024-07-31</th>\n",
864
- " <td>66159.3</td>\n",
865
- " <td>66826.3</td>\n",
866
- " <td>64500.4</td>\n",
867
- " <td>64601.8</td>\n",
868
- " <td>246389.446</td>\n",
869
- " <td>0.000141</td>\n",
2155
+ " <th rowspan=\"5\" valign=\"top\">2024-09-06</th>\n",
2156
+ " <th>ZETA</th>\n",
2157
+ " <td>0.4343</td>\n",
2158
+ " <td>0.4545</td>\n",
2159
+ " <td>0.4269</td>\n",
2160
+ " <td>0.4388</td>\n",
2161
+ " <td>20690742.0</td>\n",
2162
+ " <td>0.00025</td>\n",
870
2163
  " </tr>\n",
871
2164
  " <tr>\n",
872
- " <th>2024-08-01</th>\n",
873
- " <td>64601.8</td>\n",
874
- " <td>65650.0</td>\n",
875
- " <td>62271.2</td>\n",
876
- " <td>65328.9</td>\n",
877
- " <td>372654.590</td>\n",
878
- " <td>0.000282</td>\n",
2165
+ " <th>ZIL</th>\n",
2166
+ " <td>0.01299</td>\n",
2167
+ " <td>0.01334</td>\n",
2168
+ " <td>0.0127</td>\n",
2169
+ " <td>0.01292</td>\n",
2170
+ " <td>411662123.0</td>\n",
2171
+ " <td>-0.000186</td>\n",
879
2172
  " </tr>\n",
880
2173
  " <tr>\n",
881
- " <th>2024-08-02</th>\n",
882
- " <td>65329.0</td>\n",
883
- " <td>65577.0</td>\n",
884
- " <td>61200.2</td>\n",
885
- " <td>61483.7</td>\n",
886
- " <td>421628.420</td>\n",
887
- " <td>0.000300</td>\n",
2174
+ " <th>ZK</th>\n",
2175
+ " <td>0.10044</td>\n",
2176
+ " <td>0.10767</td>\n",
2177
+ " <td>0.09803</td>\n",
2178
+ " <td>0.10304</td>\n",
2179
+ " <td>274057919.0</td>\n",
2180
+ " <td>0.000216</td>\n",
888
2181
  " </tr>\n",
889
2182
  " <tr>\n",
890
- " <th>2024-08-03</th>\n",
891
- " <td>61483.7</td>\n",
892
- " <td>63871.5</td>\n",
893
- " <td>59800.0</td>\n",
894
- " <td>60684.6</td>\n",
895
- " <td>290469.956</td>\n",
896
- " <td>0.000240</td>\n",
2183
+ " <th>ZRO</th>\n",
2184
+ " <td>3.222</td>\n",
2185
+ " <td>3.363</td>\n",
2186
+ " <td>3.147</td>\n",
2187
+ " <td>3.244</td>\n",
2188
+ " <td>26496347.5</td>\n",
2189
+ " <td>0.000067</td>\n",
897
2190
  " </tr>\n",
898
2191
  " <tr>\n",
899
- " <th>2024-08-04</th>\n",
900
- " <td>60684.5</td>\n",
901
- " <td>61089.5</td>\n",
902
- " <td>60080.5</td>\n",
903
- " <td>60357.6</td>\n",
904
- " <td>85220.266</td>\n",
905
- " <td>0.000153</td>\n",
2192
+ " <th>ZRX</th>\n",
2193
+ " <td>0.2714</td>\n",
2194
+ " <td>0.2764</td>\n",
2195
+ " <td>0.2639</td>\n",
2196
+ " <td>0.2685</td>\n",
2197
+ " <td>11356228.7</td>\n",
2198
+ " <td>0.000016</td>\n",
906
2199
  " </tr>\n",
907
2200
  " </tbody>\n",
908
2201
  "</table>\n",
909
- "<p>3342 rows × 6 columns</p>\n",
2202
+ "<p>427203 rows × 6 columns</p>\n",
910
2203
  "</div>"
911
2204
  ],
912
2205
  "text/plain": [
913
- " open high low close volume funding_rate\n",
914
- "date \n",
915
- "2015-06-12 229.88 231.58 229.29 230.46 40744.820 0.000000\n",
916
- "2015-06-13 230.46 233.14 229.01 232.48 38008.730 0.000000\n",
917
- "2015-06-14 232.48 235.51 232.09 233.75 32894.870 0.000000\n",
918
- "2015-06-15 233.75 238.55 233.29 237.0 63467.090 0.000000\n",
919
- "2015-06-16 237.0 254.15 235.7 249.82 122473.610 0.000000\n",
920
- "... ... ... ... ... ... ...\n",
921
- "2024-07-31 66159.3 66826.3 64500.4 64601.8 246389.446 0.000141\n",
922
- "2024-08-01 64601.8 65650.0 62271.2 65328.9 372654.590 0.000282\n",
923
- "2024-08-02 65329.0 65577.0 61200.2 61483.7 421628.420 0.000300\n",
924
- "2024-08-03 61483.7 63871.5 59800.0 60684.6 290469.956 0.000240\n",
925
- "2024-08-04 60684.5 61089.5 60080.5 60357.6 85220.266 0.000153\n",
2206
+ " open high low close volume \\\n",
2207
+ "date ticker \n",
2208
+ "2010-07-17 BTC 0.04951 0.04951 0.04951 0.04951 20.0 \n",
2209
+ "2010-07-18 BTC 0.04951 0.08585 0.04951 0.08584 75.01 \n",
2210
+ "2010-07-19 BTC 0.08584 0.09307 0.07723 0.0808 574.0 \n",
2211
+ "2010-07-20 BTC 0.0808 0.08181 0.07426 0.07474 262.0 \n",
2212
+ "2010-07-21 BTC 0.07474 0.07921 0.06634 0.07921 575.0 \n",
2213
+ "... ... ... ... ... ... \n",
2214
+ "2024-09-06 ZETA 0.4343 0.4545 0.4269 0.4388 20690742.0 \n",
2215
+ " ZIL 0.01299 0.01334 0.0127 0.01292 411662123.0 \n",
2216
+ " ZK 0.10044 0.10767 0.09803 0.10304 274057919.0 \n",
2217
+ " ZRO 3.222 3.363 3.147 3.244 26496347.5 \n",
2218
+ " ZRX 0.2714 0.2764 0.2639 0.2685 11356228.7 \n",
926
2219
  "\n",
927
- "[3342 rows x 6 columns]"
2220
+ " funding_rate \n",
2221
+ "date ticker \n",
2222
+ "2010-07-17 BTC 0.0 \n",
2223
+ "2010-07-18 BTC 0.0 \n",
2224
+ "2010-07-19 BTC 0.0 \n",
2225
+ "2010-07-20 BTC 0.0 \n",
2226
+ "2010-07-21 BTC 0.0 \n",
2227
+ "... ... \n",
2228
+ "2024-09-06 ZETA 0.00025 \n",
2229
+ " ZIL -0.000186 \n",
2230
+ " ZK 0.000216 \n",
2231
+ " ZRO 0.000067 \n",
2232
+ " ZRX 0.000016 \n",
2233
+ "\n",
2234
+ "[427203 rows x 6 columns]"
928
2235
  ]
929
2236
  },
930
- "execution_count": 28,
2237
+ "execution_count": 45,
931
2238
  "metadata": {},
932
2239
  "output_type": "execute_result"
933
2240
  }
934
2241
  ],
935
2242
  "source": [
936
- "clean_df.loc[:, 'BTC', :]"
2243
+ "df"
937
2244
  ]
938
2245
  },
939
2246
  {
940
2247
  "cell_type": "code",
941
- "execution_count": 29,
942
- "id": "a9c262fc",
2248
+ "execution_count": 46,
2249
+ "id": "dc40b220-11ae-4983-898d-8e4bd18ea87f",
2250
+ "metadata": {},
2251
+ "outputs": [
2252
+ {
2253
+ "data": {
2254
+ "text/plain": [
2255
+ "(288,)"
2256
+ ]
2257
+ },
2258
+ "execution_count": 46,
2259
+ "metadata": {},
2260
+ "output_type": "execute_result"
2261
+ }
2262
+ ],
2263
+ "source": [
2264
+ "df.index.get_level_values(1).unique().shape"
2265
+ ]
2266
+ },
2267
+ {
2268
+ "cell_type": "code",
2269
+ "execution_count": null,
2270
+ "id": "8ff79a6a-7075-4a51-a4cd-34512351db8e",
2271
+ "metadata": {},
2272
+ "outputs": [],
2273
+ "source": []
2274
+ },
2275
+ {
2276
+ "cell_type": "code",
2277
+ "execution_count": null,
2278
+ "id": "d04bbb33",
943
2279
  "metadata": {},
944
2280
  "outputs": [],
945
2281
  "source": [
946
- "clean_df.to_parquet('s3://factorlab-data/binance_historical_ohlcv_daily.parquet')"
2282
+ "df = pd.read_csv('../../../../factorlab/notebooks/binance_historical_ohlcv_daily.csv', \n",
2283
+ " index_col=['date', 'ticker'],\n",
2284
+ " parse_dates=['date']\n",
2285
+ " )"
947
2286
  ]
948
2287
  },
949
2288
  {
950
2289
  "cell_type": "code",
951
- "execution_count": 30,
952
- "id": "893e3e38",
2290
+ "execution_count": null,
2291
+ "id": "cbe07c91",
953
2292
  "metadata": {},
954
2293
  "outputs": [],
955
2294
  "source": [
956
- "clean_df.to_parquet('../../../../factorlab/notebooks/binance_historical_ohlcv_daily.parquet')"
2295
+ "df.head()"
957
2296
  ]
958
2297
  },
959
2298
  {
960
2299
  "cell_type": "code",
961
2300
  "execution_count": null,
962
- "id": "8a962fa7",
2301
+ "id": "cef46007",
963
2302
  "metadata": {},
964
2303
  "outputs": [],
965
- "source": []
2304
+ "source": [
2305
+ "df.index.get_level_values(1).unique()"
2306
+ ]
2307
+ },
2308
+ {
2309
+ "cell_type": "code",
2310
+ "execution_count": null,
2311
+ "id": "9f8a899f",
2312
+ "metadata": {},
2313
+ "outputs": [],
2314
+ "source": [
2315
+ "clean = CleanData(df)"
2316
+ ]
2317
+ },
2318
+ {
2319
+ "cell_type": "code",
2320
+ "execution_count": null,
2321
+ "id": "29e1b955",
2322
+ "metadata": {},
2323
+ "outputs": [],
2324
+ "source": [
2325
+ "clean.filter_delisted_tickers()"
2326
+ ]
2327
+ },
2328
+ {
2329
+ "cell_type": "code",
2330
+ "execution_count": null,
2331
+ "id": "9315f178",
2332
+ "metadata": {},
2333
+ "outputs": [],
2334
+ "source": [
2335
+ "# clean.filter_tickers(['USDC'])"
2336
+ ]
2337
+ },
2338
+ {
2339
+ "cell_type": "code",
2340
+ "execution_count": null,
2341
+ "id": "88ee52ec",
2342
+ "metadata": {},
2343
+ "outputs": [],
2344
+ "source": [
2345
+ "clean.filtered_tickers"
2346
+ ]
2347
+ },
2348
+ {
2349
+ "cell_type": "code",
2350
+ "execution_count": null,
2351
+ "id": "e4693e52",
2352
+ "metadata": {},
2353
+ "outputs": [],
2354
+ "source": [
2355
+ "clean.filter_outliers(od_method='mad', excl_cols=['volume', 'funding_rate'], thresh_val=10)"
2356
+ ]
2357
+ },
2358
+ {
2359
+ "cell_type": "code",
2360
+ "execution_count": null,
2361
+ "id": "311ee6ed",
2362
+ "metadata": {},
2363
+ "outputs": [],
2364
+ "source": [
2365
+ "clean.df"
2366
+ ]
2367
+ },
2368
+ {
2369
+ "cell_type": "code",
2370
+ "execution_count": null,
2371
+ "id": "83caa2c6",
2372
+ "metadata": {},
2373
+ "outputs": [],
2374
+ "source": [
2375
+ "clean.repair_outliers(imp_method='fcst')"
2376
+ ]
2377
+ },
2378
+ {
2379
+ "cell_type": "code",
2380
+ "execution_count": null,
2381
+ "id": "f4c21352",
2382
+ "metadata": {},
2383
+ "outputs": [],
2384
+ "source": [
2385
+ "clean.df"
2386
+ ]
2387
+ },
2388
+ {
2389
+ "cell_type": "code",
2390
+ "execution_count": null,
2391
+ "id": "66b3d8d2",
2392
+ "metadata": {},
2393
+ "outputs": [],
2394
+ "source": [
2395
+ "clean.filter_avg_trading_val(thresh_val=500000)"
2396
+ ]
2397
+ },
2398
+ {
2399
+ "cell_type": "code",
2400
+ "execution_count": null,
2401
+ "id": "b7f23056",
2402
+ "metadata": {},
2403
+ "outputs": [],
2404
+ "source": [
2405
+ "clean.df"
2406
+ ]
2407
+ },
2408
+ {
2409
+ "cell_type": "code",
2410
+ "execution_count": null,
2411
+ "id": "b5ac345d",
2412
+ "metadata": {},
2413
+ "outputs": [],
2414
+ "source": [
2415
+ "clean.filtered_tickers"
2416
+ ]
2417
+ },
2418
+ {
2419
+ "cell_type": "code",
2420
+ "execution_count": null,
2421
+ "id": "6d36d4ce",
2422
+ "metadata": {},
2423
+ "outputs": [],
2424
+ "source": [
2425
+ "clean.filter_missing_vals_gaps(gap_window=7)"
2426
+ ]
2427
+ },
2428
+ {
2429
+ "cell_type": "code",
2430
+ "execution_count": null,
2431
+ "id": "7fe432d5",
2432
+ "metadata": {},
2433
+ "outputs": [],
2434
+ "source": [
2435
+ "clean.filtered_tickers"
2436
+ ]
2437
+ },
2438
+ {
2439
+ "cell_type": "code",
2440
+ "execution_count": null,
2441
+ "id": "f7cbdbae",
2442
+ "metadata": {},
2443
+ "outputs": [],
2444
+ "source": [
2445
+ "clean.filter_min_nobs(ts_obs=1000, cs_obs=5)"
2446
+ ]
2447
+ },
2448
+ {
2449
+ "cell_type": "code",
2450
+ "execution_count": null,
2451
+ "id": "0f5656f1",
2452
+ "metadata": {},
2453
+ "outputs": [],
2454
+ "source": [
2455
+ "len(clean.filtered_tickers)"
2456
+ ]
2457
+ },
2458
+ {
2459
+ "cell_type": "code",
2460
+ "execution_count": null,
2461
+ "id": "b747a897",
2462
+ "metadata": {},
2463
+ "outputs": [],
2464
+ "source": [
2465
+ "clean.filtered_tickers"
2466
+ ]
2467
+ },
2468
+ {
2469
+ "cell_type": "code",
2470
+ "execution_count": null,
2471
+ "id": "f13d9f1f",
2472
+ "metadata": {},
2473
+ "outputs": [],
2474
+ "source": [
2475
+ "clean.df"
2476
+ ]
2477
+ },
2478
+ {
2479
+ "cell_type": "code",
2480
+ "execution_count": null,
2481
+ "id": "edfe227e",
2482
+ "metadata": {},
2483
+ "outputs": [],
2484
+ "source": [
2485
+ "'TRX' in clean.df.index.get_level_values(1).unique()"
2486
+ ]
2487
+ },
2488
+ {
2489
+ "cell_type": "code",
2490
+ "execution_count": null,
2491
+ "id": "51134773",
2492
+ "metadata": {},
2493
+ "outputs": [],
2494
+ "source": [
2495
+ "clean.summary.close"
2496
+ ]
2497
+ },
2498
+ {
2499
+ "cell_type": "code",
2500
+ "execution_count": null,
2501
+ "id": "a8feb8b6",
2502
+ "metadata": {},
2503
+ "outputs": [],
2504
+ "source": [
2505
+ "clean.df.index.get_level_values(1).unique()"
2506
+ ]
966
2507
  },
967
2508
  {
968
2509
  "cell_type": "code",
969
- "execution_count": 31,
2510
+ "execution_count": null,
970
2511
  "id": "54b818cd",
971
2512
  "metadata": {},
972
2513
  "outputs": [],
973
2514
  "source": [
974
- "clean_df.to_csv('../../../../factorlab/notebooks/binance_historical_ohlcv_daily.csv')"
2515
+ "clean.df.dropna(how='all').to_csv('../../../../factorlab/notebooks/binance_historical_ohlcv_daily.csv')"
975
2516
  ]
976
2517
  },
977
2518
  {
978
2519
  "cell_type": "code",
979
- "execution_count": 32,
980
- "id": "a1c49f01",
2520
+ "execution_count": null,
2521
+ "id": "f6a79f46",
2522
+ "metadata": {},
2523
+ "outputs": [],
2524
+ "source": []
2525
+ },
2526
+ {
2527
+ "cell_type": "code",
2528
+ "execution_count": null,
2529
+ "id": "f7156f13",
2530
+ "metadata": {},
2531
+ "outputs": [],
2532
+ "source": []
2533
+ },
2534
+ {
2535
+ "cell_type": "code",
2536
+ "execution_count": null,
2537
+ "id": "29632aa4",
2538
+ "metadata": {},
2539
+ "outputs": [],
2540
+ "source": []
2541
+ },
2542
+ {
2543
+ "cell_type": "code",
2544
+ "execution_count": null,
2545
+ "id": "a9b1764c",
981
2546
  "metadata": {},
982
2547
  "outputs": [],
983
2548
  "source": [
984
- "clean_df.to_csv('s3://factorlab-data/binance_historical_ohlcv_daily.csv')"
2549
+ "# # clean data\n",
2550
+ "# clean_df = clean.filter_delisted_tickers().\\\n",
2551
+ "# filter_outliers(od_method='mad', excl_cols=['volume', 'funding_rate'], thresh_val=10).\\\n",
2552
+ "# repair_outliers(imp_method='fcst').\\\n",
2553
+ "# filter_avg_trading_val(thresh_val=1000000).\\\n",
2554
+ "# filter_missing_vals_gaps().\\\n",
2555
+ "# filter_min_nobs(ts_obs=1500, cs_obs=10).\\\n",
2556
+ "# get(attr='df').dropna(how='all')"
985
2557
  ]
986
2558
  },
2559
+ {
2560
+ "cell_type": "code",
2561
+ "execution_count": null,
2562
+ "id": "572d7a2e",
2563
+ "metadata": {},
2564
+ "outputs": [],
2565
+ "source": []
2566
+ },
2567
+ {
2568
+ "cell_type": "code",
2569
+ "execution_count": null,
2570
+ "id": "99857595",
2571
+ "metadata": {},
2572
+ "outputs": [],
2573
+ "source": [
2574
+ "clean.df.dropna(how='all').to_parquet('s3://factorlab-data/binance_historical_ohlcv_daily.parquet')"
2575
+ ]
2576
+ },
2577
+ {
2578
+ "cell_type": "code",
2579
+ "execution_count": null,
2580
+ "id": "8a962fa7",
2581
+ "metadata": {},
2582
+ "outputs": [],
2583
+ "source": []
2584
+ },
987
2585
  {
988
2586
  "cell_type": "code",
989
2587
  "execution_count": null,
@@ -995,7 +2593,7 @@
995
2593
  {
996
2594
  "cell_type": "code",
997
2595
  "execution_count": null,
998
- "id": "f9488eba",
2596
+ "id": "da953cbf",
999
2597
  "metadata": {},
1000
2598
  "outputs": [],
1001
2599
  "source": []