Skip to content

Commit 3543e96

Browse files
committed
refactor: extract dry-market order slippage from function
1 parent c83ea0d commit 3543e96

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

freqtrade/exchange/exchange.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,7 +1164,11 @@ def create_dry_run_order(
11641164

11651165
if dry_order["type"] == "market" and not dry_order.get("ft_order_type"):
11661166
# Update market order pricing
1167-
average = self.get_dry_market_fill_price(pair, side, amount, rate, orderbook)
1167+
slippage = 0.05
1168+
worst_rate = rate * ((1 + slippage) if side == "buy" else (1 - slippage))
1169+
average = self.get_dry_market_fill_price(
1170+
pair, side, amount, rate, worst_rate, orderbook
1171+
)
11681172
dry_order.update(
11691173
{
11701174
"average": average,
@@ -1204,7 +1208,13 @@ def add_dry_order_fee(
12041208
return dry_order
12051209

12061210
def get_dry_market_fill_price(
1207-
self, pair: str, side: str, amount: float, rate: float, orderbook: OrderBook | None
1211+
self,
1212+
pair: str,
1213+
side: str,
1214+
amount: float,
1215+
rate: float,
1216+
worst_rate: float,
1217+
orderbook: OrderBook | None,
12081218
) -> float:
12091219
"""
12101220
Get the market order fill price based on orderbook interpolation
@@ -1213,8 +1223,6 @@ def get_dry_market_fill_price(
12131223
if not orderbook:
12141224
orderbook = self.fetch_l2_order_book(pair, 20)
12151225
ob_type: OBLiteral = "asks" if side == "buy" else "bids"
1216-
slippage = 0.05
1217-
max_slippage_val = rate * ((1 + slippage) if side == "buy" else (1 - slippage))
12181226

12191227
remaining_amount = amount
12201228
filled_value = 0.0
@@ -1238,11 +1246,10 @@ def get_dry_market_fill_price(
12381246
forecast_avg_filled_price = max(filled_value, 0) / amount
12391247
# Limit max. slippage to specified value
12401248
if side == "buy":
1241-
forecast_avg_filled_price = min(forecast_avg_filled_price, max_slippage_val)
1249+
forecast_avg_filled_price = min(forecast_avg_filled_price, worst_rate)
12421250

12431251
else:
1244-
forecast_avg_filled_price = max(forecast_avg_filled_price, max_slippage_val)
1245-
1252+
forecast_avg_filled_price = max(forecast_avg_filled_price, worst_rate)
12461253
return self.price_to_precision(pair, forecast_avg_filled_price)
12471254

12481255
return rate

0 commit comments

Comments
 (0)