import matplotlib.pyplot as plt import boto import schedule import time from logger import logging import requests session = requests.Session() session.verify = False import krakenex from pykrakenapi import KrakenAPI api = krakenex.API() k = KrakenAPI(api) api.load_key('kraken_keys.py') df = k.get_trades_history(start=1558587601)[0] df.index = df.index.tz_localize(tz='UTC').tz_convert('US/Central') cols = ['ordertxid','cost', 'fee', 'margin', 'price', 'vol', 'type', 'ordertype'] df2 = df[cols].reset_index().groupby('ordertxid', as_index=False).agg({'dtime':'first', 'cost':'sum', 'fee':'sum', 'margin':'sum', 'price':'sum','vol':'sum', 'type':'first', 'ordertype':'first' }) df3 = df2.set_index('dtime').sort_values('dtime') df3['is_closing'] = ['open' if x=='limit' else 'close' for x in df3['ordertype']] def is_long(row): order_type = row[0] is_closing = row[1] if ((order_type=='buy') & (is_closing=='open')) | ((order_type=='sell') & (is_closing=='close')): return 'long' else: return 'short'
""" import krakenex from pykrakenapi import KrakenAPI #import os api = krakenex.API() key = "ignored/new_key.key" api.load_key(key) api.query_private(method="Balance") k = KrakenAPI(api) k.get_account_balance() k.get_trades_history() ohlc, last = k.get_ohlc_data("BCHUSD") print(ohlc) print(last) # open trade descr = k.add_standard_order(pair="XBTEUR", type="buy", ordertype="market", volume=0.002) descr k.get_open_orders(trades=True) k.get_tradable_asset_pairs() response = api.query_private('AddOrder', {
def load_data(start): # Connect to API: con = krakenex.API() con.load_key(kraken_key_filepath) api = KrakenAPI(con) # Load past trading data: count = 0 total_count = 1 df_list = [] unix_start = api.datetime_to_unixtime(pd.to_datetime(start)) while count < total_count: df, all_count = api.get_trades_history(start=unix_start, ofs=count) df = df[df['pair'] == CRYPTO + FIAT] df_list.append(df) total_count = all_count count += len(df) time.sleep(1) df = pd.concat(df_list).reset_index() df = df.drop_duplicates() # Convert to Central time: df['dtime'] = pd.to_datetime( pd.to_datetime(df['dtime']).dt.tz_localize('UTC').dt.tz_convert( 'US/Central').dt.strftime('%Y-%m-%d %H:%M:%S')) # Merge trades with the same order id: df_wrangled = df.reset_index().groupby('ordertxid', as_index=False).agg({ 'dtime': 'min', 'type': 'min', 'ordertype': 'min', 'price': 'min', 'cost': 'sum', 'fee': 'sum', 'vol': 'sum' }).sort_values('dtime').reset_index(drop=True) # Build buy/sell matching ids: df_wrangled['trade_matchID'] = 0 buy = False matchID = 1 for i, row in df_wrangled.iterrows(): # Skip the first trade if it's a sell if row['type'] == 'sell': if buy: df_wrangled['trade_matchID'][i] = matchID matchID += 1 buy = False else: continue elif row['type'] == 'buy': df_wrangled['trade_matchID'][i] = matchID buy = True # Put the buy and the sell on the same line: df_sell = df_wrangled[df_wrangled['type'] == 'sell'].set_index( 'trade_matchID') df_buy = df_wrangled[df_wrangled['type'] == 'buy'].set_index( 'trade_matchID') df_trade = df_buy.merge(df_sell, how='left', left_index=True, right_index=True, suffixes=['_buy', '_sell']) # Build new fields: df_trade['time_held'] = df_trade['dtime_sell'] - df_trade['dtime_buy'] df_trade['time_held'] = [str(x) for x in df_trade['time_held']] df_trade['fee_total'] = df_trade['fee_buy'] + df_trade['fee_sell'] df_trade['abs_return'] = df_trade['cost_sell'] - df_trade['cost_buy'] df_trade['feeAdjusted_abs_return'] = df_trade['cost_sell'] - df_trade[ 'fee_total'] - df_trade['cost_buy'] df_trade['pct_return'] = df_trade['abs_return'] / df_trade['cost_buy'] df_trade['feeAdjusted_pct_return'] = df_trade[ 'feeAdjusted_abs_return'] / df_trade['cost_buy'] df_trade['winning_trade'] = [ 1 if x > 0 else 0 for x in df_trade['feeAdjusted_pct_return'] ] return df_trade