Cette stratégie est une stratégie de dynamique à double échéancier. Elle détermine la direction de la tendance sur la période supérieure à l'aide d'une moyenne mobile simple (SMA) et identifie les points d'inversion sur la période inférieure à l'aide de points pivots (PivotLow et PivotHigh).
Le principe principal de cette stratégie est que la direction de la tendance de l'échéancier supérieur influencera le mouvement de l'échéancier inférieur. Lorsque l'échéancier supérieur montre une tendance haussière, les retraits sur l'échéancier inférieur sont plus susceptibles d'être des opportunités d'achat; lorsque l'échéancier supérieur montre une tendance à la baisse, les rebonds sur l'échéancier inférieur sont plus susceptibles d'être des opportunités de raccourcissement. Cette stratégie utilise la moyenne mobile simple (SMA) pour déterminer la direction de la tendance de l'échéancier supérieur et les points pivots (PivotLow et PivotHigh) pour identifier les points d'inversion sur l'échéancier inférieur.
Cette stratégie de dynamique à double échéancier tire parti de la connexion entre les échéanciers supérieur et inférieur, déterminant la direction de la tendance sur l'échéancier supérieur et capturant les points d'inversion sur l'échéancier inférieur pour atteindre le suivi de la tendance et le trading d'inversion.
/*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)