diff --git a/lib/rex/order_book.rb b/lib/rex/order_book.rb index 9bfec74..e009ca6 100644 --- a/lib/rex/order_book.rb +++ b/lib/rex/order_book.rb @@ -2,10 +2,6 @@ require "rbtree" module Rex class OrderBook - attr_reader( - :buy_limit_volumes, - :sell_limit_volumes - ) def initialize(matcher: Matcher.new) @matcher = matcher @sell_side = RBTree.new @@ -13,19 +9,15 @@ module Rex @order_ids = {} # order_id => order @current_trade_id = 0 @current_order_id = 0 - @buy_limit_volumes = {} # price => volume - @sell_limit_volumes = {} # price => volume end def add_order(order) side = side_for_order(order) - limit_volumes = limit_volume_for_order_side(order) order.id = next_order_id side[order.price] ||= Limit.new(order.price) side[order.price].add_order(order) - limit_volumes[order.price] ||= 0 - limit_volumes[order.price] += order.remaining_quantity + order_ids[order.id] = order end @@ -46,9 +38,6 @@ module Rex side.delete(limit.price) end - limit_volumes = limit_volume_for_order_side(order) - limit_volumes[order.price] -= order.remaining_quantity - order_ids.delete(order.id) end @@ -58,9 +47,6 @@ module Rex trade.buy_order.remaining_quantity -= trade.quantity trade.sell_order.remaining_quantity -= trade.quantity - buy_limit_volumes[trade.buy_order.price] -= trade.quantity - sell_limit_volumes[trade.sell_order.price] -= trade.quantity - remove_order(trade.buy_order.id) if trade.buy_order.filled? remove_order(trade.sell_order.id) if trade.sell_order.filled? end @@ -97,14 +83,6 @@ module Rex @current_order_id += 1 end - def limit_volume_for_order_side(order) - if order.is_buy - @buy_limit_volumes - else - @sell_limit_volumes - end - end - def side_for_order(order) if order.is_buy buy_side diff --git a/spec/matcher_spec.rb b/spec/matcher_spec.rb index 30a8321..9b8cd11 100644 --- a/spec/matcher_spec.rb +++ b/spec/matcher_spec.rb @@ -41,13 +41,6 @@ RSpec.describe Rex::Matcher do expect(order_book.lowest_sell_order).to eq(pricier_sell_order) expect(order_book.lowest_sell_order.remaining_quantity).to eq(20) end - - it "adjusts the limit volumes" do - instance.match(order_book) - - expect(order_book.buy_limit_volumes).to eq({100 => 0}) - expect(order_book.sell_limit_volumes).to eq({99 => 0, 100 => 20}) - end end context "when order book is empty" do diff --git a/spec/order_book_spec.rb b/spec/order_book_spec.rb index b684ec4..36e976b 100644 --- a/spec/order_book_spec.rb +++ b/spec/order_book_spec.rb @@ -13,13 +13,6 @@ RSpec.describe Rex::OrderBook do expect(instance.best_buy_price).to eq(100) end - it "adjusts the limit volume on the correct side" do - order = build(:order, is_buy: true, quantity: 100, remaining_quantity: 99) - instance.add_order(order) - - expect(instance.buy_limit_volumes[order.price]).to eq(99) - end - it "assigns an order id" do expect { instance.add_order(order_a) }.to change(order_a, :id).from(nil).to(1) expect { instance.add_order(order_b) }.to change(order_b, :id).from(nil).to(2) @@ -150,13 +143,6 @@ RSpec.describe Rex::OrderBook do instance.add_order(sell_order) end - it "adjusts the limit's volume" do - expect do - instance.cancel_order(sell_order.id) - end.to(change { instance.sell_limit_volumes[sell_order.price] } - .by(-sell_order.remaining_quantity)) - end - it "does not affect the buy side" do instance.cancel_order(sell_order.id)