0bps

Strategy vault / Mean reversion

A DMI Stochastic Trading Strategy with Dynamic Stop loss

This trading strategy combines the Directional Movement Index (DMI) and Stochastic Oscillator to generate trading signals. The DMI, with its DI+, DI- lines and Average Directional Index (ADX), gauges trend strength…

Author
ChaoZhang
Complexity
Starter · 34 lines
Parameters
4
Backtest bar
1d · swing
Tested on
BTC/USDT · futures

IMG

Overview

This trading strategy combines the Directional Movement Index (DMI) and Stochastic Oscillator to generate trading signals. The DMI, with its DI+, DI- lines and Average Directional Index (ADX), gauges trend strength and direction. The strategy goes long (buy) when DI+ is above DI-, ADX is above 25 and Stochastic %K is below 20 (oversold). It goes short (sell) when DI- is above DI+, ADX remains above 25 and Stochastic %K exceeds 80 (overbought). Dynamic stop-loss levels based on recent highest and lowest closes enhance risk control.

Strategy Logic

The strategy is based on the following key components:

  1. DMI for trend identification: DI+, DI- and ADX lines of DMI determine market trend direction and strength. DI+ above DI- signals an uptrend while DI- above DI+ signals a downtrend. Higher ADX values indicate stronger trend.

  2. Stochastic for overbought/oversold:%K line of Stochastic shows current close relative to recent highest and lowest. Values below 20 imply oversold while above 80 overbought.

  3. Signal logic:Combining DMI and Stochastic, the strategy goes long when DI+>DI-(uptrend), ADX>25 (trend strength) and Stochastic %K <20 (oversold). It goes short when DI->DI+ (downtrend), ADX>25 and %K>80 (overbought).

  4. Dynamic stop-loss: Recent highest and lowest closes after entry are used as dynamic stop-loss levels, enabling adaptive risk control.

Advantage Analysis

The main advantages of this strategy are:

  1. Higher reliability using dual confirmation from DMI (trend) & Stochastic (overbought/oversold).

  2. Innovative dynamic stop loss based on recent price swings enables better risk control.

  3. Fewer parameters makes optimization and implementation easy.

  4. Wide adaptability across financial markets (stocks, forex, crypto etc.) and timeframes.

  5. Pine script allows direct application on trading platforms. Convenient.

Risk Analysis

Some risks to consider:

  1. Potential false signals in trending markets when ADX is low. Reduce position sizing.

  2. Stochastic is a lagging indicator. Market may have reversed at signal time. Combine with leading indicators.

  3. Dynamic stops cannot fully avoid huge trend swings. Reasonable stop distance is essential.

  4. Inadequate parameter tuning negatively impacts performance. Optimal lengths should be set.

  5. Black swan events require strategy suspension to prevent abnormal losses.

Optimization Directions

Some ways to enhance the strategy:

  1. Adding filters with more indicators like moving averages and MACD increases signal reliability.

  2. Parameter optimization through backtesting helps discover optimal settings.

  3. Customize parameters based on instrument and timeframe. Faster instruments can use shorter lengths.

  4. Incorporate detailed log outputs using getInfo() to enable easier analysis and refinement.

  5. Plot signal points and stop-loss lines on chart for additional insights.

  6. Develop custom alerts to receive timely notifications allowing quick interventions.

Conclusion

This strategy combines the strengths of DMI and Stochastic Oscillator to identify trend direction and overbought/oversold levels for trade entries. The innovative dynamic stop loss mechanism also enables smarter risk control. With reliable signals, wide applicability, ease of use and customization, this is an efficient algorithmic trading strategy. Further optimizations can lead to superior performance.

Parameters

NameDefaultWhat it controls
v_input_114DMI Length
v_input_225ADX Threshold
v_input_314Stochastic %K Length
v_input_43Stochastic %D Length

Source Pine Script

/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("DMI with Stochastic and Dynamic Stop-Loss", shorttitle="DMI_Stoch_SL", overlay=true)

length = input(14, title="DMI Length")
adxThreshold = input(25, title="ADX Threshold")
stochKLength = input(14, title="Stochastic %K Length")
stochDLength = input(3, title="Stochastic %D Length")

[diPlus, diMinus, adx] = ta.dmi(length, length)
stochKLine = ta.stoch(close, high, low, stochKLength)

var float lowestClose = na
var float highestClose = na
lowestClose := na(lowestClose) ? close : math.min(lowestClose, close)
highestClose := na(highestClose) ? close : math.max(highestClose, close)

longCondition = (diPlus > diMinus) and (adx > adxThreshold) and (stochKLine < 20)
shortCondition = (diMinus > diPlus) and (adx > adxThreshold) and (stochKLine > 80)

if longCondition
    strategy.entry("Buy", strategy.long)
    strategy.exit("Exit Buy", "Buy", stop=lowestClose)

if shortCondition
    strategy.entry("Sell", strategy.short)
    strategy.exit("Exit Sell", "Sell", stop=highestClose)

Published by ChaoZhang on the FMZ strategy square · last modified 2023-12-26. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.

Build this with AgenKit

A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.

in Claude Code, Cursor, Codex & 4 more
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/A-DMI-Stochastic-Trading-Strategy-with-Dynamic-Stop-loss.md
  1. npx agenkit install engineering-kit in your project
  2. Paste the command into your agent and approve each phase
  3. Get tests, backtest, risk controls and a paper-trading switch

Understand it first

Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.

Related specs

esc

Try , , or .

↑↓ move↵ open