Skip to content

Commit bc1c991

Browse files
committed
feat: 添加 Binance 模拟交易支持
在 BinanceFuturesClient 和 BinanceSpotClient 中添加 enable_demo_trading 参数 根据 enable_demo_trading 自动设置正确的 demo base_url Futures: https://demo-fapi.binance.com Spot: https://demo-api.binance.com 在 factory.py 中从 exchange_config 读取 enable_demo_trading 配置并传递给客户端
1 parent 0bf4bb5 commit bc1c991

File tree

4 files changed

+197
-251
lines changed

4 files changed

+197
-251
lines changed

backend_api_python/app/services/live_trading/binance.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919

2020

2121
class BinanceFuturesClient(BaseRestClient):
22-
def __init__(self, *, api_key: str, secret_key: str, base_url: str = "https://fapi.binance.com", timeout_sec: float = 15.0):
22+
def __init__(self, *, api_key: str, secret_key: str, base_url: str = None, enable_demo_trading: bool = False, timeout_sec: float = 15.0):
23+
if not base_url:
24+
base_url = "https://demo-fapi.binance.com" if enable_demo_trading else "https://fapi.binance.com"
25+
2326
super().__init__(base_url=base_url, timeout_sec=timeout_sec)
2427
self.api_key = (api_key or "").strip()
2528
self.secret_key = (secret_key or "").strip()

backend_api_python/app/services/live_trading/binance_spot.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717

1818
class BinanceSpotClient(BaseRestClient):
19-
def __init__(self, *, api_key: str, secret_key: str, base_url: str = "https://api.binance.com", timeout_sec: float = 15.0):
19+
def __init__(self, *, api_key: str, secret_key: str, base_url: str = None, enable_demo_trading: bool = False, timeout_sec: float = 15.0):
20+
if not base_url:
21+
base_url = "https://demo-api.binance.com" if enable_demo_trading else "https://api.binance.com"
22+
2023
super().__init__(base_url=base_url, timeout_sec=timeout_sec)
2124
self.api_key = (api_key or "").strip()
2225
self.secret_key = (secret_key or "").strip()

backend_api_python/app/services/live_trading/factory.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,18 @@ def create_client(exchange_config: Dict[str, Any], *, market_type: str = "swap")
5959
mt = "swap"
6060

6161
if exchange_id == "binance":
62+
# 检查是否启用模拟交易,支持布尔值和字符串
63+
enable_demo = exchange_config.get("enable_demo_trading") or exchange_config.get("enableDemoTrading")
64+
is_demo = bool(enable_demo) if isinstance(enable_demo, bool) else str(enable_demo).lower() in ("true", "1", "yes")
65+
6266
if mt == "spot":
63-
base_url = _get(exchange_config, "base_url", "baseUrl") or "https://api.binance.com"
64-
return BinanceSpotClient(api_key=api_key, secret_key=secret_key, base_url=base_url)
65-
# Default to USDT-M futures
66-
base_url = _get(exchange_config, "base_url", "baseUrl") or "https://fapi.binance.com"
67-
return BinanceFuturesClient(api_key=api_key, secret_key=secret_key, base_url=base_url)
67+
default_url = "https://demo-api.binance.com" if is_demo else "https://api.binance.com"
68+
base_url = _get(exchange_config, "base_url", "baseUrl") or default_url
69+
return BinanceSpotClient(api_key=api_key, secret_key=secret_key, base_url=base_url, enable_demo_trading=is_demo)
70+
# Default to USDT-M futures
71+
default_url = "https://demo-fapi.binance.com" if is_demo else "https://fapi.binance.com"
72+
base_url = _get(exchange_config, "base_url", "baseUrl") or default_url
73+
return BinanceFuturesClient(api_key=api_key, secret_key=secret_key, base_url=base_url, enable_demo_trading=is_demo)
6874
if exchange_id == "okx":
6975
base_url = _get(exchange_config, "base_url", "baseUrl") or "https://www.okx.com"
7076
return OkxClient(api_key=api_key, secret_key=secret_key, passphrase=passphrase, base_url=base_url)

0 commit comments

Comments
 (0)