research/price_analysis/price_grabber.py

55 lines
1.8 KiB
Python

import datetime, json, random
try:
from urllib.request import build_opener
except:
from urllib2 import build_opener
# Makes a request to a given URL (first arg) and optional params (second arg)
def make_request(*args):
opener = build_opener()
opener.addheaders = [('User-agent',
'Mozilla/5.0'+str(random.randrange(1000000)))]
try:
return opener.open(*args).read().strip()
except Exception as e:
try:
p = e.read().strip()
except:
p = e
raise Exception(p)
coins = ['BTC', 'ETH', 'LTC', 'XMR', 'XRP', 'DASH', 'MAID', 'XEM', 'DOGE']
altcoins = coins[1:]
now = int(datetime.datetime.now().strftime('%s'))
prices = []
coinstring = ','.join(altcoins)
for t in range(now, now - 86400 * 365, -86400):
btcprice = json.loads(make_request('https://min-api.cryptocompare.com/data/pricehistorical?fsym=BTC&tsyms=USD&ts=%d' % t))["BTC"]["USD"]
cryptoprices = json.loads(make_request('https://min-api.cryptocompare.com/data/pricehistorical?fsym=BTC&tsyms=%s&ts=%d' % (coinstring, t)))["BTC"]
pricelist = {'BTC': btcprice, 'timestamp': t}
for p in altcoins:
pricelist[p] = btcprice * 1.0 / cryptoprices[p]
print pricelist
prices.append(pricelist)
print 'all prices', prices
cov = {}
for k1 in coins:
cov[k1] = {}
for k2 in coins:
cov[k1][k2] = 0
for i in range(len(prices) - 1):
for k1 in coins:
pricechangek1 = prices[i + 1][k1] / prices[i][k1] - 1
for k2 in coins:
pricechangek2 = prices[i + 1][k2] / prices[i][k2] - 1
cov[k1][k2] += pricechangek1 * pricechangek2
print 'raw cov', cov
var = {c: cov[c][c] for c in coins}
for k1 in coins:
for k2 in coins:
cov[k1][k2] /= (var[k1] ** 0.5 * var[k2] ** 0.5)
print 'correlation', cov