From 6be73671dcce427f5752112d2e149586ab0fc1dc Mon Sep 17 00:00:00 2001 From: ilya Date: Tue, 6 Feb 2024 18:13:16 +0000 Subject: [PATCH 1/3] Price improvemenet fee policy autopilot argument --- crates/autopilot/src/arguments.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/crates/autopilot/src/arguments.rs b/crates/autopilot/src/arguments.rs index 782657811b..d73785781f 100644 --- a/crates/autopilot/src/arguments.rs +++ b/crates/autopilot/src/arguments.rs @@ -349,6 +349,12 @@ pub struct FeePolicy { /// - Surplus with cap: /// surplus:0.5:0.06 /// + /// - Price improvement without cap: + /// price_improvement:0.5:1.0 + /// + /// - Price improvement with cap: + /// price_improvement:0.5:0.06 + /// /// - Volume based: /// volume:0.1 #[clap(long, env, default_value = "surplus:0.0:1.0")] @@ -371,6 +377,7 @@ impl FeePolicy { factor, max_volume_factor, }, + FeePolicyKind::PriceImprovement { .. } => todo!(), FeePolicyKind::Volume { factor } => domain::fee::Policy::Volume { factor }, } } @@ -380,6 +387,9 @@ impl FeePolicy { pub enum FeePolicyKind { /// How much of the order's surplus should be taken as a protocol fee. Surplus { factor: f64, max_volume_factor: f64 }, + /// How much of the order's price improvement should be taken as a protocol + /// fee. + PriceImprovement { factor: f64, max_volume_factor: f64 }, /// How much of the order's volume should be taken as a protocol fee. Volume { factor: f64 }, } @@ -407,6 +417,22 @@ impl FromStr for FeePolicyKind { max_volume_factor, }) } + "price-improvement" => { + let factor = parts + .next() + .ok_or("missing price-improvement factor")? + .parse::() + .map_err(|e| format!("invalid price-improvement factor: {}", e))?; + let max_volume_factor = parts + .next() + .ok_or("missing price-improvement max volume factor")? + .parse::() + .map_err(|e| format!("invalid price-improvement max volume factor: {}", e))?; + Ok(Self::PriceImprovement { + factor, + max_volume_factor, + }) + } "volume" => { let factor = parts .next() From a4bc1d0b7c548b3eddfa2b7ce7d70843f4365350 Mon Sep 17 00:00:00 2001 From: ilya Date: Wed, 7 Feb 2024 10:51:36 +0000 Subject: [PATCH 2/3] Better doc --- crates/autopilot/src/arguments.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/autopilot/src/arguments.rs b/crates/autopilot/src/arguments.rs index d73785781f..d4263df39f 100644 --- a/crates/autopilot/src/arguments.rs +++ b/crates/autopilot/src/arguments.rs @@ -388,7 +388,8 @@ pub enum FeePolicyKind { /// How much of the order's surplus should be taken as a protocol fee. Surplus { factor: f64, max_volume_factor: f64 }, /// How much of the order's price improvement should be taken as a protocol - /// fee. + /// fee where price improvement is a difference between the executed price + /// and the best quote. PriceImprovement { factor: f64, max_volume_factor: f64 }, /// How much of the order's volume should be taken as a protocol fee. Volume { factor: f64 }, From 0e033c11b7f43541cd84991dfad53abd88316d71 Mon Sep 17 00:00:00 2001 From: ilya Date: Wed, 7 Feb 2024 10:52:31 +0000 Subject: [PATCH 3/3] Naming --- crates/autopilot/src/arguments.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/autopilot/src/arguments.rs b/crates/autopilot/src/arguments.rs index d4263df39f..5be1d66b4d 100644 --- a/crates/autopilot/src/arguments.rs +++ b/crates/autopilot/src/arguments.rs @@ -418,17 +418,17 @@ impl FromStr for FeePolicyKind { max_volume_factor, }) } - "price-improvement" => { + "priceImprovement" => { let factor = parts .next() - .ok_or("missing price-improvement factor")? + .ok_or("missing price improvement factor")? .parse::() - .map_err(|e| format!("invalid price-improvement factor: {}", e))?; + .map_err(|e| format!("invalid price improvement factor: {}", e))?; let max_volume_factor = parts .next() - .ok_or("missing price-improvement max volume factor")? + .ok_or("missing price improvement max volume factor")? .parse::() - .map_err(|e| format!("invalid price-improvement max volume factor: {}", e))?; + .map_err(|e| format!("invalid price improvement max volume factor: {}", e))?; Ok(Self::PriceImprovement { factor, max_volume_factor,