Strategi perdagangan reversal volatility breakout

Penulis:ChaoZhang, Tanggal: 2024-02-19 15:12:44
Tag:

img

Gambaran umum

Strategi Trading Reversal Volatility Breakout adalah strategi trading reversal yang melacak saluran harga dengan titik stop profit dan stop loss bergerak adaptif.

Logika Strategi

Strategi ini pertama-tama menggunakan indikator Wilder's Average True Range (ATR) untuk mengukur volatilitas harga. Kemudian menghitung Average Range Constant (ARC) berdasarkan nilai ATR. ARC mewakili setengah lebar saluran harga. Selanjutnya, band atas dan bawah saluran dihitung sebagai titik stop profit dan stop loss, juga dikenal sebagai titik SAR. Ketika harga melanggar band atas, posisi pendek dibuka. Ketika harga melanggar band bawah, posisi panjang dibuka.

Secara khusus, ATR di atas N bar terakhir dihitung terlebih dahulu. ATR kemudian dikalikan dengan faktor untuk mendapatkan ARC, yang mengontrol lebar saluran harga. Menambahkan ARC ke harga penutupan tertinggi di atas N bar memberikan band atas saluran, atau SAR tinggi. Mengurangkan ARC dari harga penutupan terendah memberikan band bawah, atau SAR rendah. Jika harga ditutup di atas band atas, posisi pendek diambil. Jika harga ditutup di bawah band bawah, posisi panjang diambil.

Keuntungan

  1. Menggunakan volatilitas untuk menghitung saluran adaptif yang melacak perubahan pasar
  2. Reversal trading suit pasar reversal tren
  3. Mengubah kunci stop profit dan stop loss dalam keuntungan dan mengontrol risiko

Risiko

  1. Reversal trading cenderung terjebak, parameter perlu penyesuaian yang tepat
  2. Gerakan volatilitas yang tajam dapat menutup posisi lebih awal
  3. Parameter yang tidak tepat dapat menyebabkan overtrading

Solusi:

  1. Mengoptimalkan periode ATR dan faktor ARC untuk lebar saluran yang wajar
  2. Tambahkan filter tren untuk sinyal masuk
  3. Meningkatkan periode ATR untuk mengurangi frekuensi perdagangan

Peluang Peningkatan

  1. Mengoptimalkan periode ATR dan faktor ARC
  2. Tambahkan kondisi masuk seperti MACD
  3. Menggabungkan strategi stop loss

Kesimpulan

Strategi Trading Reversal Volatility Breakout menggunakan saluran untuk melacak perubahan harga dan membalikkan posisi ketika volatilitas memuncak. Ini bekerja dengan baik di pasar yang terikat rentang dengan pembalikan, menghasilkan pengembalian yang baik jika titik pembalikan diidentifikasi dengan akurat.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@author=LucF

// Volatility System [LucF]
// v1.0, 2019.04.14

// The Volatility System was created by Welles Wilder.
// It first appeared in his seminal masterpiece "New Concepts in Technical Trading Systems" (1978).
// He describes it on pp.23-26, in the chapter discussing the first presentation ever of the "Volatility Index",
// which later became known as ATR.
// Performance of the strategy usually increases with the time frame.
// Tuning of ATR length and, especially, the ARC factor, is key.

// This code runs as a strategy, which cannot generate alerts.
// If you want to use the alerts it must be converted to an indicator.
// To do so:
//      1. Swap the following 2 lines by commenting the first and uncommenting the second.
//      2. Comment out the last 4 lines containing the strategy() calls.
//      3. Save.
strategy(title="Volatility System by Wilder [LucF]", shorttitle="Volatility System [Strat]", overlay=true, precision=8, pyramiding=0, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// study("Volatility System by Wilder [LucF]", shorttitle="Volatility System", precision=8, overlay=true)

// -------------- Colors
MyGreenRaw = color(#00FF00,0),      MyGreenMedium = color(#00FF00,50),  MyGreenDark = color(#00FF00,75),    MyGreenDarkDark = color(#00FF00,92)
MyRedRaw = color(#FF0000,0),        MyRedMedium = color(#FF0000,30),    MyRedDark = color(#FF0000,75),      MyRedDarkDark = color(#FF0000,90)

// -------------- Inputs
LongsOnly = input(false,"Longs only")
ShortsOnly = input(false,"Shorts only")
AtrLength = input(9, "ATR length", minval=2)
ArcFactor = input(1.8, "ARC factor", minval=0, type=float,step=0.1)
ShowSAR = input(false, "Show all SARs (Stop & Reverse)")
HideSAR = input(false, "Hide all SARs")
ShowTriggers = input(false, "Show Entry/Exit triggers")
ShowTradedBackground = input(false, "Show Traded Background")

FromYear  = input(defval = 2000,    title = "From Year", minval = 1900)
FromMonth = input(defval = 1,      title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1,       title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999,    title = "To Year", minval = 1900)
ToMonth   = input(defval = 1,       title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1,       title = "To Day", minval = 1, maxval = 31)

// -------------- Date range filtering
FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00)
ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59)
TradeDateIsAllowed() => true

// -------------- Calculate Stop & Reverse (SAR) points using Average Range Constant (ARC)
Arc   = atr(AtrLength)*ArcFactor
SarLo = highest(close, AtrLength)-Arc
SarHi = lowest(close, AtrLength)+Arc

// -------------- Entries/Exits
InLong = false
InShort = false
EnterLong = TradeDateIsAllowed() and not InLong[1] and crossover(close, SarHi[1])
EnterShort = TradeDateIsAllowed() and not InShort[1] and crossunder(close, SarLo[1])
InLong := (InLong[1] and not EnterShort[1]) or (EnterLong[1] and not ShortsOnly)
InShort := (InShort[1] and not EnterLong[1]) or (EnterShort[1] and not LongsOnly)

// -------------- Plots
// SAR points
plot( not HideSAR and ((InShort or EnterLong) or ShowSAR)? SarHi:na, color=MyRedMedium, style=circles, linewidth=2, title="SAR High")
plot( not HideSAR and ((InLong or EnterShort) or ShowSAR)? SarLo:na, color=MyGreenMedium, style=circles, linewidth=2, title="SAR Low")
// Entry/Exit markers
plotshape( ShowTriggers and not ShortsOnly and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyGreenRaw, size=size.small, text="")
plotshape( ShowTriggers and not LongsOnly and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyRedRaw, size=size.small, text="")
// Exits when printing only longs or shorts
plotshape( ShowTriggers and ShortsOnly and InShort[1] and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyRedMedium, transp=70, size=size.small, text="")
plotshape( ShowTriggers and LongsOnly and InLong[1] and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyGreenMedium, transp=70, size=size.small, text="")
// Background
bgcolor( color=ShowTradedBackground? InLong and not ShortsOnly?MyGreenDarkDark: InShort and not LongsOnly? MyRedDarkDark:na:na)

// ---------- Alerts
alertcondition( EnterLong or EnterShort, title="1. Reverse", message="Reverse")
alertcondition( EnterLong, title="2. Long", message="Long")
alertcondition( EnterShort, title="3. Short", message="Short")

// ---------- Strategy reversals
strategy.entry("Long", strategy.long, when=EnterLong and not ShortsOnly)
strategy.entry("Short", strategy.short, when=EnterShort  and not LongsOnly)
strategy.close("Short", when=EnterLong and ShortsOnly)
strategy.close("Long", when=EnterShort and LongsOnly)


Lebih banyak