Skip to main content

ADX_15M_USDT2 Strategy In-Depth Analysis

Strategy Number: #413 (413th of 465 strategies)
Strategy Type: Trend Reversal + DI Crossover
Timeframe: 15 Minutes (15m)


I. Strategy Overview​

ADX_15M_USDT2 is a minimalist trend strategy based on ADX (Average Directional Index) and DI (Directional Indicator) crossovers. The strategy captures trend reversal opportunities by detecting crossover signals between MINUS_DI and PLUS_DI. The core logic is extremely concise, embodying a "less is more" design philosophy.

Core Features​

FeatureDescription
Buy Condition1 core buy signal (DI crossover)
Sell Condition1 basic sell signal (DI reverse crossover + extreme ADX values)
Protection MechanismFixed stop-loss + ROI tiered take-profit
Timeframe15 Minutes (15m)
Dependenciestalib, qtpylib

II. Strategy Configuration Analysis​

2.1 Basic Risk Parameters​

# ROI exit table
minimal_roi = {
"0": 0.10313, # Exit immediately at 10.313% profit
"102": 0.07627, # Exit at 7.627% after 102 minutes
"275": 0.04228, # Exit at 4.228% after 275 minutes
"588": 0 # Accept any profit after 588 minutes
}

# Stop-loss setting
stoploss = -0.31941 # -31.941% stop-loss

Design Rationale:

  • Aggressive take-profit: Demands 10%+ profit from the start, reflecting pursuit of quick swing gains
  • Time decay: Longer holding periods reduce profit requirements, avoiding profit giveback
  • Wide stop-loss: 31.9% stop-loss provides sufficient tolerance for trend fluctuations

2.2 Order Type Configuration​

The strategy does not customize order_types, using default configuration.


III. Buy Condition Details​

3.1 Core Buy Logic​

def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(qtpylib.crossed_above(dataframe['minus_di'], dataframe['plus_di']))
),
'buy'] = 1
return dataframe

Single Buy Condition: MINUS_DI crosses above PLUS_DI

Condition ElementParameterDescription
MINUS_DI25 periodsNegative directional indicator, represents downward momentum
PLUS_DI25 periodsPositive directional indicator, represents upward momentum
Crossover Signalcrossed_aboveMINUS_DI breaks above PLUS_DI

3.2 Commented Out Filter Conditions​

There are commented-out filter conditions in the code:

# (dataframe['adx'] > 45) &
# (dataframe['minus_di'] > 26) &
# (dataframe['plus_di'] > 33) &

If enabled, these conditions would filter:

  • ADX > 45: Strong trend confirmation
  • MINUS_DI > 26: Significant downward momentum
  • PLUS_DI > 33: Simultaneous upward momentum (potential oscillation)

3.2 Strategy Intent Interpretation​

MINUS_DI crossing above PLUS_DI typically means downward momentum is beginning to dominate, which in traditional interpretation is a short signal. However, this strategy uses it as a buy signal, possibly due to:

  1. Contrarian operation: Catching oversold bounces
  2. Bottom-fishing strategy: Entering positions at the start of downward momentum
  3. Design oversight: Possibly a test version or incomplete version

IV. Sell Logic Details​

4.1 Sell Conditions​

def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['adx'] > 91) &
(dataframe['sell-minus_di'] > 91) &
(qtpylib.crossed_above(dataframe['sell-plus_di'], dataframe['sell-minus_di']))
),
'sell'] = 1
return dataframe

Triple Filter Sell Signal:

ConditionParameter ValueDescription
ADX > 91Extreme valueTrend strength reaches extreme
MINUS_DI > 91Extreme valueDownward momentum reaches extreme
PLUS_DI crosses above MINUS_DICrossoverUpward momentum begins to overtake

4.2 Sell Condition Analysis​

Meaning of Extreme Threshold 91:

  • ADX and DI indicators typically fluctuate within 0-100 range
  • 91 is a very extreme value, rarely occurring
  • This means the sell signal triggers extremely infrequently

Practical Effect: The strategy primarily relies on the ROI table and stop-loss for exits; technical sell signals will almost never trigger.


V. Technical Indicator System​

5.1 Core Indicators​

Indicator CategorySpecific IndicatorParametersPurpose
Trend StrengthADX14 periodsMeasures trend strength (non-directional)
Directional IndicatorPLUS_DI25 periodsPositive direction momentum
Directional IndicatorMINUS_DI25 periodsNegative direction momentum
Trend FollowingSARDefaultParabolic Stop and Reverse (unused)
Momentum IndicatorMOM14 periodsMomentum oscillator (unused)

5.2 Indicator Calculation​

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
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)
dataframe['sar'] = ta.SAR(dataframe)
dataframe['mom'] = ta.MOM(dataframe, timeperiod=14)
# Sell indicators (calculated independently)
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)
dataframe['sell-sar'] = ta.SAR(dataframe)
dataframe['sell-mom'] = ta.MOM(dataframe, timeperiod=14)
return dataframe

Note: The strategy calculates SAR and MOM indicators but does not use them in buy/sell conditions, possibly reserved for future extension interfaces.


VI. Risk Management Features​

6.1 Tiered Take-Profit Mechanism​

Holding TimeTake-Profit ThresholdDescription
0 minutes10.31%Demands high returns from entry
102 minutes7.63%Reduces requirements after ~1.7 hours
275 minutes4.23%Further reduces after ~4.6 hours
588 minutes0%Exits unconditionally after ~9.8 hours

6.2 Fixed Stop-Loss​

  • Stop-Loss Value: -31.941%
  • Characteristics: Relatively loose compared to aggressive take-profit
  • Risk: May incur significant drawdown

6.3 No Trailing Stop​

The strategy does not enable trailing_stop, relying on fixed stop-loss and ROI exits.


VII. Strategy Advantages and Limitations​

✅ Advantages​

  1. Simple Logic: Single buy signal, easy to understand and debug
  2. Lightweight Code: About 60 lines of code, high execution efficiency
  3. Low Computational Overhead: Uses only basic technical indicators, low hardware requirements

⚠️ Limitations​

  1. Signal Direction Questionable: MINUS_DI crossing above PLUS_DI is traditionally a short signal
  2. Sell Signal Extremely Difficult to Trigger: ADX/DI > 91 thresholds are almost impossible to reach
  3. Lack of Filter Conditions: Buy signal too simple, may generate many false signals
  4. Stop-Loss Too Wide: 31.9% stop-loss may lead to significant losses
  5. Unused Indicators: SAR and MOM calculated but not used, creating redundancy

VIII. Applicable Scenario Recommendations​

Market EnvironmentRecommended ConfigurationDescription
Volatile MarketEnable ADX FilterUncomment ADX > 45 condition
Trending MarketAdjust Take-ProfitLower initial ROI threshold
High Risk ToleranceCurrent ConfigurationMaintain original parameters
Conservative TradingTighten Stop-LossAdjust stop-loss to -10%~-15%

IX. Applicable Market Environment Details​

ADX_15M_USDT2 is a minimalist signal strategy. Based on its code architecture, it is best suited for high-volatility reversal markets, while performing poorly in trend continuation markets.

9.1 Strategy Core Logic​

  • Reversal Capture: Captures trend reversal points through DI crossovers
  • Extreme Exit: Judges trend termination through extreme ADX values
  • Time Decay: Controls holding duration through ROI table

9.2 Performance in Different Market Environments​

Market TypePerformance RatingAnalysis
📈 Strong Trend⭐⭐☆☆☆DI crossover may trigger premature reversal entry
🔄 Oscillating Reversal⭐⭐⭐⭐☆Matches strategy reversal capture logic
📉 Plunging Market⭐⭐☆☆☆Buy signal direction may be opposite
⚡️ High Volatility⭐⭐⭐☆☆Frequent signals, requires filtering

9.3 Key Configuration Recommendations​

Configuration ItemRecommended ValueDescription
Stop-Loss-15%Reduce maximum loss
ADX FilterEnableUncomment conditions
Timeframe15m/1hAvoid lower timeframe noise

X. Important Note: The Cost of Complexity​

10.1 Learning Cost​

The strategy code is extremely simple with low learning cost, but understanding DI crossover trading logic requires technical analysis foundation.

10.2 Hardware Requirements​

Number of Trading PairsMinimum MemoryRecommended Memory
1-10 pairs512MB1GB
10-50 pairs1GB2GB
50+ pairs2GB4GB

10.3 Differences Between Backtesting and Live Trading​

  • Backtesting: May hold positions for long periods due to rare sell signals
  • Live Trading: Need to monitor if stop-loss is too loose

10.4 Manual Trading Recommendations​

Strategy core can be executed manually:

  1. Observe DI indicators on 15-minute charts
  2. Consider entering when MINUS_DI crosses above PLUS_DI
  3. Set 10% take-profit or time-based stop

XI. Conclusion​

ADX_15M_USDT2 is a minimalist reversal strategy prototype. Its core value lies in:

  1. Simple and Understandable: Single signal, transparent code
  2. Extension Space: Reserved interfaces for ADX, SAR, MOM indicators
  3. Prototype Value: Can serve as a starting point for DI crossover strategies

For quantitative traders, it is recommended to enable commented conditions and adjust signal direction before committing to live testing.