2025-11-27 09:46:58 +08:00

42 lines
1.6 KiB
Python

# /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