# /freqtrade/user_data/strategies/StaticGrid.py from freqtrade.strategy import IStrategy from pandas import DataFrame class StaticGrid(IStrategy): INTERFACE_VERSION = 3 timeframe = '1h' can_short = False minimal_roi = {"0": 100} stoploss = -0.99 use_exit_signal = True position_adjustment_enable = True max_entry_position_adjustment = -1 # 永续网格参数 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: # 终极触发:只要这根 1h K 线的 low 曾经跌到过任何一个网格价,就立刻补单 # 当前价 3025 → 下面所有 1500~3000 的网格价,只要历史 low 触碰过,就全部挂上 for level in range(int((self.UPPER - self.LOWER) // self.STEP) + 5): grid_price = self.LOWER + level * self.STEP if grid_price <= 3025 + 200: # 当前价附近 200 刀内优先挂 dataframe.loc[dataframe['low'] <= grid_price, 'enter_long'] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: for level in range(int((self.UPPER - self.LOWER) // self.STEP) + 5): grid_price = self.LOWER + level * self.STEP if grid_price >= 3025 - 200: dataframe.loc[dataframe['high'] >= grid_price, 'exit_long'] = 1 return dataframe def custom_stake_amount(self, **kwargs) -> float: return self.STAKE