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
|
import urllib.parse
|
||||||
|
|
||||||
class Kraken():
|
class Kraken():
|
||||||
|
ASSETS = [
|
||||||
|
'ZUSD',
|
||||||
|
'XETH',
|
||||||
|
'XXBT'
|
||||||
|
]
|
||||||
|
|
||||||
ASSET_PAIRS = {
|
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):
|
def __init__(self):
|
||||||
self.api_url = 'https://api.kraken.com/'
|
self.api_url = 'https://api.kraken.com/'
|
||||||
self.api_token = os.getenv('KRAKEN_API_TOKEN')
|
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)
|
'API-Sign': self._get_kraken_signature(uri_path, data, self.api_sec)
|
||||||
},
|
},
|
||||||
data=data
|
data=data
|
||||||
)
|
).json()
|
||||||
|
|
||||||
def get_account_balance(self):
|
def get_account_balance(self):
|
||||||
return self._kraken_request('/0/private/Balance', {'nonce': str(int(1000*time.time()))})
|
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):
|
def ohlc(self, asset_pair):
|
||||||
resp = requests.get(f'{self.api_url}/0/public/OHLC?pair={asset_pair}').json()
|
return 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]]]
|
|
||||||
}
|
|
||||||
|
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