Strategi Penembusan Saluran Berosilasi

Penulis:ChaoZhang, Tanggal: 2023-11-15 16:01:09
Tag:

img

Gambaran umum

Ini adalah strategi perdagangan breakout berdasarkan indikator saluran. Ini memanfaatkan karakteristik osilasi band saluran untuk pergi panjang ketika harga pecah di atas band atas dan pergi pendek ketika pecah di bawah band bawah.

Logika Strategi

Strategi pertama menggunakan SMA untuk menghitung garis tengah saluran. Band atas ditetapkan sebagai garis tengah ditambah nilai parameter, dan band bawah adalah garis tengah dikurangi nilai parameter, membentuk saluran harga. Kemudian menilai apakah harga keluar dari band atas atau bawah, dikombinasikan dengan lonjakan volume perdagangan sebagai sinyal pembukaan. Ketika harga jatuh kembali ke saluran, itu berfungsi sebagai sinyal penutupan.

Secara khusus, logika perdagangan adalah sebagai berikut:

  1. Menghitung garis tengah: SMA (dekat, N)

  2. Band atas: garis tengah + nilai parameter

  3. Band bawah: garis tengah - nilai parameter

  4. Ketika harga pecah di atas band atas, jika volume perdagangan lebih dari 2x periode sebelumnya, pergi panjang.

  5. Ketika harga jatuh kembali ke saluran, tutup posisi panjang.

  6. Ketika harga keluar di bawah band bawah, jika volume perdagangan lebih dari 2x periode sebelumnya, pergi pendek.

  7. Ketika harga jatuh kembali ke saluran, tutup posisi pendek.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Menggunakan indikator saluran dapat secara efektif melacak tren harga.

  2. Menggabungkan dengan lonjakan volume perdagangan menyaring breakout palsu dengan baik.

  3. Kembali ke saluran berfungsi sebagai mekanisme stop loss dan membatasi kerugian per perdagangan.

  4. Karakteristik osilasi cocok menangkap tren jangka menengah.

  5. Logika sederhana membuatnya mudah dipahami dan diterapkan.

Analisis Risiko

Ada juga beberapa risiko:

  1. Berturut-turut perdagangan arah yang sama ketika harga menempel di satu sisi saluran untuk panjang, meningkatkan risiko kerugian.

  2. Pengaturan parameter saluran yang tidak benar dapat menyebabkan sinyal palsu yang berlebihan.

  3. Kriteria yang salah untuk lonjakan volume perdagangan mungkin melewatkan sinyal breakout yang sebenarnya.

  4. Mekanisme stop loss mungkin terlalu konservatif, kehilangan gerakan yang lebih besar.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter saluran agar sesuai dengan karakteristik pasar yang berbeda.

  2. Meningkatkan kriteria posisi terbuka, seperti mempertimbangkan MA crossover atau pola candlestick, untuk menghindari breakout palsu.

  3. Mengoptimalkan mekanisme stop loss, memungkinkan jangkauan stop loss yang lebih luas untuk menghindari keluar prematur.

  4. Tambahkan aturan ukuran posisi untuk menyesuaikan ukuran posisi dan pemanfaatan modal berdasarkan kondisi pasar.

  5. Masukkan lebih banyak indikator untuk menentukan arah tren secara keseluruhan, menghindari perdagangan melawan tren utama.

Ringkasan

Secara singkat, ini adalah strategi tren yang sederhana dan praktis. Dengan memanfaatkan osilasi saluran, ini dapat secara efektif menangkap tren jangka menengah. Tetapi penyesuaian parameter diperlukan untuk menyesuaikan pasar yang berbeda, dan risiko harus dipantau. Optimasi lebih lanjut dengan lebih banyak indikator dan teknik dapat meningkatkan stabilitas dan profitabilitasnya.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Copyright, 2022, Cache_that_pass.  You are free to use this script however you see fit and reproduce it in any manner.

//@version=5

            //////  Name the strategy between the 2 quotation marks.  Consider setting commission type and value in strategy header to match exchanges rates. //////

strategy("Oscillating SSL Channel Strategy", "O-SSL Strat", overlay=true, pyramiding=1, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100, calc_on_order_fills=true)



            //////  Inputs and calculations used by script  //////

period = input(title='Period', defval=25)
len = input(title='Period', defval=25)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

            //////  Show me the money  //////

plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))


            //////  Trade execution logic  //////  
            
//pseudo-code//
        //Go long when high (or maybe close) breaks above the sslUp and volume is 2x or > Volume[1] and sslUp > sslDown
        //Close the above longs when sslUp crosses under sslDown (or set takeprofit and stop loss exits)
        //
        //Go short when low is lower than the sslUp and volume is 2x or > Volume[1] and sslDown > sslUp
        //Close shorts when sslDown crosses under sslUp

longCondition1 = (sslUp > sslDown)
longCondition2 = ta.crossover(high, sslUp)
//longCondition3 = (volume >= (volume[1]*1.89))
longCondition = ((longCondition1) and (longCondition2))// and (longCondition3))

longExit = ta.crossunder(sslUp, sslDown)

            //////  Bring It  //////
if (longCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (longExit)
    strategy.close("Bring It", comment="Sling It")


shortCondition1 = (sslDown) > (sslUp)
shortCondition2 = ta.crossunder(low, sslUp)
//shortCondition3 = (volume >= (volume[1]*1.89))
shortCondition = ((shortCondition1) and (shortCondition2))// and (shortCondition3))

shortExit = ta.crossunder(sslDown, sslUp)

            //////  Bring It  //////
if (shortCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (shortExit)
    strategy.close("Bring It", comment="Sling It")

            //////  Sling It  //////
if (shortCondition)
    strategy.entry("Sling It", strategy.short)

            //////  Bling It  //////
if (shortExit)
    strategy.close("Sling It", comment="Bring It")



Lebih banyak