From 2b7e6350377e0b3b37e3ff723baab38a289b6ec9 Mon Sep 17 00:00:00 2001 From: Teppy Date: Tue, 6 Aug 2024 18:10:48 -0400 Subject: [PATCH] changes --- src/finum.rs | 7 +++++++ src/main.rs | 28 +++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/finum.rs b/src/finum.rs index 48f530a..5253d95 100644 --- a/src/finum.rs +++ b/src/finum.rs @@ -21,6 +21,9 @@ impl FiNum { pub fn zero() -> Self { FiNum(0u64) } + pub fn one() -> Self { + FiNum(1u64<<32) + } pub fn is_zero(self) -> bool { self.0==0 } @@ -30,6 +33,10 @@ impl FiNum { pub fn recip(&self) -> Self { FiNum((0x8000000000000000u64/self.0)<<1) } + pub fn fmt_recip(&self) -> String { + if *self String { format!("{:X}",self.0) } diff --git a/src/main.rs b/src/main.rs index 192234d..60ac043 100644 --- a/src/main.rs +++ b/src/main.rs @@ -366,7 +366,7 @@ impl Market { for off in sorted.iter() { println!(" {} @ {} ({}) OrderID: {} PQLoc: {} RTLoc: {} Royalties: {}", off.sell_remain, // off.buy_qty*off.sell_remain/off.sell_qty, - off.buy_qty/off.sell_qty, + (off.buy_qty/off.sell_qty).fmt_recip(), self.traders[off.owner as usize].name, off.id,off.pq_loc,off.rt_loc, self.royalties.get_mut(&ap.1).unwrap().get_royalty(off.rt_loc)); @@ -406,14 +406,25 @@ impl Market { let asset0=self.number_to_asset(asset_type0); let asset1=self.number_to_asset(asset_type1); log.push(format!("Executing batch {} {} <-> {} {}",strike0,asset0.name,strike1,asset1.name)); + println!("Executing batch {} {} <-> {} {}",strike0,asset0.name,strike1,asset1.name); let ap0=(asset_type0,asset_type1); let ap1=(asset_type1,asset_type0); let [bids0,bids1]=self.orders.get_many_mut([&ap0, &ap1]).unwrap(); +/* let sq0=bids0.peek().sell_qty; + let bq0=bids0.peek().buy_qty; + let sq1=bids1.peek().sell_qty; + let bq1=bids1.peek().buy_qty; + let q0=sq0/bq0>=strike0/strike1; + let q1=sq1/bq1>=strike1/strike0; + println!("{}/{} >= {}/{} is {}",sq0,bq0,strike0,strike1,q0); + println!("{}/{} >= {}/{} is {}",sq1,bq1,strike1,strike0,q1);*/ 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_paying =std::cmp::min(bids0.peek().sell_remain,strike0*bids1.peek().sell_remain/bids1.peek().sell_qty); - let asset1_paying =std::cmp::min(bids1.peek().sell_remain,strike1*bids0.peek().sell_remain/bids0.peek().sell_qty); + println!("For Asset0 ({}) paying either {} or {}",asset0.name,bids0.peek().sell_remain,strike0*bids1.peek().sell_remain/strike1); + println!("For Asset1 ({}) paying either {} or {}",asset1.name,bids1.peek().sell_remain,strike1*bids0.peek().sell_remain/strike0); + let asset0_paying =std::cmp::min(bids0.peek().sell_remain,strike0*bids1.peek().sell_remain/strike1); + let asset1_paying =std::cmp::min(bids1.peek().sell_remain,strike1*bids0.peek().sell_remain/strike0); bids0.peek().sell_remain-=asset0_paying; bids1.peek().sell_remain-=asset1_paying; self.traders[bids0.peek().owner].add_balance(asset_type1,asset1_paying); @@ -422,6 +433,14 @@ impl Market { self.traders[bids1.peek().owner].name,asset0_paying,asset0.name)); if bids0.peek().sell_remain==FiNum::zero() { bids0.pop(); } if bids1.peek().sell_remain==FiNum::zero() { bids1.pop(); } +/* let sq0=bids0.peek().sell_qty; + let bq0=bids0.peek().buy_qty; + let sq1=bids1.peek().sell_qty; + let bq1=bids1.peek().buy_qty; + let q0=sq0/bq0>=strike0/strike1; + let q1=sq1/bq1>=strike1/strike0; + println!("{}/{} >= {}/{} is {}",sq0,bq0,strike0,strike1,q0); + println!("{}/{} >= {}/{} is {}",sq1,bq1,strike1,strike0,q1);*/ } Result::ExecutedBatch(log) } @@ -973,8 +992,7 @@ fn interactive(m: &mut Market, mut out: Option) { if let Some(ref mut f)=out { let ser=cmd.serialize(); if let Err(e)=writeln!(f,"{}",ser) { eprintln!("An error occurred while writing {}",e); } - else { println!("Wrote to logfile: {}",ser); } - } + } else { println!("{}",cmd.serialize()); } let res=m.execute(&cmd); println!("Result: {}",res.describe()); Command::None