changes
This commit is contained in:
24
src/main.rs
24
src/main.rs
@@ -390,7 +390,26 @@ impl Market {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn execute_batch(&mut self, asset_type0: usize, strike0: FiNum, asset_type1: usize, strike1: FiNum) -> Result {
|
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 {
|
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();
|
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 {
|
fn peek(&self) -> &T {
|
||||||
&self.v[0]
|
&self.v[0]
|
||||||
}
|
}
|
||||||
|
fn empty(&self) -> bool {
|
||||||
|
self.v.len()>0
|
||||||
|
}
|
||||||
fn bubble_up(&mut self, pos: usize) -> usize {
|
fn bubble_up(&mut self, pos: usize) -> usize {
|
||||||
if pos>0 {
|
if pos>0 {
|
||||||
let parent=(pos-1)/2;
|
let parent=(pos-1)/2;
|
||||||
|
|||||||
Reference in New Issue
Block a user