Store changes for rebase, positions prototype
parent
88061d8799
commit
0285a847d8
|
@ -387,8 +387,76 @@ async def get_client() -> Client:
|
||||||
}
|
}
|
||||||
|
|
||||||
balances = await client.get_user_data('Balance', data)
|
balances = await client.get_user_data('Balance', data)
|
||||||
|
traders = await client.get_user_data('TradesHistory', data)
|
||||||
ledger = await client.get_ledger(data)
|
ledger = await client.get_ledger(data)
|
||||||
|
|
||||||
# positions
|
# positions
|
||||||
|
## TODO: Make sure to add option with fees
|
||||||
|
n, m = ledger.shape
|
||||||
|
ledger['time'] = ledger['time'].apply(lambda x: int(x))
|
||||||
|
assets = set(ledger['asset'])
|
||||||
|
trade_times = set(ledger['time'])
|
||||||
|
trades = {}
|
||||||
|
positions = {}
|
||||||
|
# for index, row in ledger.iterrows():
|
||||||
|
# if index == n:
|
||||||
|
# break
|
||||||
|
# asset = row['asset']
|
||||||
|
# ## TODO: Look into a way to generalize this
|
||||||
|
# if asset != 'ZEUR' and ledger.loc[index+1, 'asset'] == 'ZEUR':
|
||||||
|
# try:
|
||||||
|
# trades[asset]['amounts'].append(float(ledger.loc[index, 'amount']))
|
||||||
|
# trades[asset]['prices'].append(float(ledger.loc[index+1, 'amount']))
|
||||||
|
# except KeyError:
|
||||||
|
# trades[asset] = {
|
||||||
|
# 'amounts': [float(ledger.loc[index+1, 'amount'])],
|
||||||
|
# 'prices': [float(ledger.loc[index+1, 'amount'])]
|
||||||
|
# }
|
||||||
|
|
||||||
|
## TODO: Look into a way to generalize this for any fiat
|
||||||
|
## TODO: Figure out how to handle coin for coin trades
|
||||||
|
for trade_time in trade_times:
|
||||||
|
trade = ledger[ledger['time'] == trade_time]
|
||||||
|
coin = trade[trade['asset'] != 'ZEUR']
|
||||||
|
fiat = trade[trade['asset'] == 'ZEUR']
|
||||||
|
if len(coin) == 0 or len(coin) > 1:
|
||||||
|
continue
|
||||||
|
asset = list(coin.loc[:, 'asset'])[0]
|
||||||
|
amount = np.sum(coin['amount'].apply(lambda x: float(x)))
|
||||||
|
if amount > 0:
|
||||||
|
sign = -1
|
||||||
|
price = sign * np.sum(fiat['amount'].apply(lambda x: float(x)))
|
||||||
|
try:
|
||||||
|
trades[asset]['trade_amounts'].append(amount)
|
||||||
|
trades[asset]['trade_prices'].append(price)
|
||||||
|
trades[asset]['enter_amounts'].append(amount)
|
||||||
|
except KeyError:
|
||||||
|
trades[asset] = {
|
||||||
|
'trade_amounts': [amount],
|
||||||
|
'trade_prices': [price],
|
||||||
|
'enter_amounts': [amount]
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
price = 0
|
||||||
|
# continue
|
||||||
|
try:
|
||||||
|
trades[asset]['trade_amounts'].append(amount)
|
||||||
|
trades[asset]['trade_prices'].append(price)
|
||||||
|
except KeyError:
|
||||||
|
trades[asset] = {
|
||||||
|
'trade_amounts': [amount],
|
||||||
|
'trade_prices': [price],
|
||||||
|
'enter_amounts': []
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for asset in assets:
|
||||||
|
if asset == 'ZEUR':
|
||||||
|
continue
|
||||||
|
t_amounts = np.array(trades[asset]['trade_amounts'])
|
||||||
|
t_prices = np.array(trades[asset]['trade_prices'])
|
||||||
|
e_amounts = np.array(trades[asset]['enter_amounts'])
|
||||||
|
positions[asset] = np.dot(np.divide(t_prices, t_amounts), t_amounts) / np.sum(e_amounts)
|
||||||
|
|
||||||
await tractor.breakpoint()
|
await tractor.breakpoint()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue