2023-05-25 21:55:20 +00:00
|
|
|
'''
|
|
|
|
`piker.accounting` mgmt calculations for
|
|
|
|
- positioning
|
|
|
|
- ledger updates
|
|
|
|
- config file IO
|
|
|
|
|
|
|
|
'''
|
|
|
|
from pathlib import Path
|
|
|
|
|
2023-08-03 21:28:08 +00:00
|
|
|
import pytest
|
2023-05-25 21:55:20 +00:00
|
|
|
from piker import config
|
2023-07-14 21:54:13 +00:00
|
|
|
from piker.accounting import (
|
|
|
|
Account,
|
|
|
|
calc,
|
|
|
|
Position,
|
|
|
|
TransactionLedger,
|
|
|
|
open_trade_ledger,
|
|
|
|
load_account,
|
|
|
|
load_account_from_ledger,
|
|
|
|
)
|
2023-05-25 21:55:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_root_conf_networking_section(
|
|
|
|
root_conf: dict,
|
|
|
|
):
|
|
|
|
conf, path = config.load(
|
|
|
|
'conf',
|
|
|
|
touch_if_dne=True,
|
|
|
|
)
|
|
|
|
assert conf['network']['tsdb']
|
|
|
|
|
|
|
|
|
|
|
|
def test_account_file_default_empty(
|
|
|
|
tmpconfdir: Path,
|
|
|
|
):
|
2023-06-28 18:17:56 +00:00
|
|
|
conf, path = load_account(
|
2023-05-25 21:55:20 +00:00
|
|
|
'kraken',
|
|
|
|
'paper',
|
|
|
|
)
|
|
|
|
|
|
|
|
# ensure the account file empty but created
|
|
|
|
# and in the correct place in the filesystem!
|
|
|
|
assert not conf
|
|
|
|
assert path.parent.is_dir()
|
|
|
|
assert path.parent.name == 'accounting'
|
2023-07-14 21:54:13 +00:00
|
|
|
|
|
|
|
|
2023-08-03 21:28:08 +00:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
'fq_acnt',
|
|
|
|
[
|
|
|
|
('binance', 'paper'),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
def test_paper_ledger_position_calcs(
|
|
|
|
fq_acnt: tuple[str, str],
|
|
|
|
):
|
|
|
|
broker: str
|
|
|
|
acnt_name: str
|
|
|
|
broker, acnt_name = fq_acnt
|
2023-07-14 21:54:13 +00:00
|
|
|
|
|
|
|
accounts_path: Path = config.repodir() / 'tests' / '_inputs'
|
|
|
|
|
|
|
|
ldr: TransactionLedger
|
|
|
|
with (
|
|
|
|
open_trade_ledger(
|
|
|
|
broker,
|
|
|
|
acnt_name,
|
|
|
|
allow_from_sync_code=True,
|
|
|
|
|
|
|
|
_fp=accounts_path,
|
|
|
|
) as ldr,
|
|
|
|
|
|
|
|
# open `polars` acnt dfs Bo
|
|
|
|
calc.open_ledger_dfs(
|
|
|
|
broker,
|
|
|
|
acnt_name,
|
|
|
|
ledger=ldr,
|
|
|
|
|
|
|
|
_fp=accounts_path,
|
|
|
|
|
|
|
|
) as (dfs, ledger),
|
|
|
|
|
|
|
|
):
|
|
|
|
acnt: Account = load_account_from_ledger(
|
|
|
|
broker,
|
|
|
|
acnt_name,
|
|
|
|
ledger=ldr,
|
|
|
|
_fp=accounts_path,
|
|
|
|
)
|
|
|
|
|
|
|
|
# do manual checks on expected pos calcs based on input
|
|
|
|
# ledger B)
|
|
|
|
|
|
|
|
# xrpusdt should have a net-zero size
|
|
|
|
xrp: str = 'xrpusdt.spot.binance'
|
|
|
|
pos: Position = acnt.pps[xrp]
|
|
|
|
|
|
|
|
# XXX: turns out our old dict-style-processing
|
|
|
|
# get's this wrong i think due to dt-sorting..
|
|
|
|
# lcum: float = pos.cumsize
|
|
|
|
|
|
|
|
df = dfs[xrp]
|
|
|
|
assert df['cumsize'][-1] == 0
|
|
|
|
assert pos.cumsize == 0
|