Cette stratégie est une stratégie de dynamisme à deux échelles de temps. Elle détermine la direction de la tendance en utilisant des moyennes mobiles simples (SMA) sur les cycles de temps de niveau supérieur, et identifie les points d'inversion (PivotLow et PivotHigh) sur les cycles de temps de niveau inférieur. Elle est plus ouverte lorsque les cycles de temps de niveau supérieur présentent une tendance haussière et plus ouverte lorsque les cycles de temps de niveau inférieur présentent une tendance haussière.
Le principe principal de cette stratégie est que la direction de la tendance des cycles de temps de haut niveau affecte la tendance des cycles de temps de bas niveau. Lorsque les cycles de temps de haut niveau présentent une tendance haussière, les retours des cycles de temps de bas niveau sont plus susceptibles d'être des opportunités d'achat; lorsque les cycles de temps de haut niveau présentent une tendance baissière, les rebonds des cycles de temps de bas niveau sont plus susceptibles d'être des opportunités de vente. La stratégie utilise des moyennes mobiles simples (SMA) pour déterminer la direction de la tendance des cycles de temps de haut niveau, et utilise les points pivots (PivotLow et PivotHigh) pour identifier les points de retour des cycles de temps de bas niveau.
Cette stratégie de dynamisme à deux échelles utilise les liens entre les cycles de temps de haut et de bas niveau, en déterminant la direction de la tendance sur les cycles de temps de haut niveau et en capturant les points d'inversion sur les cycles de temps de bas niveau pour réaliser le suivi et l'inversion des tendances. La stratégie est logique, ses avantages sont évidents, mais il y a aussi des risques.
/*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)