{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import requests" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "pd.set_option('display.precision',10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Bid-ask spread* is a normalized value: (bid+ask)/(2*bid) - 1 " ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "\n", "\n", "tick = requests.get('https://poloniex.com/public?command=returnTicker').json()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbidask
0BTC_BCN0.000000460.00000047
1BTC_BELA0.000017450.00001751
2BTC_BLK0.000032570.00003315
3BTC_BTCD0.010158290.01020906
4BTC_BTM0.000077240.00007725
\n", "
" ], "text/plain": [ " symbol bid ask\n", "0 BTC_BCN 0.00000046 0.00000047\n", "1 BTC_BELA 0.00001745 0.00001751\n", "2 BTC_BLK 0.00003257 0.00003315\n", "3 BTC_BTCD 0.01015829 0.01020906\n", "4 BTC_BTM 0.00007724 0.00007725" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tick_df = pd.DataFrame.from_records([(k,v['highestBid'],v['lowestAsk']) for k,v in tick.items()])\n", "tick_df.columns = ('symbol','bid','ask')\n", "tick_df['bid'] = tick_df['bid'].astype(float)\n", "tick_df['ask'] = tick_df['ask'].astype(float)\n", "tick_df.head()" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "tick_df['bid_ask_spread_norm'] = (tick_df['bid']+tick_df['ask'])/(2*tick_df['bid'])-1" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbidaskbid_ask_spread_norm
63BTC_LSK0.001890000.001890010.0000026455
60BTC_RADS0.000555000.000555010.0000090090
7BTC_CLAM0.000536620.000536630.0000093176
46USDT_XRP0.938129500.938150470.0000111765
66BTC_STEEM0.000316320.000316330.0000158068
4BTC_BTM0.000077240.000077250.0000647333
8BTC_DASH0.057489790.057499900.0000879287
36BTC_XEM0.000036590.000036600.0001366494
92BTC_CVC0.000034100.000034110.0001466276
27BTC_RIC0.000029480.000029490.0001696065
\n", "
" ], "text/plain": [ " symbol bid ask bid_ask_spread_norm\n", "63 BTC_LSK 0.00189000 0.00189001 0.0000026455\n", "60 BTC_RADS 0.00055500 0.00055501 0.0000090090\n", "7 BTC_CLAM 0.00053662 0.00053663 0.0000093176\n", "46 USDT_XRP 0.93812950 0.93815047 0.0000111765\n", "66 BTC_STEEM 0.00031632 0.00031633 0.0000158068\n", "4 BTC_BTM 0.00007724 0.00007725 0.0000647333\n", "8 BTC_DASH 0.05748979 0.05749990 0.0000879287\n", "36 BTC_XEM 0.00003659 0.00003660 0.0001366494\n", "92 BTC_CVC 0.00003410 0.00003411 0.0001466276\n", "27 BTC_RIC 0.00002948 0.00002949 0.0001696065" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tick_df.sort_values('bid_ask_spread_norm').head(10)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbidaskbid_ask_spread_norm
11BTC_EMC20.000028910.000029350.0076098236
57BTC_BCY0.000044020.000044740.0081781009
10BTC_DOGE0.000000600.000000610.0083333333
22BTC_NMC0.000249590.000254030.0088945871
2BTC_BLK0.000032570.000033150.0089038993
16BTC_HUC0.000024850.000025310.0092555332
47XMR_BCN0.000016190.000016500.0095738110
31BTC_XVC0.000041030.000041880.0103582744
0BTC_BCN0.000000460.000000470.0108695652
52XMR_MAID0.001178750.001212060.0141293743
\n", "
" ], "text/plain": [ " symbol bid ask bid_ask_spread_norm\n", "11 BTC_EMC2 0.00002891 0.00002935 0.0076098236\n", "57 BTC_BCY 0.00004402 0.00004474 0.0081781009\n", "10 BTC_DOGE 0.00000060 0.00000061 0.0083333333\n", "22 BTC_NMC 0.00024959 0.00025403 0.0088945871\n", "2 BTC_BLK 0.00003257 0.00003315 0.0089038993\n", "16 BTC_HUC 0.00002485 0.00002531 0.0092555332\n", "47 XMR_BCN 0.00001619 0.00001650 0.0095738110\n", "31 BTC_XVC 0.00004103 0.00004188 0.0103582744\n", "0 BTC_BCN 0.00000046 0.00000047 0.0108695652\n", "52 XMR_MAID 0.00117875 0.00121206 0.0141293743" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tick_df.sort_values('bid_ask_spread_norm').tail(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The main issue with this metrics is that spread changes rapidly and top/tail results are different in any given time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Handy liquidity** \n", "\n", "HL = Bid-ask spread / Bid-ask spread by X units of an asset, where\n", "X is 1 BTC or equivalent for day traders; 10 BTC or equivalent for investors. " ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [], "source": [ "def calc_liquidity(symbol):\n", " r = requests.get('https://poloniex.com/public?command=returnOrderBook¤cyPair={symbol}&depth=1000'.format(symbol=symbol)).json()\n", " asks = pd.DataFrame.from_records(r['asks']).rename(columns={0:'price',1:'amount'})\n", " bids = pd.DataFrame.from_records(r['bids']).rename(columns={0:'price',1:'amount'})\n", " asks['price'] = asks['price'].astype(float)\n", " bids['price'] = bids['price'].astype(float)\n", " asks['vol'] = asks['price']*asks['amount']\n", " bids['vol'] = bids['price']*bids['amount']\n", " asks['cumvol'] = asks['vol'].cumsum()\n", " bids['cumvol'] = bids['vol'].cumsum()\n", " \n", " best_bid = bids['price'].values[0]\n", " best_ask = asks['price'].values[0]\n", " best_1b_bid = bids[bids['cumvol']>=1]['price'].values[0] if (bids['cumvol']>=1).sum()>0 else np.NaN\n", " best_1b_ask = asks[asks['cumvol']>=1]['price'].values[0] if (asks['cumvol']>=1).sum()>0 else np.NaN\n", " best_10b_bid = bids[bids['cumvol']>=10]['price'].values[0] if (bids['cumvol']>=10).sum()>0 else np.NaN\n", " best_10b_ask = asks[asks['cumvol']>=10]['price'].values[0] if (asks['cumvol']>=10).sum()>0 else np.NaN\n", " \n", " return (symbol, best_bid, best_ask, best_1b_bid, best_1b_ask, best_10b_bid, best_10b_ask)\n" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [], "source": [ "col_names = ('symbol','best_bid', 'best_ask', 'best_1b_bid', 'best_1b_ask', 'best_10b_bid', 'best_10b_ask')" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [], "source": [ "res = pd.DataFrame.from_records([calc_liquidity(symbol) for symbol in list(tick.keys())])\n", "res.columns = col_names" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbest_bidbest_askbest_1b_bidbest_1b_askbest_10b_bidbest_10b_ask
0BTC_BCN0.000000460.000000470.000000460.000000480.000000440.00000050
1BTC_BELA0.000017440.000017450.000016950.000018610.000011270.00002670
2BTC_BLK0.000032590.000032820.000031110.000032860.000018860.00004600
3BTC_BTCD0.009920620.010005350.009750340.01195000NaN0.01647000
4BTC_BTM0.000075310.000076040.000070090.00009620NaN0.00013326
\n", "
" ], "text/plain": [ " symbol best_bid best_ask best_1b_bid best_1b_ask best_10b_bid \\\n", "0 BTC_BCN 0.00000046 0.00000047 0.00000046 0.00000048 0.00000044 \n", "1 BTC_BELA 0.00001744 0.00001745 0.00001695 0.00001861 0.00001127 \n", "2 BTC_BLK 0.00003259 0.00003282 0.00003111 0.00003286 0.00001886 \n", "3 BTC_BTCD 0.00992062 0.01000535 0.00975034 0.01195000 NaN \n", "4 BTC_BTM 0.00007531 0.00007604 0.00007009 0.00009620 NaN \n", "\n", " best_10b_ask \n", "0 0.00000050 \n", "1 0.00002670 \n", "2 0.00004600 \n", "3 0.01647000 \n", "4 0.00013326 " ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.head()" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [], "source": [ "# filter out non BTC_XXX pairs\n", "res = res[res['symbol'].str.startswith('BTC_')]" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [], "source": [ "res['bid_ask_spread_norm'] = (res['best_bid']+res['best_ask'])/(2*res['best_bid'])-1\n", "res['bid_ask_1b_spread_norm'] = (res['best_1b_bid']+res['best_1b_ask'])/(2*res['best_1b_bid'])-1\n", "res['bid_ask_10b_spread_norm'] = (res['best_10b_bid']+res['best_10b_ask'])/(2*res['best_10b_bid'])-1\n" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbest_bidbest_askbest_1b_bidbest_1b_askbest_10b_bidbest_10b_askbid_ask_spread_normbid_ask_1b_spread_normbid_ask_10b_spread_norm
0BTC_BCN0.000000460.000000470.000000460.000000480.000000440.000000500.01086956520.02173913040.0681818182
1BTC_BELA0.000017440.000017450.000016950.000018610.000011270.000026700.00028669720.04896755160.6845607808
2BTC_BLK0.000032590.000032820.000031110.000032860.000018860.000046000.00352868980.02812600450.7195121951
3BTC_BTCD0.009920620.010005350.009750340.01195000NaN0.016470000.00427039840.1127991434NaN
4BTC_BTM0.000075310.000076040.000070090.00009620NaN0.000133260.00484663390.1862605222NaN
\n", "
" ], "text/plain": [ " symbol best_bid best_ask best_1b_bid best_1b_ask best_10b_bid \\\n", "0 BTC_BCN 0.00000046 0.00000047 0.00000046 0.00000048 0.00000044 \n", "1 BTC_BELA 0.00001744 0.00001745 0.00001695 0.00001861 0.00001127 \n", "2 BTC_BLK 0.00003259 0.00003282 0.00003111 0.00003286 0.00001886 \n", "3 BTC_BTCD 0.00992062 0.01000535 0.00975034 0.01195000 NaN \n", "4 BTC_BTM 0.00007531 0.00007604 0.00007009 0.00009620 NaN \n", "\n", " best_10b_ask bid_ask_spread_norm bid_ask_1b_spread_norm \\\n", "0 0.00000050 0.0108695652 0.0217391304 \n", "1 0.00002670 0.0002866972 0.0489675516 \n", "2 0.00004600 0.0035286898 0.0281260045 \n", "3 0.01647000 0.0042703984 0.1127991434 \n", "4 0.00013326 0.0048466339 0.1862605222 \n", "\n", " bid_ask_10b_spread_norm \n", "0 0.0681818182 \n", "1 0.6845607808 \n", "2 0.7195121951 \n", "3 NaN \n", "4 NaN " ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.head()" ] }, { "cell_type": "code", "execution_count": 152, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "symbol 0\n", "best_bid 0\n", "best_ask 0\n", "best_1b_bid 0\n", "best_1b_ask 0\n", "best_10b_bid 10\n", "best_10b_ask 0\n", "bid_ask_spread_norm 0\n", "bid_ask_1b_spread_norm 0\n", "bid_ask_10b_spread_norm 10\n", "dtype: int64" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbest_bidbest_askbest_1b_bidbest_1b_askbest_10b_bidbest_10b_askbid_ask_spread_normbid_ask_1b_spread_normbid_ask_10b_spread_norm
3BTC_BTCD0.009920620.010005350.009750340.01195000NaN0.016470000.00427039840.1127991434NaN
4BTC_BTM0.000075310.000076040.000070090.00009620NaN0.000133260.00484663390.1862605222NaN
13BTC_FLO0.000009460.000009710.000009070.00001100NaN0.000015100.01321353070.1063947078NaN
22BTC_NMC0.000251110.000252640.000231620.00026999NaN0.000410000.00304647370.0828296347NaN
24BTC_PINK0.000002830.000002870.000002750.00000315NaN0.000004500.00706713780.0727272727NaN
31BTC_XVC0.000041550.000041880.000039670.00004600NaN0.000063500.00397111910.0797832115NaN
34BTC_XBC0.007068640.007086530.006612680.00750800NaN0.012200000.00126544850.0676972120NaN
68BTC_SBD0.000333330.000337720.000300000.00035501NaN0.000600000.00658506590.0916833333NaN
81BTC_NXC0.000019810.000020010.000019410.00002312NaN0.000034500.00504795560.0955692942NaN
85BTC_GNO0.012377550.012656870.012187400.01350799NaN0.017554640.01128333150.0541784958NaN
\n", "
" ], "text/plain": [ " symbol best_bid best_ask best_1b_bid best_1b_ask best_10b_bid \\\n", "3 BTC_BTCD 0.00992062 0.01000535 0.00975034 0.01195000 NaN \n", "4 BTC_BTM 0.00007531 0.00007604 0.00007009 0.00009620 NaN \n", "13 BTC_FLO 0.00000946 0.00000971 0.00000907 0.00001100 NaN \n", "22 BTC_NMC 0.00025111 0.00025264 0.00023162 0.00026999 NaN \n", "24 BTC_PINK 0.00000283 0.00000287 0.00000275 0.00000315 NaN \n", "31 BTC_XVC 0.00004155 0.00004188 0.00003967 0.00004600 NaN \n", "34 BTC_XBC 0.00706864 0.00708653 0.00661268 0.00750800 NaN \n", "68 BTC_SBD 0.00033333 0.00033772 0.00030000 0.00035501 NaN \n", "81 BTC_NXC 0.00001981 0.00002001 0.00001941 0.00002312 NaN \n", "85 BTC_GNO 0.01237755 0.01265687 0.01218740 0.01350799 NaN \n", "\n", " best_10b_ask bid_ask_spread_norm bid_ask_1b_spread_norm \\\n", "3 0.01647000 0.0042703984 0.1127991434 \n", "4 0.00013326 0.0048466339 0.1862605222 \n", "13 0.00001510 0.0132135307 0.1063947078 \n", "22 0.00041000 0.0030464737 0.0828296347 \n", "24 0.00000450 0.0070671378 0.0727272727 \n", "31 0.00006350 0.0039711191 0.0797832115 \n", "34 0.01220000 0.0012654485 0.0676972120 \n", "68 0.00060000 0.0065850659 0.0916833333 \n", "81 0.00003450 0.0050479556 0.0955692942 \n", "85 0.01755464 0.0112833315 0.0541784958 \n", "\n", " bid_ask_10b_spread_norm \n", "3 NaN \n", "4 NaN \n", "13 NaN \n", "22 NaN \n", "24 NaN \n", "31 NaN \n", "34 NaN \n", "68 NaN \n", "81 NaN \n", "85 NaN " ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# less then 10 btc\n", "res[res['bid_ask_10b_spread_norm'].isnull()]" ] }, { "cell_type": "code", "execution_count": 154, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbest_bidbest_askbest_1b_bidbest_1b_askbest_10b_bidbest_10b_askbid_ask_spread_normbid_ask_1b_spread_normbid_ask_10b_spread_norm
54BTC_ETH0.082585190.082654760.082389010.082654780.082180160.082814580.00042120140.00161289720.0038599341
37BTC_XMR0.028055660.028119750.028055630.028130530.027950000.028200820.00114219380.00133484790.0044869410
39BTC_XRP0.000087470.000087480.000087370.000087500.000087010.000087830.00005716250.00074396250.0047121021
17BTC_LTC0.020482060.020534990.020467510.020534990.020467500.020666010.00129210640.00164846630.0048493954
69BTC_ETC0.003355500.003364600.003355030.003365170.003340000.003378710.00135598270.00151116380.0057949102
87BTC_BCH0.118920120.119053620.118815060.119362960.118192070.119989700.00056130110.00230568410.0076046980
8BTC_DASH0.057276590.057545970.057276590.057546000.057000000.057896070.00235157160.00235183340.0078602632
76BTC_ZEC0.038600000.038650000.038580000.038739490.038337470.039280100.00064766840.00206700360.0122938472
94BTC_OMG0.001757560.001764470.001755410.001774400.001737370.001784520.00196579350.00540899280.0135693606
63BTC_LSK0.001873880.001874710.001857790.001882180.001829570.001882210.00022146560.00656425110.0143858940
\n", "
" ], "text/plain": [ " symbol best_bid best_ask best_1b_bid best_1b_ask best_10b_bid \\\n", "54 BTC_ETH 0.08258519 0.08265476 0.08238901 0.08265478 0.08218016 \n", "37 BTC_XMR 0.02805566 0.02811975 0.02805563 0.02813053 0.02795000 \n", "39 BTC_XRP 0.00008747 0.00008748 0.00008737 0.00008750 0.00008701 \n", "17 BTC_LTC 0.02048206 0.02053499 0.02046751 0.02053499 0.02046750 \n", "69 BTC_ETC 0.00335550 0.00336460 0.00335503 0.00336517 0.00334000 \n", "87 BTC_BCH 0.11892012 0.11905362 0.11881506 0.11936296 0.11819207 \n", "8 BTC_DASH 0.05727659 0.05754597 0.05727659 0.05754600 0.05700000 \n", "76 BTC_ZEC 0.03860000 0.03865000 0.03858000 0.03873949 0.03833747 \n", "94 BTC_OMG 0.00175756 0.00176447 0.00175541 0.00177440 0.00173737 \n", "63 BTC_LSK 0.00187388 0.00187471 0.00185779 0.00188218 0.00182957 \n", "\n", " best_10b_ask bid_ask_spread_norm bid_ask_1b_spread_norm \\\n", "54 0.08281458 0.0004212014 0.0016128972 \n", "37 0.02820082 0.0011421938 0.0013348479 \n", "39 0.00008783 0.0000571625 0.0007439625 \n", "17 0.02066601 0.0012921064 0.0016484663 \n", "69 0.00337871 0.0013559827 0.0015111638 \n", "87 0.11998970 0.0005613011 0.0023056841 \n", "8 0.05789607 0.0023515716 0.0023518334 \n", "76 0.03928010 0.0006476684 0.0020670036 \n", "94 0.00178452 0.0019657935 0.0054089928 \n", "63 0.00188221 0.0002214656 0.0065642511 \n", "\n", " bid_ask_10b_spread_norm \n", "54 0.0038599341 \n", "37 0.0044869410 \n", "39 0.0047121021 \n", "17 0.0048493954 \n", "69 0.0057949102 \n", "87 0.0076046980 \n", "8 0.0078602632 \n", "76 0.0122938472 \n", "94 0.0135693606 \n", "63 0.0143858940 " ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.sort_values('bid_ask_10b_spread_norm').head(10)" ] }, { "cell_type": "code", "execution_count": 155, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolbest_bidbest_askbest_1b_bidbest_1b_askbest_10b_bidbest_10b_askbid_ask_spread_normbid_ask_1b_spread_normbid_ask_10b_spread_norm
38BTC_XPM0.000092500.000093290.000084240.000099360.000050000.000110360.00427027030.08974358970.6036000000
1BTC_BELA0.000017440.000017450.000016950.000018610.000011270.000026700.00028669720.04896755160.6845607808
57BTC_BCY0.000044020.000044660.000042790.000051900.000033500.000079990.00726942300.10645010520.6938805970
2BTC_BLK0.000032590.000032820.000031110.000032860.000018860.000046000.00352868980.02812600450.7195121951
7BTC_CLAM0.000536620.000536630.000529900.000558260.000300000.000771540.00000931760.02675976600.7859000000
60BTC_RADS0.000555000.000555010.000550000.000588430.000281770.000950000.00000900900.03493636361.1857720836
12BTC_FLDC0.000002440.000002470.000002400.000002750.000001060.000003600.00614754100.07291666671.1981132075
21BTC_NEOS0.000409040.000413040.000390160.000454730.000179980.000653000.00488949740.08274810331.3140904545
11BTC_EMC20.000028480.000028560.000027510.000031120.000009800.000036420.00140449440.06561250451.3581632653
26BTC_PPC0.000306740.000310120.000302310.000323990.000100000.000490000.00550955210.03585723261.9500000000
\n", "
" ], "text/plain": [ " symbol best_bid best_ask best_1b_bid best_1b_ask best_10b_bid \\\n", "38 BTC_XPM 0.00009250 0.00009329 0.00008424 0.00009936 0.00005000 \n", "1 BTC_BELA 0.00001744 0.00001745 0.00001695 0.00001861 0.00001127 \n", "57 BTC_BCY 0.00004402 0.00004466 0.00004279 0.00005190 0.00003350 \n", "2 BTC_BLK 0.00003259 0.00003282 0.00003111 0.00003286 0.00001886 \n", "7 BTC_CLAM 0.00053662 0.00053663 0.00052990 0.00055826 0.00030000 \n", "60 BTC_RADS 0.00055500 0.00055501 0.00055000 0.00058843 0.00028177 \n", "12 BTC_FLDC 0.00000244 0.00000247 0.00000240 0.00000275 0.00000106 \n", "21 BTC_NEOS 0.00040904 0.00041304 0.00039016 0.00045473 0.00017998 \n", "11 BTC_EMC2 0.00002848 0.00002856 0.00002751 0.00003112 0.00000980 \n", "26 BTC_PPC 0.00030674 0.00031012 0.00030231 0.00032399 0.00010000 \n", "\n", " best_10b_ask bid_ask_spread_norm bid_ask_1b_spread_norm \\\n", "38 0.00011036 0.0042702703 0.0897435897 \n", "1 0.00002670 0.0002866972 0.0489675516 \n", "57 0.00007999 0.0072694230 0.1064501052 \n", "2 0.00004600 0.0035286898 0.0281260045 \n", "7 0.00077154 0.0000093176 0.0267597660 \n", "60 0.00095000 0.0000090090 0.0349363636 \n", "12 0.00000360 0.0061475410 0.0729166667 \n", "21 0.00065300 0.0048894974 0.0827481033 \n", "11 0.00003642 0.0014044944 0.0656125045 \n", "26 0.00049000 0.0055095521 0.0358572326 \n", "\n", " bid_ask_10b_spread_norm \n", "38 0.6036000000 \n", "1 0.6845607808 \n", "57 0.6938805970 \n", "2 0.7195121951 \n", "7 0.7859000000 \n", "60 1.1857720836 \n", "12 1.1981132075 \n", "21 1.3140904545 \n", "11 1.3581632653 \n", "26 1.9500000000 " ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.dropna().sort_values('bid_ask_10b_spread_norm').tail(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Handy liquidity 2 **\n", "\n", "The cumulative volume that is present in an order book at levels that are away from the naive mid market price by 0.5% or less. " ] }, { "cell_type": "code", "execution_count": 156, "metadata": {}, "outputs": [], "source": [ "def calc_liquidity2(symbol):\n", " r = requests.get('https://poloniex.com/public?command=returnOrderBook¤cyPair={symbol}&depth=1000'.format(symbol=symbol)).json()\n", " asks = pd.DataFrame.from_records(r['asks']).rename(columns={0:'price',1:'amount'})\n", " bids = pd.DataFrame.from_records(r['bids']).rename(columns={0:'price',1:'amount'})\n", " asks['price'] = asks['price'].astype(float)\n", " bids['price'] = bids['price'].astype(float)\n", " asks['vol'] = asks['price']*asks['amount']\n", " bids['vol'] = bids['price']*bids['amount']\n", " \n", " asks = asks[asks['price'] < asks['price'].min()*1.005]\n", " bids = bids[bids['price'] > bids['price'].max()*0.995]\n", " \n", " asks['vol'].sum() + bids['vol'].sum()\n", " \n", " return (symbol, asks['vol'].sum() + bids['vol'].sum())\n" ] }, { "cell_type": "code", "execution_count": 157, "metadata": {}, "outputs": [], "source": [ "col_names = ('symbol','cum_vol')" ] }, { "cell_type": "code", "execution_count": 158, "metadata": {}, "outputs": [], "source": [ "res = pd.DataFrame.from_records([calc_liquidity2(symbol) for symbol in list(tick.keys())])\n", "res.columns = col_names" ] }, { "cell_type": "code", "execution_count": 161, "metadata": {}, "outputs": [], "source": [ "# filter out non BTC_XXX pairs\n", "res = res[res['symbol'].str.startswith('BTC_')]" ] }, { "cell_type": "code", "execution_count": 162, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolcum_vol
0BTC_BCN4.4682113194
1BTC_BELA0.5605750506
2BTC_BLK1.1104506010
3BTC_BTCD0.1226621214
4BTC_BTM0.0030424615
\n", "
" ], "text/plain": [ " symbol cum_vol\n", "0 BTC_BCN 4.4682113194\n", "1 BTC_BELA 0.5605750506\n", "2 BTC_BLK 1.1104506010\n", "3 BTC_BTCD 0.1226621214\n", "4 BTC_BTM 0.0030424615" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.head()" ] }, { "cell_type": "code", "execution_count": 168, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolcum_vol
54BTC_ETH58.5730282961
17BTC_LTC32.5292035913
69BTC_ETC28.7028977690
37BTC_XMR26.1032723523
10BTC_DOGE22.7971542676
87BTC_BCH15.3069679272
76BTC_ZEC10.4303819202
23BTC_NXT10.2905658708
8BTC_DASH9.9785985597
39BTC_XRP9.3337031694
36BTC_XEM7.5982164581
28BTC_STR6.5657469885
94BTC_OMG5.5874987200
0BTC_BCN4.4682113194
18BTC_MAID3.9953841949
63BTC_LSK3.1878769171
30BTC_VIA3.0570022787
90BTC_ZRX2.8576900372
62BTC_DCR2.3294610386
66BTC_STEEM2.1739351543
\n", "
" ], "text/plain": [ " symbol cum_vol\n", "54 BTC_ETH 58.5730282961\n", "17 BTC_LTC 32.5292035913\n", "69 BTC_ETC 28.7028977690\n", "37 BTC_XMR 26.1032723523\n", "10 BTC_DOGE 22.7971542676\n", "87 BTC_BCH 15.3069679272\n", "76 BTC_ZEC 10.4303819202\n", "23 BTC_NXT 10.2905658708\n", "8 BTC_DASH 9.9785985597\n", "39 BTC_XRP 9.3337031694\n", "36 BTC_XEM 7.5982164581\n", "28 BTC_STR 6.5657469885\n", "94 BTC_OMG 5.5874987200\n", "0 BTC_BCN 4.4682113194\n", "18 BTC_MAID 3.9953841949\n", "63 BTC_LSK 3.1878769171\n", "30 BTC_VIA 3.0570022787\n", "90 BTC_ZRX 2.8576900372\n", "62 BTC_DCR 2.3294610386\n", "66 BTC_STEEM 2.1739351543" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.sort_values('cum_vol',ascending=False).head(20)" ] }, { "cell_type": "code", "execution_count": 167, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
symbolcum_vol
4BTC_BTM0.0030424615
15BTC_GRC0.0083063213
12BTC_FLDC0.0084011532
21BTC_NEOS0.0229709587
24BTC_PINK0.0230291717
92BTC_CVC0.0266437533
13BTC_FLO0.0300599054
11BTC_EMC20.0648765530
27BTC_RIC0.0769361480
35BTC_XCP0.0780650952
\n", "
" ], "text/plain": [ " symbol cum_vol\n", "4 BTC_BTM 0.0030424615\n", "15 BTC_GRC 0.0083063213\n", "12 BTC_FLDC 0.0084011532\n", "21 BTC_NEOS 0.0229709587\n", "24 BTC_PINK 0.0230291717\n", "92 BTC_CVC 0.0266437533\n", "13 BTC_FLO 0.0300599054\n", "11 BTC_EMC2 0.0648765530\n", "27 BTC_RIC 0.0769361480\n", "35 BTC_XCP 0.0780650952" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.sort_values('cum_vol',ascending=True).head(10)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }