Timeframe
1h
Direction
Long Only
Stoploss
-3.0%
Trailing Stop
No
ROI
0m: 4.0%, 24m: 2.0%, 96m: 1.0%, 240m: 0.0%
Interface Version
3
Startup Candles
200
Indicators
3
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
"""
SafeEntry_v1 — Ultra-Conservative Strategy
Core insight: Over 24 months (May 2024-May 2026),
BTC went from ~$60K to ~$80K (+34%), BUT with a -51% crash Oct 2025-Mar 2026.
The ONLY way to survive is regime-filtered entries.
Entry: RSI < 25 on 1h (deep oversold) + price > EMA200 + ADX < 20 (mean reversion)
Exit: ROI 4%/2%/1%/0, SL 3%
"""
import talib.abstract as ta
from freqtrade.strategy import IStrategy
from pandas import DataFrame
class SafeEntry_v1(IStrategy):
INTERFACE_VERSION = 3
timeframe = "1h"
can_short = False
stoploss = -0.03
use_custom_stoploss = False
trailing_stop = False
minimal_roi = {
"0": 0.04, # 4%
"24": 0.02, # 1d
"96": 0.01, # 4d
"240": 0, # 10d
}
startup_candle_count = 200
max_open_trades = 2
@property
def protections(self):
return [
{"method": "CooldownPeriod", "stop_duration_candles": 48}, # 2d cooldown
{"method": "StoplossGuard", "lookback_period_candles": 168, # 7d
"trade_limit": 1, "stop_duration_candles": 168,
"only_per_pair": False, "only_per_side": True},
]
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe["rsi"] = ta.RSI(dataframe, timeperiod=14)
dataframe["ema200"] = ta.EMA(dataframe["close"], timeperiod=200)
dataframe["adx"] = ta.ADX(dataframe, timeperiod=14)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# VERY selective: Deep oversold + major uptrend + no trend (mean reversion setup)
entry = (
(dataframe["rsi"] < 25) & # Deep oversold (stronger than <30)
(dataframe["close"] > dataframe["ema200"]) & # In macro uptrend
(dataframe["adx"] < 25) # Not in strong downtrend
)
dataframe.loc[entry, "enter_long"] = 1
dataframe.loc[entry, "enter_tag"] = "deep_bounce"
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
return dataframe