Let’s set up the environment first. We need the coingecko API to fetch prices, and pandas to work with timeseries (and tabular data in general).
from pycoingecko import CoinGeckoAPI
gecko = CoinGeckoAPI()
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib notebook
import datetime as dt
import requests
from time import sleep
from IPython.display import clear_output
First, let’s set up the correct URL and parsing and all that jazz.
def __get_historical_data_url(coin_id, currency_id, start_date, end_date):
return 'https://www.coingecko.com/en/coins/{}/historical_data/{}?end_date={}&start_date={}'.format(coin_id, currency_id, end_date.isoformat(), start_date.isoformat())
def get_historical_data_scraper(coin_id, currency_id, start_date_s, end_date_s):
start_date = dt.date.fromisoformat(start_date_s)
end_date = dt.date.fromisoformat(end_date_s)
url = __get_historical_data_url(coin_id, currency_id, start_date, end_date)
r = requests.get(url, timeout=5, stream=True)
try:
dfs = pd.read_html(r.content, parse_dates=['Date'])
except:
return None
if len(dfs) != 1:
return None
df = dfs[0][::-1].set_index("Date")
df = df.replace({'[$,]': ''}, regex=True).apply(pd.to_numeric)
df.columns = pd.MultiIndex.from_product([[coin_id], df.columns])
return df
def get_historical_data_gecko(coin_id, currency_id, start_date_s, end_date_s):
p = gecko.get_coin_market_chart_range_by_id(coin_id, currency_id, dt.datetime.fromisoformat(start_date_s).strftime("%s"), dt.datetime.fromisoformat(end_date_s).strftime("%s"))
df_mcaps = pd.DataFrame(p['market_caps'], columns=['Date', 'Market Cap'])
df_mcaps['Date'] = pd.to_datetime(df_mcaps['Date'].apply(lambda x: dt.datetime.utcfromtimestamp(x/1000).date()))
df_mcaps.set_index("Date", inplace=True)
df_vol = pd.DataFrame(p['total_volumes'], columns=['Date', 'Volume'])
df_vol['Date'] = pd.to_datetime(df_vol['Date'].apply(lambda x: dt.datetime.utcfromtimestamp(x/1000).date()))
df_vol.set_index("Date", inplace=True)
df_prices = pd.DataFrame(p['prices'], columns=['Date', 'Open'])
df_prices['Date'] = pd.to_datetime(df_prices['Date'].apply(lambda x: dt.datetime.utcfromtimestamp(x/1000).date()))
df_prices.set_index("Date", inplace=True)
df = pd.concat([df_mcaps, df_vol, df_prices], axis=1)
df['Close'] = df['Open'].shift(-1)
df.columns = pd.MultiIndex.from_product([[coin_id], df.columns])
return df
def get_historical_data(coin_id, currency_id, start_date_s, end_date_s):
df = None
try:
df = get_historical_data_gecko(coin_id, currency_id, start_date_s, end_date_s)
except:
try:
df = get_historical_data_scraper(coin_id, currency_id, start_date_s, end_date_s)
except:
return None
return df
Let’s test the functions.
df = get_historical_data('bitcoin', 'usd', '2013-01-01', '2021-04-01')
df.head()
bitcoin | ||||
---|---|---|---|---|
Market Cap | Volume | Open | Close | |
Date | ||||
2013-04-28 | 1.500518e+09 | 0.0 | 135.30 | 141.96 |
2013-04-29 | 1.575032e+09 | 0.0 | 141.96 | 135.30 |
2013-04-30 | 1.501657e+09 | 0.0 | 135.30 | 117.00 |
2013-05-01 | 1.298952e+09 | 0.0 | 117.00 | 103.43 |
2013-05-02 | 1.148668e+09 | 0.0 | 103.43 | 91.01 |
coins_list = pd.DataFrame(gecko.get_coins_list())
Finally, let’s download the daily data for all tokens, across all time.
df_complete = None
coins_list_ids = coins_list['id']
coins_list_ids_len = len(coins_list_ids)
i = 2206
timeout = 1
while i < coins_list_ids_len:
coin = coins_list_ids[i]
df = get_historical_data(coin, 'usd', '2013-01-01', '2021-04-01')
if df is None:
print ("Failed to download", coin)
sleep(timeout)
continue
i = i + 1
if df_complete is None:
df_complete = df
else:
df_complete = df_complete.join(df, how='outer')
clear_output(wait=True)
print ("Downloaded", coin, "{}/{}".format(i, coins_list_ids_len - 1))
Downloaded etf-dao 2205/6547
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-15-a1cc93c97937> in <module>
18 df_complete = df
19 else:
---> 20 df_complete = df_complete.join(df, how='outer')
21
22 clear_output(wait=True)
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/frame.py in join(self, other, on, how, lsuffix, rsuffix, sort)
8109 """
8110 return self._join_compat(
-> 8111 other, on=on, how=how, lsuffix=lsuffix, rsuffix=rsuffix, sort=sort
8112 )
8113
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/frame.py in _join_compat(self, other, on, how, lsuffix, rsuffix, sort)
8141 right_index=True,
8142 suffixes=(lsuffix, rsuffix),
-> 8143 sort=sort,
8144 )
8145 else:
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/reshape/merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
87 validate=validate,
88 )
---> 89 return op.get_result()
90
91
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/reshape/merge.py in get_result(self)
695 axes=[llabels.append(rlabels), join_index],
696 concat_axis=0,
--> 697 copy=self.copy,
698 )
699
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/internals/concat.py in concatenate_block_managers(mgrs_indexers, axes, concat_axis, copy)
51 """
52 concat_plans = [
---> 53 _get_mgr_concatenation_plan(mgr, indexers) for mgr, indexers in mgrs_indexers
54 ]
55 concat_plan = _combine_concat_plans(concat_plans, concat_axis)
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/internals/concat.py in <listcomp>(.0)
51 """
52 concat_plans = [
---> 53 _get_mgr_concatenation_plan(mgr, indexers) for mgr, indexers in mgrs_indexers
54 ]
55 concat_plan = _combine_concat_plans(concat_plans, concat_axis)
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/internals/concat.py in _get_mgr_concatenation_plan(mgr, indexers)
122
123 ax0_indexer = None
--> 124 blknos = mgr.blknos
125 blklocs = mgr.blklocs
126
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/internals/managers.py in blknos(self)
167 if self._blknos is None:
168 # Note: these can be altered by other BlockManager methods.
--> 169 self._rebuild_blknos_and_blklocs()
170
171 return self._blknos
~/docs/projects/by-year-month/2021/03/bplfamily/notebooks/.venv/lib/python3.7/site-packages/pandas/core/internals/managers.py in _rebuild_blknos_and_blklocs(self)
242 rl = blk.mgr_locs
243 new_blknos[rl.indexer] = blkno
--> 244 new_blklocs[rl.indexer] = np.arange(len(rl))
245
246 if (new_blknos == -1).any():
KeyboardInterrupt:
# df_complete.to_parquet("CoinGecko_2013-04-28_2021-03-28_2205.parquet")
df = get_historical_data('0-5x-long-shitcoin-index-token', 'usd', '2013-01-01', '2021-04-01')
df_complete.head()
01coin | 0-5x-long-algorand-token | 0-5x-long-altcoin-index-token | ... | 1x-short-theta-network-token | 1x-short-tomochain-token | 1x-short-trx-token | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | ... | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | |
Date | |||||||||||||||||||||
2017-06-14 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2017-06-15 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2017-06-16 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2017-06-17 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2017-06-18 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 280 columns
df_complete_first
01coin | 0-5x-long-algorand-token | 0-5x-long-altcoin-index-token | ... | engine | enigma | enjincoin | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | ... | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | |
Date | |||||||||||||||||||||
2013-04-28 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | ... | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 |
2013-04-29 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | ... | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 |
2013-04-30 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | ... | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 |
2013-05-01 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | ... | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 |
2013-05-02 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | ... | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2021-03-24 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | ... | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 |
2021-03-25 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | ... | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 |
2021-03-26 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | ... | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 |
2021-03-27 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | ... | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 |
2021-03-28 | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | ... | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN |
2890 rows × 8604 columns
df_complete_second
enkronos | enq-enecuum | en-tan-mo | ... | shitcoin-token | shivers | shopping-io | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | ... | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | |
Date | |||||||||||||||||||||
2013-04-28 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | ... | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 |
2013-04-29 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | ... | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 |
2013-04-30 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | ... | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 |
2013-05-01 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | ... | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 |
2013-05-02 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | ... | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2021-03-24 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | ... | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 |
2021-03-25 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | ... | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 |
2021-03-26 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | ... | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 |
2021-03-27 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | ... | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 |
2021-03-28 | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | ... | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN |
2890 rows × 11464 columns
df_complete_third
shorty | showhand | shrimp-capital | ... | zyx | zzz-finance | zzz-finance-v2 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | ... | Open | Close | Market Cap | Volume | Open | Close | Market Cap | Volume | Open | Close | |
Date | |||||||||||||||||||||
2013-04-28 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | ... | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 | 1.500518e+09 | 0.000000e+00 | 135.30 | 141.96 |
2013-04-29 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | ... | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 | 1.575032e+09 | 0.000000e+00 | 141.96 | 135.30 |
2013-04-30 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | ... | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 | 1.501657e+09 | 0.000000e+00 | 135.30 | 117.00 |
2013-05-01 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | ... | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 | 1.298952e+09 | 0.000000e+00 | 117.00 | 103.43 |
2013-05-02 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | ... | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 | 1.148668e+09 | 0.000000e+00 | 103.43 | 91.01 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2021-03-24 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | ... | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 | 1.017637e+12 | 6.038338e+10 | 54585.00 | 52527.00 |
2021-03-25 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | ... | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 | 9.827974e+11 | 7.302905e+10 | 52527.00 | 51417.00 |
2021-03-26 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | ... | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 | 9.591553e+11 | 6.340164e+10 | 51417.00 | 55033.00 |
2021-03-27 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | ... | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 | 1.027210e+12 | 5.544256e+10 | 55033.00 | 55832.00 |
2021-03-28 | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | ... | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN | 1.042184e+12 | 4.728575e+10 | 55832.00 | NaN |
2890 rows × 6112 columns
df_complete.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2890 entries, 2013-04-28 to 2021-03-28
Columns: 11464 entries, ('enkronos', 'Market Cap') to ('shopping-io', 'Close')
dtypes: float64(11464)
memory usage: 252.9 MB
coins_list.iloc[109]
id 3x-long-midcap-index-token
symbol midbull
name 3X Long Midcap Index Token
Name: 109, dtype: object
df_complete = df_complete_first.join(df_complete_second.join(df_complete_third, how='outer'), how='outer')
df_complete.to_parquet("CoinGecko_2013-04-28_2021-03-28.parquet")
df_spendcoin = get_historical_data('spendcoin', 'usd', '2010-01-01', '2021-03-28')
df_spendcoin['spendcoin']['Close'].plot()
<IPython.core.display.Javascript object>
<AxesSubplot:xlabel='Date'>
coin_id = 'bitcoin'
currency_id = 'usd'
start_date_s = '2013-01-01'
end_date_s = '2021-04-01'
p = gecko.get_coin_market_chart_range_by_id(coin_id, currency_id, dt.datetime.fromisoformat(start_date_s).strftime("%s"), dt.datetime.fromisoformat(end_date_s).strftime("%s"))
df_mcaps = pd.DataFrame(p['market_caps'], columns=['Date', 'Market Cap'])
df_mcaps['Date'] = pd.to_datetime(df_mcaps['Date'].apply(lambda x: dt.datetime.utcfromtimestamp(x/1000).date()))
df_mcaps.set_index("Date", inplace=True)
df_vol = pd.DataFrame(p['total_volumes'], columns=['Date', 'Volume'])
df_vol['Date'] = pd.to_datetime(df_vol['Date'].apply(lambda x: dt.datetime.utcfromtimestamp(x/1000).date()))
df_vol.set_index("Date", inplace=True)
df_prices = pd.DataFrame(p['prices'], columns=['Date', 'Open'])
df_prices['Date'] = pd.to_datetime(df_prices['Date'].apply(lambda x: dt.datetime.utcfromtimestamp(x/1000).date()))
df_prices.set_index("Date", inplace=True)
df = pd.concat([df_mcaps, df_vol, df_prices], axis=1)
df['Close'] = df['Open'].shift(-1)
df.columns = pd.MultiIndex.from_product([[coin_id], df.columns])
bitcoin | ||||
---|---|---|---|---|
Market Cap | Volume | Open | Close | |
Date | ||||
2013-04-28 | 1.500518e+09 | 0.0 | 135.30 | 141.96 |
2013-04-29 | 1.575032e+09 | 0.0 | 141.96 | 135.30 |
2013-04-30 | 1.501657e+09 | 0.0 | 135.30 | 117.00 |
2013-05-01 | 1.298952e+09 | 0.0 | 117.00 | 103.43 |
2013-05-02 | 1.148668e+09 | 0.0 | 103.43 | 91.01 |
2013-05-03 | 1.011066e+09 | 0.0 | 91.01 | 111.25 |
2013-05-04 | 1.236352e+09 | 0.0 | 111.25 | 116.79 |
2013-05-05 | 1.298378e+09 | 0.0 | 116.79 | 118.33 |
2013-05-06 | 1.315992e+09 | 0.0 | 118.33 | 106.40 |
2013-05-07 | 1.183766e+09 | 0.0 | 106.40 | 112.64 |
df = get_historical_data('bitcoin', 'usd', '2013-01-01', '2021-04-01')
df.head()
bitcoin | ||||
---|---|---|---|---|
Market Cap | Volume | Open | Close | |
Date | ||||
2013-04-28 | 1.500518e+09 | 0.0 | 135.30 | 141.96 |
2013-04-29 | 1.575032e+09 | 0.0 | 141.96 | 135.30 |
2013-04-30 | 1.501657e+09 | 0.0 | 135.30 | 117.00 |
2013-05-01 | 1.298952e+09 | 0.0 | 117.00 | 103.43 |
2013-05-02 | 1.148668e+09 | 0.0 | 103.43 | 91.01 |