v0.0.5
This commit is contained in:
parent
03b5877206
commit
f0cb853984
48
app.py
48
app.py
@ -1,14 +1,23 @@
|
|||||||
import krakenex
|
import krakenex
|
||||||
import os
|
import os
|
||||||
import pandas
|
import pandas
|
||||||
|
import time
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from pykrakenapi import KrakenAPI
|
from pykrakenapi import KrakenAPI
|
||||||
from scipy.stats import linregress
|
from scipy.stats import linregress
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
k = krakenex.API()
|
load_dotenv()
|
||||||
k.load_key('kraken.key')
|
|
||||||
|
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')
|
kraken = KrakenAPI(k, tier='Pro')
|
||||||
|
|
||||||
def filter_asset_pairs(tradable_asset_pairs):
|
def filter_asset_pairs(tradable_asset_pairs):
|
||||||
@ -18,8 +27,8 @@ def filter_asset_pairs(tradable_asset_pairs):
|
|||||||
]
|
]
|
||||||
|
|
||||||
def model_asset_pair(asset_pair):
|
def model_asset_pair(asset_pair):
|
||||||
sleep(1)
|
|
||||||
ohlc = kraken.get_ohlc_data(asset_pair)[0]
|
ohlc = kraken.get_ohlc_data(asset_pair)[0]
|
||||||
|
sleep(kraken.factor)
|
||||||
model = pandas.DataFrame({
|
model = pandas.DataFrame({
|
||||||
'open': linregress(ohlc['time'].astype(float), ohlc['open'].astype(float)),
|
'open': linregress(ohlc['time'].astype(float), ohlc['open'].astype(float)),
|
||||||
'high': linregress(ohlc['time'].astype(float), ohlc['high'].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()
|
'stderr': models[model].stderr.mean()
|
||||||
} for model in models
|
} for model in models
|
||||||
}).transpose()
|
}).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)
|
return filtered_models.sort_values(by='slope', ascending=False)
|
||||||
|
|
||||||
def sell_asset(market, volume):
|
def sell_asset(market, volume):
|
||||||
@ -47,21 +59,26 @@ def sell_asset(market, volume):
|
|||||||
ordertype = 'market',
|
ordertype = 'market',
|
||||||
type = 'sell',
|
type = 'sell',
|
||||||
pair = market,
|
pair = market,
|
||||||
volume = volume
|
volume = volume,
|
||||||
|
validate = False
|
||||||
)
|
)
|
||||||
|
sleep(kraken.factor)
|
||||||
|
print(f"Sold {volume} on {market}")
|
||||||
|
|
||||||
def buy_asset(market, volume):
|
def buy_asset(market, volume):
|
||||||
kraken.add_standard_order(
|
kraken.add_standard_order(
|
||||||
ordertype = 'market',
|
ordertype = 'market',
|
||||||
type = 'buy',
|
type = 'buy',
|
||||||
pair = market,
|
pair = market,
|
||||||
volume = volume
|
volume = volume,
|
||||||
|
validate = False
|
||||||
)
|
)
|
||||||
|
print(f"Purchased {volume} on {market}")
|
||||||
|
sleep(kraken.factor)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def main():
|
||||||
load_dotenv()
|
|
||||||
|
|
||||||
asset_pairs = filter_asset_pairs(kraken.get_tradable_asset_pairs())
|
asset_pairs = filter_asset_pairs(kraken.get_tradable_asset_pairs())
|
||||||
|
sleep(kraken.factor)
|
||||||
graded_models = grade_models(
|
graded_models = grade_models(
|
||||||
{asset_pair: model_asset_pair(asset_pair) for asset_pair in asset_pairs.index}
|
{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:
|
if market.index[0] not in graded_models[:5].index:
|
||||||
sell_asset(market, account_balance.loc[asset].vol)
|
sell_asset(market, account_balance.loc[asset].vol)
|
||||||
|
|
||||||
while len(account_balance := kraken.get_account_balance()) - 1 < os.getenv('INVESTMENT_COUNT'):
|
while len(account_balance := kraken.get_account_balance()) - 1 < INVESTMENT_COUNT:
|
||||||
if account_balance.loc['ZUSD'] <= os.getenv('INVESTMENT_VOLUME'):
|
if account_balance.loc['ZUSD'].vol <= INVESTMENT_VOLUME:
|
||||||
break
|
break
|
||||||
for market in graded_models:
|
for market in graded_models.index:
|
||||||
if asset_pairs.loc[market].base not in account_balance.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
|
break
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
Loading…
Reference in New Issue
Block a user