dev-resources.site
for different kinds of informations.
Multi-Market Adaptive Multi-Indicator Trend Following Strategy
Overview
This is an adaptive trend tracking strategy based on a combination of multiple technical indicators, which can automatically adjust parameters according to different market characteristics. The strategy uses the capital flow index (CMF), the detrended price oscillator (DPO) and the Coppock index to capture market trends, and adapts to the characteristics of different markets through the volatility adjustment factor. The strategy has a complete position management and risk control system, and can dynamically adjust the transaction size according to market volatility.
Strategy Principle
The core logic of the strategy is to confirm the trend direction and trading timing through the coordination of multiple indicators. Specifically:
- Use CMF indicators to measure capital flows and judge market sentiment
- Eliminate the impact of long-term trends through the DPO indicator and focus on short- and medium-term price fluctuations
- Using the modified Coppock indicator to capture trend turning points
- A trading signal is generated when all three indicators confirm
- Dynamically calculate stop loss and take profit positions through ATR
- Automatically adjust leverage and volatility parameters based on different market characteristics (stocks, foreign exchange, futures)
Strategy Advantages
- Multi-indicator cross-validation can effectively filter out false signals
- Strong adaptability, can be applied to different market environments
- Perfect position management system, dynamically adjust positions according to volatility
- It has a stop-loss and stop-profit mechanism to control risks while protecting profits
- Support multiple varieties of transactions at the same time to diversify risks
- The transaction logic is clear, easy to maintain and optimize
Strategy Risks
- Multi-indicator systems may have lags and miss opportunities in fast-moving markets
- Excessive parameter optimization may lead to overfitting
- Market switching periods may generate false signals
- Setting a stop loss too tight may lead to frequent stop losses
- Transaction costs can affect strategy returns.
- It is recommended to manage risk by:
- Regularly check parameter validity
- Real-time monitoring of position performance
- Reasonable control of leverage ratio
- Set a maximum drawdown limit
Strategy Optimization Direction
- Introduce market volatility status judgment and use different parameter combinations in different volatility environments
- Add more market feature identification indicators to improve strategy adaptability
- Optimize the stop loss and take profit mechanism, and consider using a moving stop loss
- Develop an automatic parameter optimization system to adjust parameters regularly
- Add transaction cost analysis module
- Add risk warning mechanism
Summary
This strategy is a relatively complete trend tracking system. Through the coordination of multiple indicators and risk control mechanisms, it can ensure returns while also controlling risks. The strategy is highly scalable and has a lot of room for optimization. It is recommended to start with a small scale in real trading and gradually increase the scale of transactions, while continuously monitoring the performance of the strategy and adjusting the parameters in a timely manner.
Strategy source code
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Multi-Market Adaptive Trading Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Input parameters
i_market_type = input.string("Crypto", "Market Type", options=["Forex", "Crypto", "Futures"])
i_risk_percent = input.float(1, "Risk Per Trade (%)", minval=0.1, maxval=100, step=0.1)
i_volatility_adjustment = input.float(1.0, "Volatility Adjustment", minval=0.1, maxval=5.0, step=0.1)
i_max_position_size = input.float(5.0, "Max Position Size (%)", minval=1.0, maxval=100.0, step=1.0)
i_max_open_trades = input.int(3, "Max Open Trades", minval=1, maxval=10)
// Indicator Parameters
i_cmf_length = input.int(20, "CMF Length", minval=1)
i_dpo_length = input.int(21, "DPO Length", minval=1)
i_coppock_short = input.int(11, "Coppock Short ROC", minval=1)
i_coppock_long = input.int(14, "Coppock Long ROC", minval=1)
i_coppock_wma = input.int(10, "Coppock WMA", minval=1)
i_atr_length = input.int(14, "ATR Length", minval=1)
// Market-specific Adjustments
volatility_factor = i_market_type == "Forex" ? 0.1 : i_market_type == "Futures" ? 1.5 : 1.0
volatility_factor *= i_volatility_adjustment
leverage = i_market_type == "Forex" ? 100.0 : i_market_type == "Futures" ? 20.0 : 3.0
// Calculate Indicators
mf_multiplier = ((close - low) - (high - close)) / (high - low)
mf_volume = mf_multiplier * volume
cmf = ta.sma(mf_volume, i_cmf_length) / ta.sma(volume, i_cmf_length)
dpo_offset = math.floor(i_dpo_length / 2) + 1
dpo = close - ta.sma(close, i_dpo_length)[dpo_offset]
roc1 = ta.roc(close, i_coppock_short)
roc2 = ta.roc(close, i_coppock_long)
coppock = ta.wma(roc1 + roc2, i_coppock_wma)
atr = ta.atr(i_atr_length)
// Define Entry Conditions
long_condition = cmf > 0 and dpo > 0 and coppock > 0 and ta.crossover(coppock, 0)
short_condition = cmf < 0 and dpo < 0 and coppock < 0 and ta.crossunder(coppock, 0)
// Calculate Position Size
account_size = strategy.equity
risk_amount = math.min(account_size * (i_risk_percent / 100), account_size * (i_max_position_size / 100))
position_size = (risk_amount / (atr * volatility_factor)) * leverage
// Execute Trades
if (long_condition and strategy.opentrades < i_max_open_trades)
sl_price = close - (atr * 2 * volatility_factor)
tp_price = close + (atr * 3 * volatility_factor)
strategy.entry("Long", strategy.long, qty=position_size)
strategy.exit("Long Exit", "Long", stop=sl_price, limit=tp_price)
if (short_condition and strategy.opentrades < i_max_open_trades)
sl_price = close + (atr * 2 * volatility_factor)
tp_price = close - (atr * 3 * volatility_factor)
strategy.entry("Short", strategy.short, qty=position_size)
strategy.exit("Short Exit", "Short", stop=sl_price, limit=tp_price)
// Plot Indicators
plot(cmf, color=color.blue, title="CMF")
plot(dpo, color=color.green, title="DPO")
plot(coppock, color=color.red, title="Coppock")
hline(0, "Zero Line", color=color.gray)
// Alerts
alertcondition(long_condition, title="Long Entry", message="Potential Long Entry Signal")
alertcondition(short_condition, title="Short Entry", message="Potential Short Entry Signal")
// // Performance reporting
// if barstate.islastconfirmedhistory
// label.new(bar_index, high, text="Strategy Performance:\nTotal Trades: " + str.tostring(strategy.closedtrades) +
// "\nWin Rate: " + str.tostring(strategy.wintrades / strategy.closedtrades * 100, "#.##") + "%" +
// "\nProfit Factor: " + str.tostring(strategy.grossprofit / strategy.grossloss, "#.##"))
The original address: Multi-Market Adaptive Multi-Indicator Trend Following Strategy
Featured ones: