def test_update_portfolio_home(home_currency: str, pair: Pair, exec_price: str, units: str, equity: str, exp_balance: str, exp_upl: str, exp_equity: str, TickerMock1: Ticker, TickerMock2: Ticker) -> None: port = Portfolio(TickerMock1, Queue(), Queue(), home_currency, ["GBPUSD", "EURUSD", "USDJPY"], Decimal(equity)) port.execute_fill(FillEvent( ref='ref123', pair=pair, time=pd.Timestamp('2020-07-08 21:56:00'), units=Decimal(units), price=Decimal(exec_price), status='filled' )) for _pair in ['USDJPY']: bid = TickerMock2.prices[_pair]['bid'] ask = TickerMock2.prices[_pair]['ask'] TickerMock1.prices[_pair]["bid"] = bid TickerMock1.prices[_pair]["ask"] = ask # Create decimalised prices for inverted pair inv_pair, inv_bid, inv_ask = TickerMock2.invert_prices(_pair, bid, ask) TickerMock1.prices[inv_pair]["bid"] = inv_bid TickerMock1.prices[inv_pair]["ask"] = inv_ask port.update_portfolio(TickEvent(pair, pd.Timestamp('2020-07-08 21:56:00'), Decimal('111'), Decimal('222'))) assert port.balance == Decimal(exp_balance) assert port.upl == Decimal(exp_upl) assert port.equity == Decimal(exp_equity)
def test_invert_prices(pair: str, bid: Decimal, ask: Decimal, return_pair: str, return_bid: Decimal, return_ask: Decimal) -> None: """ invert_prices should return inverted pair, bid and ask prices""" pairs = ['USDJPY', 'GBPUSD'] ticker = Ticker(pairs) inv_pair, inv_bid, inv_ask = ticker.invert_prices(pair, bid, ask) assert inv_pair == return_pair assert inv_bid == return_bid assert inv_ask == return_ask
def TickerMock2() -> Ticker: _pairs = ["GBPUSD", "EURUSD", "USDJPY"] _prices = { "GBPUSD": {"bid": Decimal("1.2541"), "ask": Decimal("1.2543")}, "USDJPY": {"bid": Decimal("107.25"), "ask": Decimal("107.80")}, } tm = Ticker(_pairs) # Create decimalaised prices for trade pair for pair, price in _prices.items(): _bid, _ask = price['bid'], price['ask'] tm.prices[pair]["bid"] = _bid tm.prices[pair]["ask"] = _ask # Create decimalised prices for inverted pair inv_pair, inv_bid, inv_ask = tm.invert_prices(pair, _bid, _ask) tm.prices[inv_pair]["bid"] = inv_bid tm.prices[inv_pair]["ask"] = inv_ask return tm