This commit is contained in:
Eric Meehan 2024-09-09 09:46:21 -04:00
parent 03b5877206
commit f0cb853984

48
app.py
View File

@ -1,14 +1,23 @@
import krakenex
import os
import pandas
import time
from dotenv import load_dotenv
from pykrakenapi import KrakenAPI
from scipy.stats import linregress
from time import sleep
k = krakenex.API()
k.load_key('kraken.key')
load_dotenv()
R_VALUE_TARGET = float(os.getenv('R_VALUE_TARGET'))
INVESTMENT_COUNT = int(os.getenv('INVESTMENT_COUNT'))
INVESTMENT_VOLUME = float(os.getenv('INVESTMENT_VOLUME'))
k = krakenex.API(
os.getenv('KRAKEN_API_TOKEN'),
os.getenv('KRAKEN_API_SEC')
)
kraken = KrakenAPI(k, tier='Pro')
def filter_asset_pairs(tradable_asset_pairs):
@ -18,8 +27,8 @@ def filter_asset_pairs(tradable_asset_pairs):
]
def model_asset_pair(asset_pair):
sleep(1)
ohlc = kraken.get_ohlc_data(asset_pair)[0]
sleep(kraken.factor)
model = pandas.DataFrame({
'open': linregress(ohlc['time'].astype(float), ohlc['open'].astype(float)),
'high': linregress(ohlc['time'].astype(float), ohlc['high'].astype(float)),
@ -39,7 +48,10 @@ def grade_models(models):
'stderr': models[model].stderr.mean()
} for model in models
}).transpose()
filtered_models = model_averages[model_averages['r_value'] >= os.getenv('R_VALUE_TARGET')]
filtered_models = model_averages[
(model_averages['r_value'] >= R_VALUE_TARGET) &
(model_averages['slope'] > 0)
]
return filtered_models.sort_values(by='slope', ascending=False)
def sell_asset(market, volume):
@ -47,21 +59,26 @@ def sell_asset(market, volume):
ordertype = 'market',
type = 'sell',
pair = market,
volume = volume
volume = volume,
validate = False
)
sleep(kraken.factor)
print(f"Sold {volume} on {market}")
def buy_asset(market, volume):
kraken.add_standard_order(
ordertype = 'market',
type = 'buy',
pair = market,
volume = volume
volume = volume,
validate = False
)
print(f"Purchased {volume} on {market}")
sleep(kraken.factor)
if __name__ == '__main__':
load_dotenv()
def main():
asset_pairs = filter_asset_pairs(kraken.get_tradable_asset_pairs())
sleep(kraken.factor)
graded_models = grade_models(
{asset_pair: model_asset_pair(asset_pair) for asset_pair in asset_pairs.index}
)
@ -72,10 +89,15 @@ if __name__ == '__main__':
if market.index[0] not in graded_models[:5].index:
sell_asset(market, account_balance.loc[asset].vol)
while len(account_balance := kraken.get_account_balance()) - 1 < os.getenv('INVESTMENT_COUNT'):
if account_balance.loc['ZUSD'] <= os.getenv('INVESTMENT_VOLUME'):
while len(account_balance := kraken.get_account_balance()) - 1 < INVESTMENT_COUNT:
if account_balance.loc['ZUSD'].vol <= INVESTMENT_VOLUME:
break
for market in graded_models:
for market in graded_models.index:
if asset_pairs.loc[market].base not in account_balance.index:
buy_asset(market, os.getenv('INVESTMENT_VOLUME'))
ohlc, last = kraken.get_ohlc_data(market)
volume = INVESTMENT_VOLUME/ohlc.iloc[-1].close
buy_asset(market, volume)
break
if __name__ == '__main__':
main()