Strategi Perdagangan Saluran Supertrend Beradaptasi

Penulis:ChaoZhang, Tarikh: 2023-09-20 15:17:51
Tag:

Ringkasan

Strategi ini membina saluran supertrend dua lapisan dan menghasilkan isyarat perdagangan apabila harga memecahkan saluran. Ia juga menyesuaikan lebar saluran menggunakan turun naik harga untuk kesan penyesuaian.

Logika Strategi

  1. Mengira penyesuaian standard harga dan volatiliti ATR, menggunakan volatiliti untuk menyesuaikan lebar saluran.

  2. Membina saluran super trend berlapis dua, dengan lapisan dalaman lebih sensitif dan lapisan luar lebih stabil.

  3. Menghasilkan isyarat beli/jual apabila harga memecahkan saluran dalaman atau luar.

  4. Struktur saluran berganda membantu menapis beberapa penyebaran palsu.

  5. Volatiliti ATR menyesuaikan lebar saluran, lebih luas apabila turun naik untuk kesan penyesuaian.

Kelebihan

  1. Saluran Supertrend adalah mudah dan berkesan dalam mengesan trend.

  2. Saluran berganda menapis gangguan palsu dan meningkatkan kualiti isyarat.

  3. Penyesuaian penyesuaian turun naik menjadikan saluran sesuai dengan persekitaran pasaran yang berbeza.

  4. Mudah untuk dilaksanakan dengan penyesuaian parameter yang mudah.

  5. Saluran dan penembusan yang dilihat membentuk isyarat perdagangan intuitif.

Risiko

  1. Isyarat pecah boleh menghasilkan isyarat palsu yang mengakibatkan kerugian yang tidak perlu.

  2. Ia gagal menentukan arah trend, risiko perdagangan kontra-trend.

  3. Penyesuaian penyesuaian mungkin terlalu sensitif, dengan penyesuaian berlebihan.

  4. Pengoptimuman parameter yang tidak betul membawa kepada pemasangan berlebihan.

  5. Sebagai trend mengikuti strategi, ia berjuang dalam pasaran julat terikat.

Peningkatan

  1. Parameter ujian kesan terhadap kesan penyesuaian.

  2. Menggabungkan MA untuk menentukan trend utama.

  3. Mengoptimumkan pengesahan untuk mengelakkan kebocoran palsu.

  4. Tambah stop loss kepada had kerugian setiap perdagangan.

  5. Menilai penyesuaian saluran pada kekerapan perdagangan.

  6. Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.

Kesimpulan

Strategi ini menggunakan saluran supertrend berganda adaptif untuk menangkap trend harga. Ia mudah dan intuitif dalam mengesan trend. Tetapi risiko termasuk pecah palsu dan arah trend yang tidak betul. Penyesuaian parameter dan mekanisme tambahan yang lebih lanjut dapat meningkatkan prestasi strategi, menjadikannya sistem trend berikut yang mantap.


/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000)

//Inputs
multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1)
period = input(title="Period", type=input.integer, step=1, defval=10, minval=1)
SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false)


////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

dev = stdev(close, period)
stdDev = (dev / close) * 100 + 1
MultDev = SelfAdjust ? multi * stdDev : multi

up_lev1 = hl2 - MultDev * atr(period)
dn_lev1 = hl2 + MultDev * atr(period)
up_lev2 = hl2 - (MultDev * 2 * atr(period))
dn_lev2 = hl2 + (MultDev * 2 * atr(period))

up_trend1 = 0.0
up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1
up_trend2 = 0.0
up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2

down_trend1 = 0.0
down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1
down_trend2 = 0.0
down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2

trend1 = 0
trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1)
trend2 = 0
trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1)

st_line1 = trend1 == 1 ? up_trend1 : down_trend1
st_line2 = trend2 == 1 ? up_trend2 : down_trend2

// Plotting
plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1")
plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2")
fill(plot1, plot2, color = color.aqua, title = "Cloud")

buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1
sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1

if(buy and time_cond)
    strategy.entry("long", long = true , comment="long")

if (close < st_line1 and time_cond or close < st_line2 and time_cond)
    strategy.close("long")
    
if (not time_cond)
    strategy.close_all()





 


Lebih lanjut