From f0cb853984623467aedcab67d6004e7f176c3254 Mon Sep 17 00:00:00 2001 From: eric o meehan Date: Mon, 9 Sep 2024 09:46:21 -0400 Subject: [PATCH] v0.0.5 --- app.py | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/app.py b/app.py index 0e5685a..511e5be 100644 --- a/app.py +++ b/app.py @@ -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()