Supertrend dan Strategi Scalping CCI

Penulis:ChaoZhang, Tarikh: 2024-02-26 10:39:49
Tag:

img

Ringkasan

Strategi ini berdasarkan dua penunjuk Super Trend dengan tetapan parameter yang berbeza dan penunjuk CCI, yang bertujuan untuk menangkap turun naik harga jangka pendek untuk perdagangan frekuensi tinggi. Penunjuk Super Trend menilai arah trend secara dinamik dengan mengira ATR, sementara penunjuk CCI digunakan untuk menentukan sama ada pasaran terlalu banyak dibeli atau terlalu banyak dijual. Strategi menggabungkan kedua-duanya untuk membentuk isyarat perdagangan.

Logika Strategi

  • Gunakan 14 tempoh ATR untuk mengira Super Trend yang cepat, dengan faktor ditetapkan menjadi 3; gunakan 14 tempoh ATR untuk mengira Super Trend yang perlahan, dengan faktor ditetapkan menjadi 6. Super Trend yang cepat lebih sensitif dan dapat menangkap perubahan jangka pendek; Super Trend yang perlahan menentukan arah trend utama.

  • Apabila Super Trend yang cepat melintasi di bawah harga, dan Super Trend yang perlahan masih di atas harga, ia dinilai sebagai isyarat pembalikan yang mungkin untuk pergi lama; apabila Super Trend yang cepat melintasi di atas harga, dan Super Trend yang perlahan masih di bawah harga, ia dinilai sebagai isyarat pembalikan yang mungkin untuk pergi pendek.

  • Pada masa yang sama, gunakan CCI untuk menilai sama ada pasaran terlalu banyak dibeli atau terlalu banyak dijual. CCI di atas 100 menunjukkan pasaran terlalu banyak dibeli, sementara di bawah -100 bermaksud pasaran terlalu banyak dijual. Isyarat CCI digabungkan untuk menapis pecah palsu.

  • Kemungkinan penunjuk Super Trend mengeluarkan isyarat pembalikan adalah lebih tinggi apabila pasaran terlalu banyak dibeli atau terlalu banyak dijual.

Analisis Kelebihan

  • Menggabungkan Super Trend untuk menentukan titik pembalikan trend dan CCI untuk menilai keadaan overbought/oversold dapat menapis secara berkesan pecah palsu dan meningkatkan kualiti isyarat.

  • Penyeberangan Super Trend yang cepat dan perlahan membentuk isyarat perdagangan untuk mencapai kemasukan dan keluar frekuensi tinggi.

  • Parameter CCI dan parameter Super Trend boleh disesuaikan dengan fleksibel untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

  • Idea strategi adalah jelas dan mudah difahami, dan pelarasan parameter juga agak mudah.

Risiko dan Penyelesaian

  • Super Trend itu sendiri mempunyai kesan kelewatan, mungkin terlepas peluang pembalikan pertama.

  • CCI mempunyai risiko panggilan balik, dan turun naik yang berlebihan juga boleh menyebabkan perdagangan berulang.

  • Perdagangan frekuensi tinggi cenderung untuk meningkatkan kekerapan transaksi dan kos dagangan.

Arahan pengoptimuman

  • Gabungan parameter boleh dilalui dan dioptimumkan berdasarkan pengeluaran maksimum atau nisbah keuntungan / kerugian untuk mencari parameter yang optimum.

  • Kaedah pembelajaran mesin seperti Random Forest boleh digunakan untuk pemilihan ciri pada parameter untuk mencapai pengoptimuman parameter automatik.

  • Memeriksa mengehadkan jumlah maksimum kedudukan pembukaan dalam kitaran tertentu untuk mengawal risiko.

Kesimpulan

Strategi ini menggunakan sepenuhnya penunjuk Super Trend untuk menentukan titik pembalikan trend jangka pendek, ditambah dengan penunjuk CCI untuk menapis isyarat. Apabila tetapan parameter adalah munasabah, ia dapat mencapai perdagangan jangka pendek yang cekap. Tetapi juga perlu berhati-hati terhadap risiko yang timbul daripada perdagangan berlebihan, dan terus meningkatkan prestasi strategi melalui penyesuaian parameter dan pengoptimuman algoritma.


/*backtest
start: 2023-02-19 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend & CCI Strategy Scalp", overlay=true)

// SuperTrend Settings
atrLength1 = input(14, "ATR Length 1")
factor1 = input(3.0, "Factor 1" )
atrLength2 = input(14, "ATR Length 2")
factor2 = input(6.0, "Factor 2")
 // Calculate SuperTrend 1
[superTrend1, direction1] = ta.supertrend(factor1, atrLength1)

// // Calculate SuperTrend 2
[superTrend2, direction2] = ta.supertrend(factor2, atrLength2)

// superTrend1 := barstate.isfirst ? na : superTrend1
// 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)
// bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle1, upTrend1,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle1, downTrend1, color.new(color.red,   90), fillgaps = false)

// superTrend2 := barstate.isfirst ? na : superTrend2
// upTrend2 =    plot(direction1 < 0 ? superTrend2 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
// downTrend2 =  plot(direction1 < 0 ? na : superTrend2, "Down Trend", color = color.red,   style = plot.style_linebr)
// bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle2, upTrend2,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle2, downTrend2, color.new(color.red,   90), fillgaps = false)
// CCI Settings
//cciLength = input.int(14, title="CCI Length")
cciLevel = input.int(100, title="CCI Level")

// Calculate CCI
length = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
//plot(cci, "CCI", color=#2962FF)
//band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
//hline(0, "Middle Band", color=color.new(#787B86, 50))
//band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
//fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
//plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


// Entry conditions
longCondition = superTrend1 > close and superTrend2 < close and smoothingLine < -100
shortCondition = superTrend1 < close and superTrend2 > close and smoothingLine > 100

/// Initialize variables to track trade direction
var bool isLong = na
var bool isShort = na

// Strategy entry and exit
if (longCondition)
    strategy.entry("Long", strategy.long)
    isLong := true
    isShort := false
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    isShort := true
    isLong := false

// Close Long positions
if (isLong)
    strategy.close("Long", when = superTrend1 < close or superTrend2 > close or cci > 100)

// Close Short positions
if (isShort)
    strategy.close("Short", when = superTrend1 > close or superTrend2 < close or cci < -100)



// Plotting
plot(superTrend1, color=color.blue, title="SuperTrend 1")
plot(superTrend2, color=color.red, title="SuperTrend 2")
//plot(cci, color=color.orange, title="CCI")



Lebih lanjut