Strategi perdagangan pulback rata-rata bergerak multi timeframe

Penulis:ChaoZhang, Tanggal: 2024-02-29 11:20:28
Tag:

img

Gambaran umum

Strategi ini mengadopsi pendekatan rata-rata bergerak multi timeframe, menggunakan rata-rata bergerak jangka panjang untuk menentukan arah tren utama sementara rata-rata bergerak jangka pendek untuk menentukan arah tren jangka pendek. Ketika tren jangka panjang sejajar dengan tren jangka pendek, posisi diambil sesuai. Ketika rata-rata bergerak jangka pendek menarik kembali ke sekitar rata-rata bergerak jangka panjang, ini menunjukkan koreksi jangka pendek yang menyajikan peluang perdagangan untuk arah terbalik. Strategi ini bekerja terbaik untuk saham tren selama jangka waktu menengah hingga panjang.

Logika Strategi

Strategi ini menggunakan rata-rata bergerak sederhana 200 hari (SMA) untuk menentukan arah tren jangka panjang, dan SMA 10 hari untuk arah tren jangka pendek. Ketika harga ditutup di atas SMA 200 hari dan di bawah SMA 10 hari, itu menandakan tren jangka panjang ke atas dengan pullback jangka pendek, menyajikan peluang pembelian. Ketika harga ditutup di bawah SMA 200 hari dan di atas SMA 10 hari, itu menandakan tren jangka panjang ke bawah dengan bouncing jangka pendek, menyajikan peluang jual.

Secara khusus, ketika kondisi berikut terpenuhi, entri panjang dipicu: Close > 200-day SMA AND Close < 10-day SMA. Ketika kondisi berikut terpenuhi, entri pendek dipicu: Close < 200-day SMA AND Close > 10-day SMA.

Setelah masuk, mekanisme stop loss 10% diimplementasikan. Posisi akan dihentikan jika retracement dari harga masuk melebihi 10%. Juga, jika opsi i_lowerClose diaktifkan, itu akan menunggu penutupan yang lebih rendah sebelum keluar, menghindari sensitivitas yang berlebihan dari stop loss.

Analisis Keuntungan

Strategi ini menggabungkan rata-rata bergerak multi timeframe, memungkinkan probabilitas tinggi dalam menangkap arah tren jangka menengah hingga panjang. Ini memberikan waktu masuk yang layak ketika SMA jangka pendek menarik kembali ke SMA jangka panjang. Dibandingkan dengan sistem rata-rata bergerak tunggal, probabilitas terjebak dalam koreksi jangka pendek berkurang.

Risiko yang terlibat dalam strategi ini didefinisikan dengan baik dan dibatasi. Rasio stop loss 10% membatasi ukuran kerugian maksimum. Juga filter rentang waktu menghindari perdagangan dalam periode waktu tertentu.

Analisis Risiko

Jika koreksi jangka pendek berlangsung terlalu lama atau amplitudo pullback terlalu besar, stop loss dapat dipicu sehingga mengakibatkan keluar paksa pada waktu yang tidak tepat. Ini memperkenalkan risiko kerugian.

Adaptifitas strategi ini di seluruh instrumen perdagangan terbatas. Untuk saham dengan volatilitas tinggi dan periode koreksi yang berkepanjangan, strategi ini cenderung mencapai stop loss dini sehingga menghasilkan kinerja yang buruk.

Selama koreksi besar di seluruh pasar, misalnya krisis keuangan, strategi ini dapat mengalami kerugian besar.

Arahan Optimasi

Lebih banyak sistem moving average dapat diperkenalkan untuk membentuk mekanisme penyaringan ganda. misalnya, menambahkan SMA 50 hari, posisi masuk hanya dipertimbangkan ketika harga berada di antara SMA 50 hari dan SMA 200 hari. ini ekstra menyaring saham dengan karakteristik tren yang lebih rendah.

Mekanisme stop loss dinamis dapat diimplementasikan. Secara khusus, setelah masuk, rasio stop loss disesuaikan berdasarkan volatilitas yang diamati alih-alih 10% tetap.

Indikator lain yang mengukur kondisi pasar juga dapat dimasukkan. Misalnya MACD, ketika MACD menunjukkan divergensi pasar, strategi ini dapat dinonaktifkan sementara untuk menghindari kerugian.

Kesimpulan

Pada akhirnya ini adalah strategi rata-rata bergerak multi timeframe yang khas. Ini memanfaatkan arah tren jangka menengah-panjang yang ditunjukkan oleh rata-rata bergerak jangka panjang, sambil memanfaatkan peluang pullback jangka pendek yang diungkapkan oleh rata-rata bergerak jangka pendek. Faktor risiko didefinisikan dan dibatasi dengan baik. Peningkatan lebih lanjut seperti filter tambahan, stop loss adaptif dan mekanisme waktu pasar dapat meningkatkan stabilitasnya.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 1h
basePeriod: 15m
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/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

Lebih banyak