Freqtrade Strategy Dev
by @djc00p
Develop, iterate, and improve Freqtrade cryptocurrency trading strategies. Use when writing a new strategy, improving an existing one, analyzing why a strate...
clawhub install freqtrade-strategy-devπ About This Skill
name: freqtrade-strategy-dev description: "Develop, iterate, and improve Freqtrade cryptocurrency trading strategies. Use when writing a new strategy, improving an existing one, analyzing why a strategy is losing, or understanding which indicators to use. Covers strategy anatomy, key configuration parameters, proven entry/exit patterns, and the iteration workflow. Trigger phrases: write freqtrade strategy, improve strategy, why is my strategy losing, freqtrade indicators, strategy not profitable, freqtrade entry conditions." metadata: {"clawdbot":{"emoji":"π§ ","requires":{"bins":["docker","docker-compose"]},"os":["linux","darwin","win32"]}}
Freqtrade Strategy Development
Build profitable trading strategies with disciplined iteration, tight risk management, and data-driven entry/exit rules. Assumes Freqtrade is running via Docker (docker-compose).
Strategy Anatomy
Every Freqtrade strategy requires three methods:
populate_indicators(dataframe, metadata) β Add technical indicators (RSI, MACD, Bollinger Bands, etc.) to the dataframepopulate_entry_trend(dataframe, metadata) β Define buy signal logic; set enter_long = 1 when conditions metpopulate_exit_trend(dataframe, metadata) β Define sell signal logic; set exit_long = 1 when conditions met (optional if using ROI/stop-loss)Key Config Parameters
stoploss = -0.03 # 3% max loss per trade
trailing_stop = True
trailing_stop_positive = 0.01
trailing_stop_positive_offset = 0.02minimal_roi = {
"0": 0.04, # 4% profit target immediately
"30": 0.02, # 2% after 30 candles
"60": 0.01, # 1% after 60 candles
}
timeframe = "5m" # or "15m", "1h", etc.
stake_currency = "USDT"
dry_run = True # Always backtest/dry-run first
Proven Entry Pattern
stoploss = -0.03
trailing_stop = True
trailing_stop_positive = 0.01
trailing_stop_positive_offset = 0.02
minimal_roi = {"0": 0.04, "30": 0.02, "60": 0.01}In populate_indicators: calculate RSI, CCI, Bollinger Bands, EMA, Volume SMA
In populate_entry_trend: only buy when ALL conditions met
conditions = [
(dataframe['rsi'] < 30), # Oversold
(dataframe['cci'] < -100), # Momentum confirmation
(dataframe['close'] < dataframe['bb_lowerband']), # Price near lower band
(dataframe['volume'] > dataframe['volume_sma']), # Volume confirms
(dataframe['bullish_candle']), # Pattern confirmation
]
dataframe.loc[reduce(lambda x, y: x & y, conditions), 'enter_long'] = 1
Key Lessons Learned
1. Tight stops save accounts β 3% max loss beats 5%, 7%, or 8% every time 2. Quality over quantity β 25 selective trades outperform 308 mediocre ones 3. Win rate alone is meaningless β 63% win rate unprofitable if avg loss is 5x avg gain 4. Selectivity is survival β RSI(30) + CCI(-100) dual filters dramatically reduce noise 5. Test in bear markets β If strategy survives a crash, it works everywhere 6. Volume confirms conviction β Entries without above-average volume fail more often
Useful Indicators
Iteration Workflow
1. Write baseline strategy with core entry/exit logic 2. Backtest on 90β120 days of historical data 3. Analyze exit reasons: are you exiting winners or losers too fast? 4. Tighten ONE parameter at a time (e.g., RSI threshold) 5. Backtest same period, compare vs. baseline 6. If better β keep; if worse β revert 7. Test different market conditions (Bull, bear, sideways) 8. Dry-run on live feeds before deploying to live trading
Version Control
Keep all versions: name files MyStrategy_v1.py, MyStrategy_v2.py, etc. Add comments above each change explaining what improved and why. This preserves your iteration history and makes reverting safe.
References
references/indicators-guide.md β Technical indicator formulas and interpretationreferences/iteration-workflow.md β Step-by-step walkthrough of strategy optimization