Strategi Momentum Skala Masa Dwi

SMA
Tarikh penciptaan: 2024-04-25 17:33:02 Akhirnya diubah suai: 2024-04-25 17:33:02
Salin: 0 Bilangan klik: 592
1
fokus pada
1617
Pengikut

Strategi Momentum Skala Masa Dwi

Gambaran keseluruhan

Strategi ini adalah strategi momentum dua skala masa. Ia menilai arah trend dengan menggunakan purata bergerak sederhana (SMA) pada tempoh masa peringkat tinggi dan titik pivot (PivotLow dan PivotHigh) pada tempoh masa peringkat rendah untuk mengenal pasti titik balik.

Prinsip Strategi

Prinsip utama strategi ini adalah bahawa arah trend dalam kitaran masa peringkat tinggi akan mempengaruhi pergerakan kitaran masa peringkat rendah. Apabila kitaran masa peringkat tinggi menunjukkan trend menaik, penyesuaian kitaran masa peringkat rendah lebih mungkin untuk membeli; apabila kitaran masa peringkat tinggi menunjukkan trend menurun, pantulan dalam kitaran masa peringkat rendah lebih mungkin untuk membuat peluang kosong.

Kelebihan Strategik

  1. Analisis dua skala masa, memanfaatkan kesan kitaran masa peringkat tinggi terhadap kitaran masa peringkat rendah, meningkatkan kebarangkalian kejayaan perdagangan.
  2. Menggunakan SMA untuk menentukan arah trend lebih dipercayai, menggunakan titik-titik pusat untuk menangkap titik-titik perubahan lebih tepat.
  3. Parameter boleh laras dan mudah disesuaikan. Pengguna boleh menyesuaikan skala masa tinggi atau rendah, kitaran SMA, parameter titik pusat dan sebagainya mengikut keperluan mereka sendiri.
  4. Logiknya jelas, mudah difahami dan dilaksanakan.

Risiko Strategik

  1. Risiko perubahan trend. Jika trend dalam kitaran waktu peringkat tinggi berubah secara tiba-tiba, kitaran waktu peringkat rendah mungkin belum bertindak balas, menyebabkan strategi gagal.
  2. Pengaturan parameter risiko. Pengaturan parameter yang tidak sesuai boleh menyebabkan prestasi strategi yang tidak baik. Sebagai contoh, pemilihan kitaran SMA yang terlalu pendek boleh menyebabkan perdagangan yang kerap, pemilihan terlalu panjang boleh menyebabkan kecenderungan penilaian yang terlewat.
  3. Risiko keadaan yang melampau. Dalam keadaan yang melampau (seperti kejatuhan ribut), strategi ini mungkin tidak berfungsi. Kerana dalam keadaan ini, kitaran waktu peringkat rendah mungkin tidak mengikuti trend kitaran waktu peringkat tinggi.

Arah pengoptimuman strategi

  1. Menambah penghakiman perubahan trend. Anda boleh menambah beberapa logik untuk menilai sama ada trend berubah pada tempoh masa peringkat tinggi, untuk lebih cepat menyesuaikan perdagangan pada tempoh masa peringkat rendah.
  2. Pemilihan parameter optimum. Beberapa kaedah pengoptimuman parameter (seperti algoritma genetik, carian grid, dan lain-lain) boleh digunakan untuk mencari kombinasi parameter yang optimum.
  3. Meningkatkan kawalan risiko. Anda boleh menambah langkah-langkah kawalan risiko (seperti stop loss, pengurusan kedudukan, dan sebagainya) untuk mengurangkan kerugian dalam keadaan yang melampau.
  4. Penyelarasan pelbagai faktor. Anda boleh mempertimbangkan untuk memasukkan indikator atau faktor lain (seperti kadar turun naik, jumlah transaksi, dll.) ke dalam strategi untuk meningkatkan kestabilan strategi.

ringkaskan

Strategi dinamik dua skala masa ini memanfaatkan hubungan antara kitaran masa peringkat tinggi dan rendah, dengan menilai arah trend dalam kitaran masa peringkat tinggi, menangkap titik balik dalam kitaran masa peringkat rendah, untuk mencapai trend mengikuti dan bertukar perdagangan. Logik strategi ini jelas, kelebihan jelas, tetapi ada juga beberapa risiko.

Kod sumber strategi
/*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)