Sumber dimuat naik... memuat...

Schaff Trend Cycle Momentum Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-11-01 16:08:35
Tag:

img

Ringkasan

Strategi ini berdasarkan kepada penunjuk Siklus Trend Schaff, digabungkan dengan prinsip overbought dan oversold Stoch RSI, untuk menentukan dan mengikuti trend menggunakan metrik momentum. Ia pergi lama apabila harga keluar dari rantau oversold ke rantau overbought, dan pergi pendek apabila harga pecah dari rantau overbought ke rantau oversold. Strategi secara dinamik menyesuaikan kedudukan dengan menangkap perubahan dalam trend harga.

Logika Strategi

    1. Mengira MACD, di mana panjang pantas lalai adalah 23 dan panjang perlahan adalah 50. MACD mencerminkan perbezaan antara purata bergerak jangka pendek dan panjang untuk menilai momentum harga.
    1. Menggunakan Stoch RSI kepada MACD untuk membentuk nilai K, di mana Tempoh Kitaran lalai adalah 10, mencerminkan tahap overbought / oversold dari metrik momentum MACD.
    1. Ambil purata bergerak bertingkat K untuk membentuk D, di mana panjang %D lalai 1 adalah 3, untuk menghilangkan bunyi bising dari K.
    1. Mempakai Stoch RSI lagi kepada D untuk membentuk nilai STC awal, di mana default 2nd %D Length adalah 3, untuk mewujudkan isyarat overbought / oversold yang tepat.
    1. Ambil purata bergerak bertingkat STC awal untuk mendapatkan nilai STC akhir, dari 0-100. STC di atas 75 adalah overbought, di bawah 25 oversold.
    1. Pergi panjang apabila STC melintasi di atas 25 ke atas, dan pendek apabila STC melintasi ke bawah di atas 75.

Kelebihan

    1. Reka bentuk STC yang menggabungkan Stoch RSI dengan jelas mengenal pasti kawasan overbought / oversold, membentuk isyarat trend yang kuat.
    1. Penapisan RSI Stoch berganda secara berkesan menghapuskan pecah palsu.
    1. Julat 0-100 STC yang standard membolehkan isyarat perdagangan mekanikal yang mudah.
    1. Ujian belakang melaksanakan tanda pecah visual dan amaran popup teks untuk menangkap isyarat yang jelas dan intuitif.
    1. Parameter lalai yang dioptimumkan mengelakkan isyarat yang terlalu sensitif dan perdagangan yang tidak perlu.

Risiko

    1. STC sensitif kepada parameter. Koin dan jangka masa yang berbeza memerlukan penyesuaian parameter untuk memenuhi ciri pasaran.
    1. Strategi pelarian terdedah kepada perangkap, memerlukan berhenti untuk mengawal risiko.
    1. Kecairan palsu yang rendah boleh menghasilkan isyarat yang buruk, memerlukan penapis jumlah.
    1. STC sahaja risiko pembalikan. Pengesahan menggunakan faktor lain diperlukan.
    1. Tahap sokongan / rintangan utama harus dipantau untuk mengelakkan isyarat buruk.

Peluang Peningkatan

    1. Mengoptimumkan parameter MACD untuk tempoh dan duit syiling yang berbeza.
    1. Memperbaiki nilai Stoch RSI K dan D untuk meluruskan lengkung STC.
    1. Tambah penapis jumlah untuk mengelakkan kegagalan palsu kecairan yang rendah.
    1. Masukkan penunjuk tambahan untuk mengesahkan isyarat, contohnya Bollinger Bands.
    1. Tambah mekanisme berhenti seperti bergerak / ATR berhenti.
    1. Sesuaikan kemasukan, contohnya kemasukan pada penarikan balik selepas pecah untuk pengesahan trend.

Kesimpulan

Strategi Siklus Trend Schaff mengenal pasti overbought / oversold melalui metrik momentum untuk menentukan perubahan trend harga jangka pendek. Walaupun mudah dan boleh diselaraskan, ia berisiko perangkap. Pengesahan dan berhenti membantu pengoptimuman untuk trend yang kuat.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("Schaff Trend Cycle", shorttitle="STC Backtest", overlay=true)

fastLength = input(title="MACD Fast Length",  defval=23)
slowLength = input(title="MACD Slow Length",  defval=50)
cycleLength = input(title="Cycle Length",  defval=10)
d1Length = input(title="1st %D Length",  defval=3)
d2Length = input(title="2nd %D Length",  defval=3)
src = input(title="Source",  defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)

k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))

d = ema(k, d1Length)

kd = nz(fixnan(stoch(d, d, d, cycleLength)))

stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc

//stcColor = not highlightBreakouts ? (stc > stc[1] ? green : red) : #ff3013
//stcPlot = plot(stc, title="STC", color=stcColor, transp=0)

upper = input(75, defval=75)
lower = input(25, defval=25)

transparent = color(white, 100)

upperLevel = plot(upper, title="Upper", color=gray)
// hline(50, title="Middle", linestyle=dotted)
lowerLevel = plot(lower, title="Lower", color=gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? red : transparent

//fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
//fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)

long =  crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na

long_filt = long and not short
short_filt = short and not long

prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]

long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1

strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)

plotshape(crossover(stc, lower) ? lower : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=0)
plotshape(crossunder(stc, upper) ? upper : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=0)

alertcondition(long_final, "Long", message="Long")
alertcondition(short_final,"Short", message="Short")

plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)


Lebih lanjut