Strategi ini adalah strategi perdagangan kuantitatif yang menggabungkan indikator supertrend triple, indikator awan Ichimoku, indikator rata-rata rentang benar (ATR) dan rata-rata bergerak eksponensial (EMA).
Strategi ini didasarkan pada indikator supertrend tiga kali lipat. Indikator supertrend menentukan arah tren dengan membandingkan harga dengan rentang rata-rata yang sebenarnya dalam periode tertentu. Ketika harga berada di atas band atas, itu adalah sinyal bullish, dan ketika harga berada di bawah band bawah, itu adalah sinyal bearish. Strategi ini mengadopsi tiga indikator supertrend dengan parameter yang berbeda. Sinyal perdagangan dihasilkan ketika ketiganya memberikan sinyal beli atau jual pada saat yang sama.
Selain itu, ketebalan awan Ichimoku membantu menentukan kekuatan tren saat ini untuk menyaring beberapa sinyal palsu. Indikator ATR digunakan untuk mengatur stop loss. Indikator EMA mengkonfirmasi tren jangka menengah dan panjang.
Secara khusus, pergi panjang ketika harga berada di atas band atas dari ketiga indikator supertrend, dan pergi pendek ketika di bawah band bawah dari ketiga indikator. Juga mengharuskan harga berada di atas atau di bawah awan Ichimoku untuk menyaring sinyal yang tidak pasti. Stop loss ditetapkan pada harga masuk dikurangi nilai ATR untuk stop trailing dinamis.
Indikator supertrend triple dengan pengaturan yang berbeda dapat secara efektif menyaring kebisingan pasar dan menentukan arah tren dengan lebih akurat.
Awan Ichimoku menentukan kekuatan tren untuk menghindari kegagalan palsu.
EMA membantu dalam mengkonfirmasi arah tren jangka menengah dan panjang, memverifikasi sinyal dari supertrend, meningkatkan keandalan lebih lanjut.
Menggabungkan beberapa indikator, sinyal lebih dapat diandalkan karena mereka dapat memverifikasi satu sama lain ketika menentukan tren pasar.
Meskipun awan Ichimoku ditambahkan, masih ada risiko memasuki zona tidak valid jika ketebalan awan ditembus.
Ketika volatilitas tinggi, stop loss yang ditetapkan oleh ATR dapat dipicu secara langsung, sehingga meningkatkan tingkat kerugian.
Sinyal yang tidak valid dapat sering terjadi jika parameter supertrend ditetapkan secara tidak tepat. Banyak backtest diperlukan untuk menemukan kombinasi yang optimal.
Lebih banyak indikator seperti indeks volatilitas, Bollinger Bands dapat ditambahkan untuk membantu menyaring sinyal dan meningkatkan keandalan.
Meningkatkan perhitungan ATR untuk menyesuaikan rentang stop loss secara dinamis selama perubahan besar untuk menurunkan tingkat kerugian.
Tambahkan model pembelajaran mesin yang dilatih pada data historis untuk menilai sinyal perdagangan alih-alih pengaturan parameter manual.
Strategi ini menggabungkan empat bagian termasuk triple supertrend, Ichimoku cloud, ATR dan EMA. Sinyal diverifikasi di seluruh indikator saat menentukan tren pasar. Ichimoku cloud dan ATR mengendalikan risiko stop loss. EMA mengkonfirmasi tren jangka menengah dan jangka panjang. Sinyal dari strategi ini relatif dapat diandalkan untuk jangka menengah hingga jangka panjang. Stop loss dapat dioptimalkan lebih lanjut dan lebih banyak indikator pendukung dapat ditambahkan untuk mendapatkan kinerja strategi yang lebih baik.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true ) // float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100 // ichimoku Cloud conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku") basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku") laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku") displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = math.avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7, title="Leading Span A", display = display.none) p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a, title="Leading Span B", display = display.none) plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none) plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none) fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70)) // three supertrend //1 atrPeriod1 = input(10, "ATR Length1", group="SuperTrend") factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend") [supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1) supertrend1 := barstate.isfirst ? na : supertrend1 bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend1 = plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red, style = plot.style_linebr) //2 atrPeriod2 = input(11, "ATR Length2", group="SuperTrend") factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2) supertrend2 := barstate.isfirst ? na : supertrend2 bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend2 = plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red, style = plot.style_linebr) //3 atrPeriod3 = input(12, "ATR Length2", group="SuperTrend") factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3) supertrend3 := barstate.isfirst ? na : supertrend3 bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend3 = plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red, style = plot.style_linebr) // ATR lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR") smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR") ma_function(sourceATR, lengthATR) => switch smoothingATR "RMA" => ta.rma(sourceATR, lengthATR) "SMA" => ta.sma(sourceATR, lengthATR) "EMA" => ta.ema(sourceATR, lengthATR) => ta.wma(sourceATR, lengthATR) ATR = ma_function(ta.tr(true), lengthATR) plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none) // EMA lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA") srcEMA = input(close, title="Source of EMA", group="EMA") offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA") outEMA = ta.ema(srcEMA, lenEMA) plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none) ma(sourceEMA, lengthEMA, type) => switch type "SMA" => ta.sma(sourceEMA, lengthEMA) "EMA" => ta.ema(sourceEMA, lengthEMA) "SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA) "WMA" => ta.wma(sourceEMA, lengthEMA) "VWMA" => ta.vwma(sourceEMA, lengthEMA) typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA") smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA") smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA) plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none) //logic if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3) strategy.entry("L", strategy.long) else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR) strategy.entry("S", strategy.short) else strategy.close_all("C")