Strategi ini adalah strategi momentum jangka masa berganda. Ia menentukan hala tuju trend pada jangka masa yang lebih tinggi menggunakan Purata Bergerak Sederhana (SMA) dan mengenal pasti titik pembalikan pada jangka masa yang lebih rendah menggunakan titik pivot (PivotLow dan PivotHigh). Ia masuk panjang apabila jangka masa yang lebih tinggi menunjukkan trend menaik dan titik pivot menaik muncul pada jangka masa yang lebih rendah, dan masuk pendek apabila jangka masa yang lebih tinggi menunjukkan trend menurun dan titik pivot menurun muncul pada jangka masa yang lebih rendah.
Prinsip utama strategi ini adalah bahawa arah trend bingkai masa yang lebih tinggi akan mempengaruhi pergerakan bingkai masa yang lebih rendah. Apabila bingkai masa yang lebih tinggi menunjukkan trend menaik, penarikan balik pada bingkai masa yang lebih rendah lebih cenderung menjadi peluang membeli; apabila bingkai masa yang lebih tinggi menunjukkan trend menurun, rebound pada bingkai masa yang lebih rendah lebih cenderung menjadi peluang pendek. Strategi ini menggunakan Purata Bergerak Sederhana (SMA) untuk menentukan arah trend bingkai masa yang lebih tinggi dan titik-titik pivot (PivotLow dan PivotHigh) untuk mengenal pasti titik pembalikan pada bingkai masa yang lebih rendah.
Strategi momentum jangka masa berganda ini memanfaatkan hubungan antara jangka masa yang lebih tinggi dan lebih rendah, menentukan arah trend pada jangka masa yang lebih tinggi dan menangkap titik pembalikan pada jangka masa yang lebih rendah untuk mencapai trend berikut dan perdagangan pembalikan. Strategi ini mempunyai logika yang jelas dan kelebihan yang jelas, tetapi juga mempunyai beberapa risiko.
/*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)