This commit is contained in:
2024-07-31 19:45:35 -04:00
parent bf702b6376
commit 2c173df888

View File

@@ -390,7 +390,26 @@ impl Market {
}
}
fn execute_batch(&mut self, asset_type0: usize, strike0: FiNum, asset_type1: usize, strike1: FiNum) -> Result {
Result::Error("Execute_batch not yet implemented".to_string())
let mut log:Vec<String>=Vec::new();
let asset0=self.number_to_asset(asset_type0);
let asset1=self.number_to_asset(asset_type1);
let ap0=(asset_type0,asset_type1);
let ap1=(asset_type1,asset_type0);
let bids0=self.orders.get_mut(&ap0).unwrap();
let bids1=self.orders.get_mut(&ap1).unwrap();
while !bids0.empty() && !bids1.empty() && bids0.peek().sell_qty/bids0.peek().buy_qty>=strike0/strike1 && bids1.peek().sell_qty/bids1.peek().buy_qty<=strike1/strike0 {
let asset0_getting=std::cmp::min(bids1.peek().sell_remain,bids0.peek().buy_qty*bids0.peek().sell_remain/bids0.peek().sell_qty);
let asset0_paying =std::cmp::min(bids0.peek().sell_remain,bids1.peek().buy_qty*bids1.peek().sell_remain/bids1.peek().sell_qty);
let asset1_getting=std::cmp::min(bids0.peek().sell_remain,bids1.peek().buy_qty*bids1.peek().sell_remain/bids1.peek().sell_qty);
let asset1_paying =std::cmp::min(bids1.peek().sell_remain,bids0.peek().buy_qty*bids0.peek().sell_remain/bids0.peek().sell_qty);
bids0.peek().sell_remain-=asset0_paying;
bids1.peek().sell_remain-=asset1_paying;
self.traders[bids0.peek().owner].add_balance(asset_type0,asset0_getting);
self.traders[bids1.peek().owner].add_balance(asset_type1,asset1_getting);
if bids0.peek().sell_remain==0 { bids0.pop(); }
if bids1.peek().sell_remain==0 { bids1.pop(); }
}
Result::ExecutedBatch(FiNum::zero(),FiNum::zero())
}
fn make_order(&mut self, owner:usize, sell_type:usize, buy_type:usize, sell_qty_initial:FiNum, buy_qty_initial:FiNum, execute_if_possible:bool) -> Result {
let mut log:Vec<String>=Vec::new();
@@ -511,6 +530,9 @@ impl<T: Dumpable + std::cmp::PartialOrd + std::fmt::Debug> PQueue<T> {
fn peek(&self) -> &T {
&self.v[0]
}
fn empty(&self) -> bool {
self.v.len()>0
}
fn bubble_up(&mut self, pos: usize) -> usize {
if pos>0 {
let parent=(pos-1)/2;