
Strategi ini adalah strategi momentum skala waktu ganda. Strategi ini menilai arah tren dengan menggunakan rata-rata bergerak sederhana (SMA) pada periode waktu tingkat tinggi, dan titik pivot (PivotLow dan PivotHigh) pada periode waktu tingkat rendah untuk mengidentifikasi titik balik. Strategi ini lebih terbuka ketika periode waktu tingkat tinggi menunjukkan tren naik dan periode waktu tingkat rendah menunjukkan pivot bearish, dan lebih kosong ketika periode waktu tingkat tinggi menunjukkan tren turun dan periode waktu tingkat rendah menunjukkan pivot bearish.
Prinsip utama dari strategi ini adalah bahwa arah tren dari siklus waktu tingkat tinggi akan mempengaruhi pergerakan siklus waktu tingkat rendah. Ketika siklus waktu tingkat tinggi menunjukkan tren naik, pengembalian siklus waktu tingkat rendah lebih mungkin menjadi peluang beli; Ketika siklus waktu tingkat tinggi menunjukkan tren turun, rebound 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, menggunakan titik pivot (PowLivot dan PivotHigh) untuk mengidentifikasi titik balik siklus waktu tingkat tinggi.
Strategi ini memanfaatkan hubungan antara siklus waktu tingkat tinggi dan rendah, dengan menentukan arah tren pada siklus waktu tingkat tinggi, menangkap titik balik pada siklus waktu tingkat rendah, untuk mencapai trend mengikuti dan membalikkan perdagangan. Strategi ini logis jelas, keunggulan jelas, tetapi juga ada 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)