changes
This commit is contained in:
@@ -21,6 +21,9 @@ impl FiNum {
|
|||||||
pub fn zero() -> Self {
|
pub fn zero() -> Self {
|
||||||
FiNum(0u64)
|
FiNum(0u64)
|
||||||
}
|
}
|
||||||
|
pub fn one() -> Self {
|
||||||
|
FiNum(1u64<<32)
|
||||||
|
}
|
||||||
pub fn is_zero(self) -> bool {
|
pub fn is_zero(self) -> bool {
|
||||||
self.0==0
|
self.0==0
|
||||||
}
|
}
|
||||||
@@ -30,6 +33,10 @@ impl FiNum {
|
|||||||
pub fn recip(&self) -> Self {
|
pub fn recip(&self) -> Self {
|
||||||
FiNum((0x8000000000000000u64/self.0)<<1)
|
FiNum((0x8000000000000000u64/self.0)<<1)
|
||||||
}
|
}
|
||||||
|
pub fn fmt_recip(&self) -> String {
|
||||||
|
if *self<FiNum::one() { format!("1/{}",self.recip()) }
|
||||||
|
else { format!("{}",self) }
|
||||||
|
}
|
||||||
pub fn serialize(&self) -> String {
|
pub fn serialize(&self) -> String {
|
||||||
format!("{:X}",self.0)
|
format!("{:X}",self.0)
|
||||||
}
|
}
|
||||||
|
|||||||
28
src/main.rs
28
src/main.rs
@@ -366,7 +366,7 @@ impl Market {
|
|||||||
for off in sorted.iter() {
|
for off in sorted.iter() {
|
||||||
println!(" {} @ {} ({}) OrderID: {} PQLoc: {} RTLoc: {} Royalties: {}",
|
println!(" {} @ {} ({}) OrderID: {} PQLoc: {} RTLoc: {} Royalties: {}",
|
||||||
off.sell_remain, // off.buy_qty*off.sell_remain/off.sell_qty,
|
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,
|
self.traders[off.owner as usize].name,
|
||||||
off.id,off.pq_loc,off.rt_loc,
|
off.id,off.pq_loc,off.rt_loc,
|
||||||
self.royalties.get_mut(&ap.1).unwrap().get_royalty(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 asset0=self.number_to_asset(asset_type0);
|
||||||
let asset1=self.number_to_asset(asset_type1);
|
let asset1=self.number_to_asset(asset_type1);
|
||||||
log.push(format!("Executing batch {} {} <-> {} {}",strike0,asset0.name,strike1,asset1.name));
|
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 ap0=(asset_type0,asset_type1);
|
||||||
let ap1=(asset_type1,asset_type0);
|
let ap1=(asset_type1,asset_type0);
|
||||||
let [bids0,bids1]=self.orders.get_many_mut([&ap0, &ap1]).unwrap();
|
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()
|
while !bids0.empty() && !bids1.empty()
|
||||||
&& bids0.peek().sell_qty/bids0.peek().buy_qty>=strike0/strike1
|
&& bids0.peek().sell_qty/bids0.peek().buy_qty>=strike0/strike1
|
||||||
&& bids1.peek().sell_qty/bids1.peek().buy_qty>=strike1/strike0 {
|
&& 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);
|
println!("For Asset0 ({}) paying either {} or {}",asset0.name,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/bids0.peek().sell_qty);
|
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;
|
bids0.peek().sell_remain-=asset0_paying;
|
||||||
bids1.peek().sell_remain-=asset1_paying;
|
bids1.peek().sell_remain-=asset1_paying;
|
||||||
self.traders[bids0.peek().owner].add_balance(asset_type1,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));
|
self.traders[bids1.peek().owner].name,asset0_paying,asset0.name));
|
||||||
if bids0.peek().sell_remain==FiNum::zero() { bids0.pop(); }
|
if bids0.peek().sell_remain==FiNum::zero() { bids0.pop(); }
|
||||||
if bids1.peek().sell_remain==FiNum::zero() { bids1.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)
|
Result::ExecutedBatch(log)
|
||||||
}
|
}
|
||||||
@@ -973,8 +992,7 @@ fn interactive(m: &mut Market, mut out: Option<File>) {
|
|||||||
if let Some(ref mut f)=out {
|
if let Some(ref mut f)=out {
|
||||||
let ser=cmd.serialize();
|
let ser=cmd.serialize();
|
||||||
if let Err(e)=writeln!(f,"{}",ser) { eprintln!("An error occurred while writing {}",e); }
|
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);
|
let res=m.execute(&cmd);
|
||||||
println!("Result: {}",res.describe());
|
println!("Result: {}",res.describe());
|
||||||
Command::None
|
Command::None
|
||||||
|
|||||||
Reference in New Issue
Block a user