initial concept

This commit is contained in:
Stefano
2025-09-16 08:54:47 +09:00
parent ada72d2264
commit cf010c3f17
3 changed files with 33 additions and 0 deletions

View File

@@ -59,6 +59,7 @@ class Binance(Exchange):
"BNFCR": "USDC",
"BFUSD": "USDT",
},
"delivery_column": "deliveryDate",
}
_supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [

View File

@@ -3911,3 +3911,26 @@ class Exchange:
# describes the min amt for a tier, and the lowest tier will always go down to 0
else:
raise ExchangeError(f"Cannot get maintenance ratio using {self.name}")
def check_delivery_time(self, pair: str) -> int:
"""
Check if the futures contract is a delivery contract
:param pair: Market symbol
:return: True if the contract is a delivery contract, False otherwise
"""
if self.trading_mode != TradingMode.FUTURES:
return 0
column_to_check = self._ft_has.get("delivery_column", "")
logger.info(f"Checking delivery time at {column_to_check}")
delivery_time = self.markets.get(pair, {}).get("info", {}).get(column_to_check, None)
if delivery_time is not None:
if isinstance(delivery_time, str) and (delivery_time != ""):
delivery_time = int(delivery_time)
return delivery_time
# if "delivery" in market and market["delivery"] is not None:
# return True
return 0

View File

@@ -661,6 +661,15 @@ class FreqtradeBot(LoggingMixin):
"""
logger.debug(f"create_trade for pair {pair}")
delivery_time = self.exchange.check_delivery_time(pair)
if delivery_time:
delivery_date = dt_from_ts(delivery_time)
logger.info(
f"Pair {pair} has a delivery time of "
f"{delivery_date.strftime(constants.DATETIME_PRINT_FORMAT)}. Skipping."
)
return False
analyzed_df, _ = self.dataprovider.get_analyzed_dataframe(pair, self.strategy.timeframe)
nowtime = analyzed_df.iloc[-1]["date"] if len(analyzed_df) > 0 else None