Strategi ini adalah strategi momentum dua skala waktu. Strategi ini menggunakan SMA untuk menentukan arah tren pada siklus waktu tingkat tinggi, dan PivotLow dan PivotHigh untuk mengidentifikasi titik balik pada siklus waktu tingkat rendah.
Prinsip utama dari strategi ini adalah bahwa arah tren dari siklus waktu tingkat tinggi akan mempengaruhi arah tren dari siklus waktu tingkat rendah. Ketika siklus waktu tingkat tinggi menunjukkan tren naik, kemunduran dari siklus waktu tingkat rendah lebih mungkin menjadi peluang membeli; ketika siklus waktu tingkat tinggi menunjukkan tren turun, kemunduran dari siklus waktu tingkat rendah lebih mungkin menjadi peluang kosong. Strategi ini menggunakan rata-rata bergerak sederhana (SMA) untuk menentukan arah tren dari siklus waktu tingkat tinggi, dan menggunakan titik pusat (PivotLow dan PivotHigh) untuk mengidentifikasi titik balik dari siklus waktu tingkat rendah.
Strategi momentum skala dua ini memanfaatkan hubungan antara siklus waktu tingkat tinggi dan rendah, dengan menentukan arah tren pada siklus waktu tingkat tinggi, dan menangkap titik balik pada siklus waktu tingkat rendah untuk mencapai tren mengikuti dan perdagangan reversal. Strategi ini memiliki logika yang jelas, keuntungan yang jelas, tetapi juga beberapa risiko. Di masa depan, strategi ini dapat dioptimalkan dari sudut pandang penilaian perubahan tren, optimasi parameter, pengendalian risiko, konvergensi multi-faktor, dll.
/*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)