This commit is contained in:
Eric Meehan 2024-08-26 16:05:15 -04:00
parent 83c519fa29
commit f316cf2029
3 changed files with 152 additions and 20 deletions

View File

@ -7,10 +7,75 @@ import time
import urllib.parse
class Kraken():
ASSETS = [
'ZUSD',
'XETH',
'XXBT'
]
ASSET_PAIRS = {
'XBTUSD': 'XXBTZUSD'
'ZUSD': {
'ETHUSD': 'XETHZUSD',
'XBTUSD': 'XXBTZUSD'
},
'XETH': {
'ETHUSD': 'XETHZUSD',
'ETHXBT': 'XETHXXBT'
},
'XXBT': {
'ETHXBT': 'XETHXXBT',
'XBTUSD': 'XXBTZUSD'
}
}
class Order():
class Close():
def __init__(self, ordertype, price, price2):
self.ordertype = ordertype
self.price = price
self.price2 = price2
def asdict(self):
data = {
'ordertype': self.ordertype,
'price': self.price
}
if self.price2:
data['price2'] = self.price2
return data
def __init__(self, ordertype, price, type, volume, close=None, pair=None, price2=None, timeinforce=None, userref=None):
self.close = close
self.ordertype = ordertype
self.pair = pair
self.price = price
self.price2 = price2
self.timeinforce = timeinforce
self.type = type
self.userref = userref
self.volume = volume
def asdict(self):
data = {
'nonce': str(int(1000*time.time())),
'ordertype': self.ordertype,
'price': self.price,
'type': self.type,
'volume': self.volume
}
if self.close:
data['close'] = self.close
if self.pair:
data['pair'] = self.pair
if self.price2:
data['price2'] = self.price2
if self.timeinforce:
data['timeinforce'] = self.timeinforce
if self.userref:
data['userref'] = self.userref
return data
def __init__(self):
self.api_url = 'https://api.kraken.com/'
self.api_token = os.getenv('KRAKEN_API_TOKEN')
@ -34,19 +99,13 @@ class Kraken():
'API-Sign': self._get_kraken_signature(uri_path, data, self.api_sec)
},
data=data
)
).json()
def get_account_balance(self):
return self._kraken_request('/0/private/Balance', {'nonce': str(int(1000*time.time()))})
def add_order(self, order):
return self._kraken_request('/0/private/AddOrder', dict(order))
def ohlc(self, asset_pair):
resp = requests.get(f'{self.api_url}/0/public/OHLC?pair={asset_pair}').json()
return {
'time': [int(each[0]) for each in resp['result'][self.ASSET_PAIRS[asset_pair]]],
'open': [float(each[1]) for each in resp['result'][self.ASSET_PAIRS[asset_pair]]],
'high': [float(each[2]) for each in resp['result'][self.ASSET_PAIRS[asset_pair]]],
'low': [float(each[3]) for each in resp['result'][self.ASSET_PAIRS[asset_pair]]],
'close': [float(each[4]) for each in resp['result'][self.ASSET_PAIRS[asset_pair]]],
'volume': [float(each[5]) for each in resp['result'][self.ASSET_PAIRS[asset_pair]]],
'count': [float(each[6]) for each in resp['result'][self.ASSET_PAIRS[asset_pair]]]
}
return requests.get(f'{self.api_url}/0/public/OHLC?pair={asset_pair}').json()

81
app.py Normal file
View File

@ -0,0 +1,81 @@
import numpy
from dotenv import load_dotenv
from Kraken import Kraken
from scipy import stats
load_dotenv()
kraken = Kraken()
raw = {
asset: {
asset_pair: kraken.ohlc(asset_pair) for asset_pair in kraken.ASSET_PAIRS[asset]
} for asset in kraken.ASSETS
}
processed = {
asset: {
asset_pair: {
'time': numpy.array(
[int(each[0]) for each in raw[asset][asset_pair]['result'][kraken.ASSET_PAIRS[asset][asset_pair]]]
),
'open': numpy.array(
[float(each[1]) for each in raw[asset][asset_pair]['result'][kraken.ASSET_PAIRS[asset][asset_pair]]]
),
'high': numpy.array(
[float(each[2]) for each in raw[asset][asset_pair]['result'][kraken.ASSET_PAIRS[asset][asset_pair]]]
),
'low': numpy.array(
[float(each[3]) for each in raw[asset][asset_pair]['result'][kraken.ASSET_PAIRS[asset][asset_pair]]]
),
'close': numpy.array(
[float(each[4]) for each in raw[asset][asset_pair]['result'][kraken.ASSET_PAIRS[asset][asset_pair]]]
),
'volume': numpy.array(
[float(each[5]) for each in raw[asset][asset_pair]['result'][kraken.ASSET_PAIRS[asset][asset_pair]]]
),
'count': numpy.array(
[float(each[6]) for each in raw[asset][asset_pair]['result'][kraken.ASSET_PAIRS[asset][asset_pair]]]
)
} for asset_pair in kraken.ASSET_PAIRS[asset]
} for asset in kraken.ASSETS
}
linregresses = {
asset: {
asset_pair: {
'open': stats.linregress(
processed[asset][asset_pair]['time'],
processed[asset][asset_pair]['open']
),
'high': stats.linregress(
processed[asset][asset_pair]['time'],
processed[asset][asset_pair]['high']
),
'low': stats.linregress(
processed[asset][asset_pair]['time'],
processed[asset][asset_pair]['low']
),
'close': stats.linregress(
processed[asset][asset_pair]['time'],
processed[asset][asset_pair]['close']
)
} for asset_pair in kraken.ASSET_PAIRS[asset]
} for asset in kraken.ASSETS
}
slopes = {
asset: {
asset_pair: {
'open': linregresses[asset][asset_pair]['open'].slope,
'high': linregresses[asset][asset_pair]['high'].slope,
'low': linregresses[asset][asset_pair]['low'].slope,
'close': linregresses[asset][asset_pair]['close'].slope
} for asset_pair in kraken.ASSET_PAIRS[asset]
} for asset in kraken.ASSETS
}
averages = {
asset: {
asset_pair: sum(
[slopes[asset][asset_pair][each] for each in slopes[asset][asset_pair]]
)/4 for asset_pair in kraken.ASSET_PAIRS[asset]
} for asset in kraken.ASSETS
}
print(averages)

View File

@ -1,8 +0,0 @@
import numpy
from scipy import stats
def linear_regression(timestamps, values):
x = numpy.array(timestamps)
y = numpy.array(values)
return stats.linregress(x, y)