From 745db91a77445b8aa4d6cde1adc9b78f287bf2fa Mon Sep 17 00:00:00 2001 From: "zhangkun9038@dingtalk.com" Date: Wed, 26 Nov 2025 23:59:06 +0800 Subject: [PATCH] edit with grok --- config_examples/live.json | 51 +++++++------------------------ freqtrade/templates/staticgrid.py | 37 ++++++++-------------- 2 files changed, 24 insertions(+), 64 deletions(-) diff --git a/config_examples/live.json b/config_examples/live.json index 0914b91..000056d 100644 --- a/config_examples/live.json +++ b/config_examples/live.json @@ -19,36 +19,7 @@ "timeout": 20000 }, "pair_whitelist": [ - "ADA/USDT", - "APT/USDT", - "AVAX/USDT", - "BCH/USDT", - "BNB/USDT", - "BONK/USDT", - "BTC/USDT", - "CFX/USDT", - "CORE/USDT", - "CRO/USDT", - "DOGE/USDT", - "ETH/USDT", - "ETHFI/USDT", - "FET/USDT", - "FIL/USDT", - "HBAR/USDT", - "LINK/USDT", - "LTC/USDT", - "PEPE/USDT", - "PI/USDT", - "SHIB/USDT", - "SOL/USDT", - "SUI/USDT", - "TON/USDT", - "TRUMP/USDT", - "TRX/USDT", - "WLD/USDT", - "XAUT/USDT", - "XRP/USDT", - "ZK/USDT" + "ETH/USDT" ], "pair_blacklist": [ "OKB/USDT" @@ -61,15 +32,15 @@ ], "fee": 0.0008, "api_server": { - "enabled": true, - "listen_ip_address": "0.0.0.0", - "listen_port": 8080, - "verbosity": "error", - "enable_openapi": false, - "jwt_secret_key": "6a599ab046dbb419014807dffd7b8823bfa7e5df56b17d545485deb87331b4ca", - "ws_token": "6O5pBDiRigiZrmIsofaE2rkKMJtf9h8zVQ", - "CORS_origins": [], - "username": "freqAdmin", - "password": "admin" + "enabled": true, + "listen_ip_address": "0.0.0.0", + "listen_port": 8080, + "verbosity": "error", + "enable_openapi": false, + "jwt_secret_key": "6a599ab046dbb419014807dffd7b8823bfa7e5df56b17d545485deb87331b4ca", + "ws_token": "6O5pBDiRigiZrmIsofaE2rkKMJtf9h8zVQ", + "CORS_origins": [], + "username": "freqAdmin", + "password": "admin" } } diff --git a/freqtrade/templates/staticgrid.py b/freqtrade/templates/staticgrid.py index c3cdc92..42b5c58 100644 --- a/freqtrade/templates/staticgrid.py +++ b/freqtrade/templates/staticgrid.py @@ -1,10 +1,10 @@ -# user_data/strategies/EthTrueStaticGrid.py ← 复制整个文件 +# /freqtrade/user_data/strategies/StaticGrid.py from freqtrade.strategy import IStrategy from pandas import DataFrame class StaticGrid(IStrategy): INTERFACE_VERSION = 3 - timeframe = '1h' # 1h 或 4h 都行,建议 1h 更灵敏 + timeframe = '1h' can_short = False minimal_roi = {"0": 100} stoploss = -0.99 @@ -12,36 +12,25 @@ class StaticGrid(IStrategy): position_adjustment_enable = True max_entry_position_adjustment = -1 - # ================== 永续静态网格参数 ================== - LOWER = 1500.0 - UPPER = 4500.0 - GRID_STEP = 50.0 # 每格 50 USDT - GRID_COUNT = int((UPPER - LOWER) / GRID_STEP) # = 60 格 - - STAKE_PER_ORDER = 40 # 每张单 40 USDT(60格 × 40 × 2 ≈ 4800 USDT 吃满) + # 永续网格参数 + LOWER = 1500.0 + UPPER = 4500.0 + STEP = 50.0 + STAKE = 40.0 + # 必须加这一行!否则报抽象类错误 def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: - price = dataframe['close'].iloc[-1] - - # 从 1500 到 4450 每 50 USDT 一个价位,只要价格跌到或跌破这个价,就买入 - for level in range(self.GRID_COUNT): - buy_price = self.LOWER + level * self.GRID_STEP - if price <= buy_price: - dataframe.loc[dataframe['low'] <= buy_price, 'enter_long'] = True + for price in [self.LOWER + i * self.STEP for i in range(int((self.UPPER - self.LOWER) // self.STEP) + 3)]: + dataframe.loc[dataframe['low'] <= price, 'enter_long'] = True return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: - price = dataframe['close'].iloc[-1] - - # 从 1550 到 4500 每 50 USDT 一个价位,只要价格涨到或超过这个价,就卖出 - for level in range(1, self.GRID_COUNT + 1): - sell_price = self.LOWER + level * self.GRID_STEP - if price >= sell_price: - dataframe.loc[dataframe['high'] >= sell_price, 'exit_long'] = True + for price in [self.LOWER + i * self.STEP for i in range(int((self.UPPER - self.LOWER) // self.STEP) + 3)]: + dataframe.loc[dataframe['high'] >= price, 'exit_long'] = True return dataframe def custom_stake_amount(self, **kwargs) -> float: - return self.STAKE_PER_ORDER \ No newline at end of file + return self.STAKE