v0.0.2
This commit is contained in:
parent
83c519fa29
commit
f316cf2029
83
Kraken.py
83
Kraken.py
@ -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
81
app.py
Normal 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)
|
@ -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)
|
Loading…
Reference in New Issue
Block a user