NoCompile
This commit is contained in:
34
src/main.rs
34
src/main.rs
@@ -51,6 +51,7 @@ use std::cell::RefCell;
|
|||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use rand::rngs::StdRng;
|
use rand::rngs::StdRng;
|
||||||
use hashbrown::HashMap;
|
use hashbrown::HashMap;
|
||||||
|
use std::collections::HashSet;
|
||||||
mod finum;
|
mod finum;
|
||||||
use finum::FiNum;
|
use finum::FiNum;
|
||||||
|
|
||||||
@@ -60,6 +61,7 @@ struct Trader {
|
|||||||
password: String, // hash(name..salt..password)
|
password: String, // hash(name..salt..password)
|
||||||
id: usize,
|
id: usize,
|
||||||
balances: HashMap<usize,FiNum>, // Maps Currency to Amount
|
balances: HashMap<usize,FiNum>, // Maps Currency to Amount
|
||||||
|
orders: HashSet<usize>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@@ -89,7 +91,8 @@ impl Trader {
|
|||||||
name: String::from(name),
|
name: String::from(name),
|
||||||
password: String::from(""),
|
password: String::from(""),
|
||||||
id: id,
|
id: id,
|
||||||
balances: HashMap::new()
|
balances: HashMap::new(),
|
||||||
|
orders: HashSet::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn add_balance(&mut self, cur:usize, delta:FiNum) {
|
fn add_balance(&mut self, cur:usize, delta:FiNum) {
|
||||||
@@ -111,8 +114,6 @@ struct Order {
|
|||||||
royalty_remain: FiNum, // Based on royalty1
|
royalty_remain: FiNum, // Based on royalty1
|
||||||
commission_remain: FiNum, // Based on commission1
|
commission_remain: FiNum, // Based on commission1
|
||||||
owner: usize,
|
owner: usize,
|
||||||
rt_loc: usize, // Location in the Royalty Tree
|
|
||||||
pq_loc: usize, // Location in th Priority Queue
|
|
||||||
id: usize,
|
id: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,13 +365,12 @@ impl Market {
|
|||||||
let mut sorted=pq.v.clone();
|
let mut sorted=pq.v.clone();
|
||||||
sorted.sort_by(|a,b| { (a.sell_qty/a.buy_qty).cmp(&(b.sell_qty/b.buy_qty)) });
|
sorted.sort_by(|a,b| { (a.sell_qty/a.buy_qty).cmp(&(b.sell_qty/b.buy_qty)) });
|
||||||
for off in sorted.iter() {
|
for off in sorted.iter() {
|
||||||
println!(" {} @ {} ({}) OrderID: {} PQLoc: {} RTLoc: {} Royalties: {}",
|
println!(" {} @ {} ({}) OrderID: {} 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).fmt_recip(),
|
(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,
|
||||||
self.royalties.get_mut(&ap.1).unwrap().get_royalty(off.rt_loc));
|
self.royalties.get_mut(&ap.1).unwrap().get_royalty(off.rt_loc));
|
||||||
//,self.royalties.get(&ap.1).unwrap().tree[off.rt_loc].acc);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
println!("Royalties accumulated but not captured:");
|
println!("Royalties accumulated but not captured:");
|
||||||
@@ -410,14 +410,6 @@ impl Market {
|
|||||||
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 {
|
||||||
@@ -433,14 +425,6 @@ 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)
|
||||||
}
|
}
|
||||||
@@ -511,15 +495,15 @@ impl Market {
|
|||||||
let rt=self.royalties.entry(buy_type).or_insert(RoyaltyTree::new());
|
let rt=self.royalties.entry(buy_type).or_insert(RoyaltyTree::new());
|
||||||
let rt_loc=rt.next_entry;
|
let rt_loc=rt.next_entry;
|
||||||
rt.add_weight(rt_loc,buy_qty); // Weight should really be the quantity you would be able to immediately transact rather than how much you wish for.
|
rt.add_weight(rt_loc,buy_qty); // Weight should really be the quantity you would be able to immediately transact rather than how much you wish for.
|
||||||
let neworder=Order { owner:owner, sell_qty:sell_qty_remain, sell_remain:sell_qty_remain, buy_qty:buy_qty, rt_loc: rt_loc, pq_loc:0, royalty_remain:royalty1_qty, commission_remain:commission1_qty, id:self.next_order_id };
|
let neworder=Order { owner:owner, sell_qty:sell_qty_remain, sell_remain:sell_qty_remain, buy_qty:buy_qty, royalty_remain:royalty1_qty, commission_remain:commission1_qty, id:self.next_order_id };
|
||||||
new_order_id=self.next_order_id;
|
new_order_id=self.next_order_id;
|
||||||
self.next_order_id+=1;
|
self.next_order_id+=1;
|
||||||
rt.next_entry+=1;
|
rt.next_entry+=1;
|
||||||
let pq_loc=bids.insert(neworder);
|
let pq_loc=bids.insert(neworder);
|
||||||
bids.v[pq_loc].pq_loc=pq_loc;
|
|
||||||
bids.v[pq_loc].rt_loc=rt_loc;
|
|
||||||
self.traders[owner].sub_balance(sell_type,sell_qty_remain);
|
self.traders[owner].sub_balance(sell_type,sell_qty_remain);
|
||||||
self.traders[0].add_balance(sell_type,commission0_qty);
|
self.traders[0].add_balance(sell_type,commission0_qty);
|
||||||
|
self.traders[owner].orders.insert(new_order_id);
|
||||||
|
self.order_finder.insert(new_order_id,OrderFinder { asset0:sell_type, asset1:buy_type, pq_loc: pq_loc, rt_loc: rt_loc });
|
||||||
log.push(format!("Moved {} {} ({}) to market",sell_qty_remain,self.number_to_name(sell_type),self.traders[owner].name));
|
log.push(format!("Moved {} {} ({}) to market",sell_qty_remain,self.number_to_name(sell_type),self.traders[owner].name));
|
||||||
} else { new_order_id=0; }
|
} else { new_order_id=0; }
|
||||||
} else { new_order_id=0; }
|
} else { new_order_id=0; }
|
||||||
|
|||||||
Reference in New Issue
Block a user