ADX_15M_USDT Strategy In-Depth Analysis
Strategy Number: #412 (412th of 465 strategies)
Strategy Type: ADX Trend Breakout + Tiered Take Profit System
Timeframe: 15 Minutes (15m)
1. Strategy Overview
ADX_15M_USDT is a strategy specifically designed for 15-minute level USDT trading pairs. This strategy is optimized based on ADXMomentum, introducing a tiered take profit system and more refined entry conditions. The core feature is using DI crossovers to capture trend initiation points and maximizing returns through time-based ROI.
Core Features
| Feature | Description |
|---|---|
| Entry Conditions | 4 conditions (trend strength + directional strength + crossover signal) |
| Exit Conditions | 4 conditions (trend reversal signals) |
| Protection Mechanism | Tiered ROI take profit + -12.55% stop loss |
| Timeframe | 15 Minutes (15m) |
| Dependencies | talib (ADX, PLUS_DI, MINUS_DI, SAR, MOM), qtpylib |
| Startup Candles | Approximately 30 candles (depends on indicator periods) |
2. Strategy Configuration Analysis
2.1 Tiered Take Profit System (ROI Table)
# ROI exit table
minimal_roi = {
"0": 0.26552, # Exit immediately when 26.552% profit is reached
"30": 0.10255, # After holding 30 minutes, exit at minimum 10.255% profit
"210": 0.03545, # After holding 210 minutes, exit at minimum 3.545% profit
"540": 0 # After holding 540 minutes, no minimum profit requirement
}
Design Rationale:
- High Take Profit Target: Default target 26.55%, capturing larger trends
- Time Decay: As holding time extends, take profit target lowers, increasing execution probability
- Dynamic Adaptation: After 9 hours of holding, no profit requirement, controlled by signals
2.2 Stop Loss Setting
stoploss = -0.1255 # -12.55% stop loss
Design Philosophy:
- Moderate stop loss ratio (approximately 12.55%)
- Stricter than ADXMomentum's -25%
- Suitable for medium-short term trading at 15-minute level
3. Entry Conditions Detailed Analysis
3.1 Core Indicator Combination
The strategy uses independent indicator sets for entry and exit:
| Indicator Category | Entry Indicator | Exit Indicator | Parameters |
|---|---|---|---|
| Trend Strength | adx | sell-adx | 14 period |
| Bullish Strength | plus_di | sell-plus_di | 25 period |
| Bearish Strength | minus_di | sell-minus_di | 25 period |
| Trend Following | sar | sell-sar | Default |
| Momentum | mom | sell-mom | 14 period |
Design Feature: Entry and exit use completely independent indicator sets, allowing for more flexible parameter optimization.
3.2 Entry Conditions Explained
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['adx'] > 16) & # Condition 1
(dataframe['minus_di'] > 4) & # Condition 2
(dataframe['plus_di'] > 20) & # Condition 3
(qtpylib.crossed_above(dataframe['plus_di'], dataframe['minus_di'])) # Condition 4
),
'buy'] = 1
return dataframe
Condition Analysis
| Condition # | Condition Content | Technical Meaning |
|---|---|---|
| Condition #1 | adx > 16 | ADX above 16, indicates some trend (more lenient than ADXMomentum's 25) |
| Condition #2 | minus_di > 4 | Bearish directional indicator above 4 (non-extreme bearish state) |
| Condition #3 | plus_di > 20 | Bullish directional indicator above 20, bullish power is strong |
| Condition #4 | plus_di crosses above minus_di | Bullish directional indicator crosses above bearish, confirming trend initiation |
3.3 Entry Signal Classification
| Signal Dimension | Indicator | Judgment Standard | Comparison with ADXMomentum |
|---|---|---|---|
| Trend Strength | ADX | > 16 (more lenient) | ADXMomentum requires > 25 |
| Directional Strength | PLUS_DI | > 20 (slightly lenient) | ADXMomentum requires > 25 |
| Crossover Confirmation | DI Crossover | Cross above confirms | ADXMomentum only compares magnitude |
| Bearish Filter | MINUS_DI | > 4 (ensure non-extreme) | ADXMomentum doesn't have this condition |
Key Difference: ADX_15M_USDT uses DI crossover signal rather than simple comparison, able to more precisely capture trend initiation points.
4. Exit Logic Detailed Analysis
4.1 Exit Signal System
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['adx'] > 43) & # Condition 1
(dataframe['minus_di'] > 22) & # Condition 2
(dataframe['plus_di'] > 20) & # Condition 3
(qtpylib.crossed_above(dataframe['sell-minus_di'], dataframe['sell-plus_di'])) # Condition 4
),
'sell'] = 1
return dataframe
4.2 Exit Condition Analysis
| Condition # | Condition Content | Technical Meaning |
|---|---|---|
| Condition #1 | adx > 43 | Trend is extremely strong (very high ADX) |
| Condition #2 | minus_di > 22 | Bearish directional indicator is strong |
| Condition #3 | plus_di > 20 | Bullish directional indicator still at high level |
| Condition #4 | minus_di crosses above plus_di | Bearish crosses above bullish, trend reversal |
4.3 Exit Condition Design Analysis
There are clear differences between entry and exit condition designs:
| Dimension | Entry Condition | Exit Condition | Design Intent |
|---|---|---|---|
| ADX Threshold | > 16 (lenient) | > 43 (strict) | Easy to enter, hard to exit |
| DI Crossover | Bullish cross above | Bearish cross above | Capture trend reversal |
| MINUS_DI | > 4 | > 22 | Exit requires bears to already be strong |
4.4 Exit Mechanism Summary
The strategy has four exit methods:
| Exit Method | Trigger Condition | Description |
|---|---|---|
| ROI Take Profit | Profit ≥ 26.55% (immediate) | Capture big trend |
| ROI Decay | Time-decay target | Increase execution probability |
| Stop Loss | Loss ≥ 12.55% | Risk control |
| Signal Exit | All four conditions met | Trend reversal signal |
5. Technical Indicator System
5.1 Core Indicators
| Indicator Category | Specific Indicator | Purpose |
|---|---|---|
| Trend Strength | ADX (14) | Determine market trend strength |
| Directional Indicators | PLUS_DI (25), MINUS_DI (25) | Determine bullish/bearish direction and strength |
| Momentum Indicator | MOM (14) | Calculated but not used for signals (reserved) |
| Trend Following | SAR | Calculated but not used for signals (reserved) |
5.2 Independent Entry/Exit Indicators
A notable feature of the strategy is using independent indicator sets:
# Entry indicators
dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
dataframe['plus_di'] = ta.PLUS_DI(dataframe, timeperiod=25)
dataframe['minus_di'] = ta.MINUS_DI(dataframe, timeperiod=25)
# Exit indicators (independent calculation)
dataframe['sell-adx'] = ta.ADX(dataframe, timeperiod=14)
dataframe['sell-plus_di'] = ta.PLUS_DI(dataframe, timeperiod=25)
dataframe['sell-minus_di'] = ta.MINUS_DI(dataframe, timeperiod=25)
Design Significance: Although current parameters are the same, it reserves space for future independent optimization of entry/exit conditions.
6. Risk Management Features
6.1 Tiered Take Profit Mechanism
Holding Time Minimum Profit Requirement
────────────────────────────
0-30 minutes 26.552%
30-210 minutes 10.255%
210-540 minutes 3.545%
540+ minutes No requirement
Design Philosophy:
- Early pursuit of high returns (26.55%)
- Lower expectations as time passes
- Eventually controlled by signals
6.2 Stop Loss Setting
stoploss = -0.1255 # -12.55%
Comparison with ADXMomentum:
| Strategy | Stop Loss | Timeframe | Feature |
|---|---|---|---|
| ADXMomentum | -25% | 1h | Wide stop loss, long holding |
| ADX_15M_USDT | -12.55% | 15m | Tighter stop loss, quick turnover |
6.3 qtpylib Crossover Detection
The strategy uses qtpylib.crossed_above() function to detect DI crossovers:
qtpylib.crossed_above(dataframe['plus_di'], dataframe['minus_di'])
Advantages:
- Precisely captures crossover points
- More accurate than simple magnitude comparison
- Can identify the exact moment of trend initiation
7. Strategy Advantages and Limitations
✅ Advantages
- Tiered Take Profit System: Time decay mechanism increases execution probability, balances returns and execution
- Precise Crossover Signals: Uses DI crossover instead of simple comparison, captures trend initiation points
- Lenient Entry Conditions: ADX > 16 is more lenient than traditional 25, increases trading opportunities
- Independent Indicator Sets: Entry and exit indicators are independent, facilitating future optimization
- 15-Minute Level: Suitable for intraday trading, fast capital turnover
⚠️ Limitations
- Strict Exit Conditions: ADX > 43 may be difficult to meet, leading to prolonged holding
- Complex Parameters: ROI table parameters need adjustment based on market
- Redundant Indicators: MOM and SAR calculated but not used
- High Take Profit Target: 26.55% target may be difficult to achieve in ranging markets
8. Applicable Scenario Recommendations
| Market Environment | Recommended Configuration | Description |
|---|---|---|
| Trend Initiation Period | Default configuration | DI crossover signal precisely captures trend start |
| High Volatility Market | Adjust ROI table | May need to lower take profit target |
| Ranging Market | Not recommended | ADX condition may trigger frequently but limited returns |
| Low Volatility Market | Lower ADX threshold | Can reduce entry ADX threshold to 10-12 |
9. Applicable Market Environment Detailed Analysis
ADX_15M_USDT belongs to the trend breakout strategy type. Based on its code architecture, it is best suited for early trend initiation periods, while possibly generating false signals in ranging markets.
9.1 Strategy Core Logic
- Lenient Entry: ADX > 16 relaxes conditions, increases trading opportunities
- Crossover Confirmation: PLUS_DI crossing above MINUS_DI confirms trend initiation
- Strict Exit: ADX > 43 indicates extreme trend, possible reversal
- Tiered Take Profit: Time decay mechanism balances returns and execution
9.2 Performance in Different Market Environments
| Market Type | Performance Rating | Reason Analysis |
|---|---|---|
| 📈 Trend Initiation Period | ⭐⭐⭐⭐⭐ | DI crossover precisely captures entry point |
| 🔄 Ranging Market | ⭐⭐☆☆☆ | ADX > 16 is relatively lenient, may generate false signals |
| 📉 Downtrend | ⭐☆☆☆☆ | Long-only strategy, cannot profit |
| ⚡️ Extreme Volatility | ⭐⭐⭐☆☆ | May trigger high take profit, may also stop loss |
9.3 Key Configuration Recommendations
| Configuration Item | Recommended Value | Description |
|---|---|---|
| Trading Pair Selection | Moderate volatility coins | Too high volatility may cause frequent stop losses |
| Timeframe | 15m (default) | Ideal choice for intraday trading |
| Stop Loss Adjustment | Adjust based on volatility | Can appropriately widen for high volatility |
10. Important Reminder: The Cost of Complexity
10.1 Learning Cost
This strategy involves many concepts:
- ADX trend strength indicator
- DI directional indicators and crossovers
- Tiered ROI table understanding
- qtpylib crossover detection function
Recommend understanding ADXMomentum first before learning this strategy.
10.2 Hardware Requirements
| Number of Trading Pairs | Minimum Memory | Recommended Memory |
|---|---|---|
| 1-10 | 2GB | 4GB |
| 10-50 | 4GB | 8GB |
| 50+ | 8GB | 16GB |
10.3 Differences Between Backtesting and Live Trading
Strategy has many parameters, backtesting and live trading may have differences:
- ROI Table Effect: Tiered take profit may be discounted in live trading due to slippage
- Crossover Signal Delay: Live execution may have delays
- ADX Extreme Values: Exit ADX > 43 may only be met in extreme market conditions
10.4 Suggestions for Manual Traders
Core signals can be extracted for manual trading:
- ADX > 16 indicates some trend
- PLUS_DI crossing above MINUS_DI is entry signal
- ADX > 43 and reverse DI crossover is exit signal
11. Summary
ADX_15M_USDT is a refined trend breakout strategy. Its core value lies in:
- Tiered Take Profit: Time decay mechanism balances returns and execution probability
- Crossover Signals: Precisely captures trend initiation points
- Independent Indicator Sets: Entry and exit indicators separated, facilitating optimization
- 15-Minute Level: Suitable for intraday trading, fast capital turnover
For quantitative traders, ADX_15M_USDT demonstrates how to add refined management on top of basic strategies, making it an excellent example for understanding tiered take profit and crossover signals.