Strategi ini adalah strategi momentum jangka waktu ganda. Strategi ini menentukan arah tren pada jangka waktu yang lebih tinggi menggunakan Simple Moving Average (SMA) dan mengidentifikasi titik pembalikan pada jangka waktu yang lebih rendah menggunakan titik pivot (PivotLow dan PivotHigh).
Prinsip utama dari strategi ini adalah bahwa arah tren dari kerangka waktu yang lebih tinggi akan mempengaruhi pergerakan kerangka waktu yang lebih rendah. Ketika kerangka waktu yang lebih tinggi menunjukkan uptrend, pullback pada kerangka waktu yang lebih rendah lebih mungkin menjadi peluang pembelian; ketika kerangka waktu yang lebih tinggi menunjukkan downtrend, rebound pada kerangka waktu yang lebih rendah lebih mungkin menjadi peluang shorting. Strategi ini menggunakan Simple Moving Average (SMA) untuk menentukan arah tren dari kerangka waktu yang lebih tinggi dan titik pivot (PivotLow dan PivotHigh) untuk mengidentifikasi titik pembalikan pada kerangka waktu yang lebih rendah.
Strategi momentum jangka waktu ganda ini memanfaatkan hubungan antara jangka waktu yang lebih tinggi dan yang lebih rendah, menentukan arah tren pada jangka waktu yang lebih tinggi dan menangkap titik pembalikan pada jangka waktu yang lebih rendah untuk mencapai tren berikut dan perdagangan pembalikan. Strategi ini memiliki logika yang jelas dan keuntungan yang jelas, tetapi juga memiliki 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)