Faber Strategy Analysis
Strategy ID: Community Strategy (unofficial)
Strategy Type: Long-Term Trend Following
Timeframe: 1 Hour / 4 Hours
I. Strategy Overview
Faber is a long-term trend-following strategy based on Simple Moving Averages. Proposed by investor Mebane Faber, its core philosophy comes from the classic investment book The Ivy Portfolio. It uses the 200-day moving average as the primary trend filter, entering on pullbacks after confirming long-term trends, and exiting when prices break below the long-term moving average.
Core Characteristics
| Feature | Description |
|---|---|
| Buy Conditions | 3 core conditions (trend confirmation + pullback entry + volume verification) |
| Sell Conditions | 1 base sell signal (price breaks below long-term MA) |
| Protection | Hard stop-loss + graded take-profit |
| Timeframe | 1 Hour / 4 Hours (daily recommended) |
| Dependencies | TA-Lib |
II. Strategy Configuration Analysis
2.1 Basic Risk Parameters
# ROI Exit Table
minimal_roi = {
"0": 0.15, # 15% profit immediate exit
"120": 0.10, # After 2 hours: 10% profit
"480": 0.05 # After 8 hours: 5% profit
}
# Stop-Loss Settings
stoploss = -0.08 # -8% hard stop-loss
Design Philosophy:
- High take-profit target: 15% initial target suits long-term trend trading, providing adequate price volatility room
- Graded decrease: The longer the holding time, the lower the take-profit threshold, avoiding profit pullback
- Wide stop-loss: -8% is relatively loose, fitting long-term trend trading characteristics, avoiding being stopped out by normal fluctuations
2.2 Order Type Configuration
The strategy employs standard market orders to ensure timely entry and exit when trend signals appear.
III. Entry Conditions Details
3.1 Core Buy Logic
Faber strategy's buy signal consists of three independent conditions that must be simultaneously met:
dataframe.loc[
(
(dataframe['close'] > dataframe['sma200']) & # Condition 1: Long-term trend confirmed
(dataframe['close'] < dataframe['sma50']) & # Condition 2: Pullback confirmed
(dataframe['volume'] > dataframe['volume'].rolling(20).mean()) # Condition 3: Volume increase
),
'buy'
] = 1
3.2 Condition Details
Condition #1: Long-Term Trend Confirmation
dataframe['close'] > dataframe['sma200']
Logical Meaning: Current price above the 200-day simple moving average, confirming an upward long-term trend. This is the most fundamental trend filter; entries are only considered in bull market environments.
Condition #2: Pullback Entry Opportunity
dataframe['close'] < dataframe['sma50']
Logical Meaning: Although the long-term trend is up, the current price has pulled back to below the 50-day moving average. This is a "buy on pullback" entry strategy, finding relatively low points in an uptrend.
Condition #3: Volume Verification
dataframe['volume'] > dataframe['volume'].rolling(20).mean()
Logical Meaning: Current volume exceeds the 20-day average volume, confirming increased market participation and improving signal reliability.
IV. Exit Conditions Details
4.1 Core Sell Logic
Faber strategy employs simple and clear sell logic:
dataframe.loc[
(dataframe['close'] < dataframe['sma200']),
'sell'
] = 1
Trigger Condition: Price breaks below the 200-day simple moving average.
Design Philosophy: Exit immediately once the long-term trend reverses. This is a typical "trend-following" exit strategy; it does not predict tops and bottoms, only exiting after trend reversal is confirmed.
4.2 Graded Take-Profit System
Holding Time Take-Profit Threshold Description
───────────────────────────────────────────────────
0 minutes 15% Immediate profit-taking, capture big moves
120 minutes 10% Lower threshold after 2 hours
480 minutes 5% Protect minimum profit after 8 hours
4.3 Hard Stop-Loss Protection
stoploss = -0.08 # -8% stop-loss
8% is relatively wide, suitable for long-term trend trading, filtering normal market noise and avoiding being stopped out by short-term fluctuations.
V. Technical Indicator System
5.1 Core Indicators
| Indicator Category | Specific Indicator | Purpose |
|---|---|---|
| Trend Indicator | SMA(50) | Medium-term trend judgment, pullback entry identification |
| Trend Indicator | SMA(200) | Long-term trend judgment, bull/bear dividing line |
| Volume Indicator | Volume MA(20) | Entry signal verification, false breakout filtering |
5.2 Indicator Calculations
# Medium-term trend indicator
dataframe['sma50'] = ta.SMA(dataframe, timeperiod=50)
# Long-term trend indicator
dataframe['sma200'] = ta.SMA(dataframe, timeperiod=200)
# Volume moving average
dataframe['volume_mean_20'] = dataframe['volume'].rolling(20).mean()
VI. Risk Management Highlights
6.1 Trend Reversal Protection
Faber strategy's core risk management is achieved through SMA200:
- Before buying: Only enter when long-term trend is up (price > SMA200)
- At selling: Exit immediately on trend reversal (price < SMA200)
6.2 Graded Take-Profit Mechanism
| Goal | Implementation |
|---|---|
| Capture big moves | Initial take-profit set at 15%, providing sufficient room for trends |
| Protect profits | Decrease take-profit threshold over time, avoiding profit pullback |
VII. Strategy Pros & Cons
Advantages
- Simple and reliable: Only uses two moving averages and one volume indicator; clear logic and few parameters, not prone to overfitting
- Clear trends: Only trades when the long-term trend is up, avoiding counter-trend operations
- Long-term friendly: Design philosophy suits daily/4-hour levels, suitable for patient long-term traders
- Classically validated: SMA50/SMA200 combination is one of the most classic MA combinations in technical analysis
- Drawdown control: Immediate exit when price breaks below SMA200, effectively controlling downside risk
Limitations
- Signal lag: Long-term MAs react slowly; both entry and exit signals lag price
- Data requirements: SMA200 requires 200 periods of data to calculate; cannot be used for newly listed coins
- Poor performance in oscillating markets: May frequently generate false signals during consolidation, causing consecutive small losses
- Uncertain pullback depth: When price is below SMA50 but above SMA200, pullback depth may continue expanding
- Timeframe sensitive: May underperform on short timeframes (e.g., 5 minutes) compared to daily/4-hour
VIII. Applicable Scenarios
| Market Environment | Recommended Configuration | Description |
|---|---|---|
| Clear uptrend | Standard configuration | Best-performing environment; enter on pullback after trend confirmation |
| Oscillating consolidation | Reduce position or pause | Frequent false breakouts; may cause consecutive small losses |
| Downtrend | Automatic exit | Price below SMA200; no buy signals |
| High volatility | Appropriately widen stop-loss | Avoid being stopped out by normal fluctuations |
IX. Summary
Faber Strategy is a simple, classic long-term trend-following strategy. Its core value lies in:
- Minimalism: Only uses two moving averages and volume; transparent logic, not prone to overfitting
- Trend is king: Only enters after confirming trends; avoids counter-trend trading
- Controllable risk: Immediate exit when price breaks below SMA200, effectively protecting principal
For quantitative traders, Faber strategy is an excellent entry case for understanding trend-following. Although its signal lag cannot be avoided, it is precisely this "confirming trends rather than predicting trends" design philosophy that has allowed it to withstand the test of time in long-term practice. It is recommended for use on 4-hour or daily levels, with patience and discipline, as a trend-following component in an investment portfolio.