Strategi ini mengenal pasti peluang panjang menggunakan penunjuk SuperTrend. Ia menggunakan ATR dan pengganda untuk menentukan tahap sokongan dinamik untuk kemasukan panjang.
Band atas dan bawah dikira berdasarkan tempoh ATR, pengganda.
Trend semasa dikesan, dengan 1 untuk uptrend dan -1 untuk downtrend. Harga pecah di atas jalur atas beralih trend dari bawah ke atas, menjana isyarat beli. Berpecah di bawah jalur bawah beralih dari atas ke bawah, menjana isyarat jual.
Purata bergerak ditambahkan sebagai penapis trend. Beli hanya jika harga di atas MA apabila memecahkan di atas band atas. Jual hanya jika harga di bawah MA apabila memecahkan di bawah band bawah. Ini mengelakkan pecah palsu.
Pembantu visual menonjolkan trend, isyarat dan lain-lain untuk membantu pengambilan keputusan.
Kelebihan strategi ini:
SuperTrend secara dinamik mengesan perubahan harga dan mencerminkan perubahan trend tepat pada masanya.
Stop loss ATR menyesuaikan berhenti berdasarkan turun naik pasaran, membantu mengunci keuntungan.
Penapis MA menghapuskan isyarat palsu dari bunyi bising di pasaran yang berbeza.
Reka bentuk visual secara intuitif membentangkan mekanisme strategi dan keadaan pasaran.
Hanya pembalikan trend perdagangan menjadikannya sesuai untuk memegang jangka panjang.
Risiko utama ialah:
SuperTrend sensitif kepada parameter. Penyesuaian band yang kerap boleh menyebabkan perdagangan berlebihan.
Di pasaran yang bergelombang, berhenti boleh mencetuskan kerap.
Tiada pertimbangan kos dagangan.
Tiada stop loss bermakna risiko pengeluaran yang tinggi.
Penapis trend mungkin terlepas beberapa peluang.
Risiko boleh dikurangkan dengan:
Mengoptimumkan parameter ATR ke frekuensi penyesuaian jalur yang lebih rendah.
Menambah penapisan bar yang setara untuk mengelakkan berhenti oleh perubahan kecil frekuensi tinggi.
Melaksanakan stop loss dan mengambil keuntungan untuk melindungi keuntungan.
Penyesuaian tempoh purata bergerak untuk kesan penapisan keseimbangan.
Mengoptimumkan pengurusan wang untuk mengurangkan kesan kos perdagangan.
Strategi ini boleh ditingkatkan dalam aspek berikut:
Uji sumber harga yang berbeza seperti dekat, tinggi dll.
Cuba penunjuk stop loss dinamik lain seperti Chandelier Exit.
Tambah saiz kedudukan untuk mengoptimumkan penggunaan modal.
Menggabungkan penunjuk turun naik untuk memperbaiki entri.
Melaksanakan stop loss dan mengambil keuntungan untuk mengawal risiko.
Sesuaikan parameter untuk pasaran yang berbeza.
meneroka pembelajaran mesin untuk pengoptimuman parameter.
Gabungkan penunjuk lain untuk meningkatkan ketepatan penapis.
Strategi ini menggunakan SuperTrend dengan berhenti dinamik untuk menentukan trend, dan menambah penapis MA untuk mengenal pasti entri panjang. Reka bentuk visual memudahkan operasi. Dengan parameter yang dioptimumkan dan ciri tambahan, ia boleh menjadi strategi perdagangan jangka panjang yang mantap.
/*backtest start: 2020-09-13 00:00:00 end: 2023-09-19 00:00:00 period: 3d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr = changeATR ? atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = nz(up[1], up) up := close[1] > up1 ? max(up, up1) : up dn = src + (Multiplier * atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend // Moving Average as Trend Filter periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20) src_ma = input(title="Moving Average Source", type=input.source, defval=close) ma = sma(src_ma, periodes_ma) upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 and close > ma plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0)) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0)) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 and close < ma plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0)) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0)) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor) FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 999) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 999) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = buySignal if (longCondition) strategy.entry("BUY", strategy.long, when = window()) shortCondition = sellSignal if (shortCondition) strategy.close("BUY") strategy.entry("SELL", strategy.short, when = window()) buy1 = barssince(buySignal) sell1 = barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(barcoloring ? color1 : na)