diff --git a/bot.py b/bot.py index a14c397..b76ab21 100644 --- a/bot.py +++ b/bot.py @@ -91,45 +91,24 @@ def on_trade(message: dict, orderman: OrderManager, state: StateManager): def execute_arb(orderman: OrderManager, state: StateManager): - p_valbz = state.get_fair_value("VALBZ") - p_vale = state.get_fair_value("VALE") - p_bond = state.get_fair_value("BOND") - p_gs = state.get_fair_value("GS") - p_ms = state.get_fair_value("MS") - p_wfc = state.get_fair_value("WFC") - p_xlf = state.get_fair_value("XLF") + bid_valbz, ask_valbz = state.get_best_bid_ask("VALBZ") + bid_vale, ask_vale = state.get_fair_value("VALE") - if p_vale is None or p_valbz is None: + if bid_valbz is None or ask_valbz is None or bid_vale is None or ask_vale is None: return - vale_to_valbz = p_valbz - p_vale - valbz_to_vale = p_vale - p_valbz + vale_to_valbz = bid_valbz - ask_vale - 2 + valbz_to_vale = bid_vale - ask_valbz - 2 if vale_to_valbz > 10: - orderman.buy("VALE", Dir.BUY, p_vale, 10) + orderman.buy("VALE", bid_vale + 1, 10) orderman.convert("VALE", Dir.SELL, 10) - orderman.sell("VALBZ", Dir.SELL, p_valbz, 10) + orderman.sell("VALBZ", ask_valbz - 1, 10) elif valbz_to_vale > 10: - orderman.buy("VALBZ", Dir.BUY, p_valbz, 10) + orderman.buy("VALBZ", bid_valbz + 1, 10) orderman.convert("VALE", Dir.BUY, 10) - orderman.sell("VALE", Dir.SELL, p_vale, 10) + orderman.sell("VALE", ask_vale - 1, 10) - if p_xlf is not None and all(p is not None for p in [p_bond, p_gs, p_ms, p_wfc]): - components = p_bond * 3 + p_gs * 2 + p_ms * 3 + p_wfc * 2 - xlf_fair = components / 10 - - if p_xlf > xlf_fair + 10: - orderman.sell("XLF", Dir.SELL, p_xlf, 10) - orderman.buy("BOND", Dir.BUY, p_bond, 30) - orderman.buy("GS", Dir.BUY, p_gs, 20) - orderman.buy("MS", Dir.BUY, p_ms, 30) - orderman.buy("WFC", Dir.BUY, p_wfc, 20) - elif xlf_fair > p_xlf + 10: - orderman.buy("XLF", Dir.BUY, p_xlf, 10) - orderman.sell("BOND", Dir.SELL, p_bond, 30) - orderman.sell("GS", Dir.SELL, p_gs, 20) - orderman.sell("MS", Dir.SELL, p_ms, 30) - orderman.sell("WFC", Dir.SELL, p_wfc, 20) # ~~~~~============== PROVIDED CODE ==============~~~~~ diff --git a/order.py b/order.py index 07510a5..2f35660 100644 --- a/order.py +++ b/order.py @@ -81,22 +81,22 @@ class OrderManager: self._send_timestamps.append(now) return True - def sell(self, symbol: str, dir: Dir, price: int, size: int): + def sell(self, symbol: str, price: int, size: int): return self._attempt_send( "add", order_id=self.next_order(), symbol=symbol, - dir=dir, + dir=Dir.SELL, price=price, size=size, ) - def buy(self, symbol: str, dir: Dir, price: int, size: int): + def buy(self, symbol: str, price: int, size: int): return self._attempt_send( "add", order_id=self.next_order(), symbol=symbol, - dir=dir, + dir=Dir.BUY, price=price, size=size, ) diff --git a/state.py b/state.py index 3fec2ca..7042a6d 100644 --- a/state.py +++ b/state.py @@ -39,6 +39,9 @@ class StateManager: if ask_price is not None: self.ask_prices[symbol] = ask_price + def get_best_bid_ask(self, symbol: str): + return self.bid_prices.get(symbol), self.ask_prices.get(symbol) + def get_position(self, symbol: str) -> int: return self.positions.get(symbol, 0)