This strategy is a dual timeframe momentum strategy. It determines the trend direction on the higher timeframe using a Simple Moving Average (SMA) and identifies reversal points on the lower timeframe using pivot points (PivotLow and PivotHigh). It enters long when the higher timeframe shows an uptrend and a bullish pivot point appears on the lower timeframe, and enters short when the higher timeframe shows a downtrend and a bearish pivot point appears on the lower timeframe.
The main principle of this strategy is that the trend direction of the higher timeframe will influence the movement of the lower timeframe. When the higher timeframe shows an uptrend, pullbacks on the lower timeframe are more likely to be buying opportunities; when the higher timeframe shows a downtrend, rebounds on the lower timeframe are more likely to be shorting opportunities. This strategy uses the Simple Moving Average (SMA) to determine the trend direction of the higher timeframe and pivot points (PivotLow and PivotHigh) to identify reversal points on the lower timeframe.
This dual timeframe momentum strategy leverages the connection between higher and lower timeframes, determining the trend direction on the higher timeframe and capturing reversal points on the lower timeframe to achieve trend following and reversal trading. The strategy has clear logic and obvious advantages, but also has some risks. In the future, the strategy can be optimized from aspects such as trend change detection, parameter optimization, risk control, and multi-factor fusion to improve its adaptability and robustness.
/*backtest start: 2023-04-19 00:00:00 end: 2024-04-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Riester //@version=5 strategy("Dual Timeframe Momentum", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05) n = input.int(20, "Moving Average Period", minval=1) src = input.source(close, "Source") high_tf = input.timeframe("240", "Resolution") pivot_l = input.int(5, "Pivot Let Bars") pivot_r = input.int(2, "Pivot Right Bars") //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // Calculations //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // 1. Define low and high timeframe prices low_src = src high_src = request.security(syminfo.tickerid, high_tf, src) // 2. Use simple moving average to determine trend of higher timeframe (up or down) high_tf_ma = ta.sma(high_src, n) plot(high_tf_ma, color=color.yellow) high_tf_trend = high_tf_ma > high_tf_ma[1] ? 1 : -1 // 3. Use pivots to identify reversals on the low timeframe low_tf_pl = ta.pivotlow(high_src, pivot_l, pivot_r) plot(low_tf_pl, style=plot.style_line, linewidth=3, color= color.green, offset=-pivot_r) low_tf_ph = ta.pivothigh(high_src, pivot_l, pivot_r) plot(low_tf_ph, style=plot.style_line, linewidth=3, color= color.red, offset=-pivot_r) bool long = low_tf_pl and high_tf_trend == 1 bool short = low_tf_ph and high_tf_trend == -1 //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // Plots //----------------------------------------------------------------------------------------------------------------------------------------------------------------- // this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically. enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}' exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}' if long strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert) if short strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)