Strategi Perdagangan Saluran Supertrend Adaptif

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

Gambaran umum

Strategi ini membangun saluran supertrend dua lapisan dan menghasilkan sinyal perdagangan ketika harga menembus saluran. Ini juga menyesuaikan lebar saluran menggunakan volatilitas harga untuk efek adaptif.

Logika Strategi

  1. Menghitung deviasi standar harga dan volatilitas ATR, menggunakan volatilitas untuk menyesuaikan lebar saluran.

  2. Membangun saluran supertrend dua lapisan, dengan lapisan dalam lebih sensitif dan lapisan luar lebih stabil.

  3. Menghasilkan sinyal beli/jual ketika harga melanggar saluran dalam atau luar.

  4. Struktur saluran ganda membantu menyaring beberapa penyebaran palsu.

  5. Volatilitas ATR menyesuaikan lebar saluran, lebih luas ketika volatilitas melonjak untuk efek adaptif.

Keuntungan

  1. Saluran Supertrend sederhana dan efektif dalam melacak tren.

  2. Saluran ganda menyaring penyebaran palsu dan meningkatkan kualitas sinyal.

  3. Penyesuaian adaptasi volatilitas membuat saluran sesuai dengan lingkungan pasar yang berbeda.

  4. Mudah diterapkan dengan pengaturan parameter sederhana.

  5. Saluran dan breakout yang ditampilkan membentuk sinyal perdagangan yang intuitif.

Risiko

  1. Sinyal breakout dapat menghasilkan sinyal palsu yang mengakibatkan kerugian yang tidak perlu.

  2. Ini gagal menentukan arah tren, risiko perdagangan kontra-tren.

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

  4. Optimasi parameter yang tidak benar menyebabkan overfit.

  5. Sebagai tren mengikuti strategi, ia berjuang di pasar rentang terikat.

Peningkatan

  1. Parameter uji dampak pada efek adaptasi.

  2. Masukkan MA untuk menentukan tren utama.

  3. Mengoptimalkan konfirmasi kebocoran untuk menghindari kebocoran palsu.

  4. Tambahkan stop loss ke limit loss per trade.

  5. Evaluasi penyesuaian saluran pada frekuensi perdagangan.

  6. Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.

Kesimpulan

Strategi ini menggunakan saluran supertrend ganda adaptif untuk menangkap tren harga. Ini sederhana dan intuitif dalam melacak tren. Tetapi risiko termasuk pecah palsu dan arah tren yang salah. Penyesuaian parameter lebih lanjut dan mekanisme tambahan dapat meningkatkan kinerja strategi, menjadikannya sistem trend berikut yang kuat.


/*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 banyak