Strategi Momentum Dual Timeframe

Penulis:ChaoZhang, Tanggal: 2024-04-25 17:33:02
Tag:SMA

img

Gambaran umum

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 Strategi

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.

Keuntungan Strategi

  1. Analisis kerangka waktu ganda, memanfaatkan dampak kerangka waktu yang lebih tinggi pada kerangka waktu yang lebih rendah, meningkatkan probabilitas perdagangan yang sukses.
  2. Menggunakan SMA untuk menentukan arah tren relatif dapat diandalkan, dan menggunakan titik pivot untuk menangkap titik pembalikan relatif akurat.
  3. Pengguna dapat menyesuaikan kerangka waktu yang lebih tinggi dan lebih rendah, periode SMA, dan parameter titik pivot sesuai dengan kebutuhan mereka.
  4. Logikanya jelas dan mudah dimengerti dan diterapkan.

Risiko Strategi

  1. Risiko perubahan tren: Jika tren jangka waktu yang lebih tinggi tiba-tiba berubah, jangka waktu yang lebih rendah mungkin belum bereaksi, menyebabkan strategi gagal.
  2. Risiko pengaturan parameter. Pengaturan parameter yang tidak tepat dapat menyebabkan kinerja strategi yang buruk. Misalnya, memilih periode SMA yang terlalu pendek dapat menyebabkan perdagangan yang sering, sementara memilih yang terlalu lama dapat menyebabkan penilaian tren yang tertinggal.
  3. Risiko kondisi pasar yang ekstrim: Dalam kondisi pasar yang ekstrim (seperti kenaikan atau penurunan tajam), strategi ini mungkin gagal karena kerangka waktu yang lebih rendah mungkin tidak mengikuti tren kerangka waktu yang lebih tinggi.

Arah Optimasi Strategi

  1. Tambahkan deteksi perubahan tren. Logika dapat ditambahkan untuk menentukan apakah tren jangka waktu yang lebih tinggi telah berubah untuk menyesuaikan perdagangan pada jangka waktu yang lebih rendah lebih cepat.
  2. Metode optimasi parameter (seperti algoritma genetik, pencarian grid, dll.) dapat digunakan untuk menemukan kombinasi parameter yang optimal.
  3. Tambahkan pengendalian risiko. Langkah-langkah pengendalian risiko (seperti stop-loss, manajemen posisi, dll.) dapat ditambahkan untuk mengurangi kerugian dalam kondisi pasar yang ekstrim.
  4. Fusi multi-faktor: Indikator atau faktor lain (seperti volatilitas, volume, dll.) dapat dianggap dimasukkan ke dalam strategi untuk meningkatkan ketahanan.

Ringkasan

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)


Berkaitan

Lebih banyak