Siklus Tren Schaff dengan Strategi Crossover Rata-rata Bergerak Ganda

Penulis:ChaoZhang, Tanggal: 2023-12-12 17:43:19
Tag:

img

Gambaran umum

Strategi ini disebut Schaff Trend Cycle with Double Moving Average Crossover Strategy. Ide utamanya adalah untuk menentukan posisi panjang dan pendek berdasarkan indikator Schaff Trend Cycle (STC) dan crossover rata-rata bergerak ganda. Secara khusus, ketika STC keluar dari area overbought atau oversold, harga berada di atas rata-rata bergerak eksponensial cepat, dan EMA cepat berada di atas EMA lambat, posisi panjang dibuka. Sebaliknya, posisi pendek dibuka.

Logika Strategi

Strategi ini terutama didasarkan pada dua indikator teknis:

  1. Indikator Tren: Indikator STC untuk menentukan arah tren. STC mencakup garis indikator MACD, Stochastic, dan STC. Penembusan ke atas dari zona 0-25 menandakan tren bullish, sementara penembusan ke bawah dari zona 75-100 menandakan tren bearish.

  2. Moving average crossover: Rata-rata bergerak sederhana cepat (periode default 35) melintasi di atas / di bawah SMA lambat (periode default 200). Sinyal bullish dipicu ketika SMA cepat melintasi di atas SMA lambat. Sinyal bearish dipicu pada crossover sebaliknya.

Logika sinyal perdagangan didefinisikan sebagai berikut:

  1. Sinyal panjang: STC pecah di atas garis 25, SMA cepat berada di atas SMA lambat, dan harga penutupan berada di atas SMA cepat.

  2. Sinyal pendek: STC pecah di bawah garis 75, SMA cepat berada di bawah SMA lambat, dan harga penutupan berada di bawah SMA cepat.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. STC menentukan tren keseluruhan, sementara MAs ganda menghasilkan sinyal masuk tertentu.

  2. Periode rata-rata bergerak yang dapat disesuaikan Periode MA dapat dioptimalkan untuk kondisi pasar yang berbeda.

  3. STC mengidentifikasi tingkat overbought / oversold untuk menghindari membeli atas dan menjual bawah. target berhenti menetapkan 400 poin profit / loss range.

Analisis Risiko

Ada beberapa risiko yang harus dipertimbangkan:

  1. Potensi untuk STC palsu breakouts.

  2. Lebih banyak sinyal palsu dari penyeberangan MA.

  3. Hanya berdagang satu arah pada suatu waktu membatasi ruang untuk posisi terbuka pertimbangkan untuk mengizinkan perdagangan dua arah

  4. Tidak ada penanganan risiko spread dalam margin FX trading.

Optimalisasi

Jalur optimasi yang mungkin termasuk:

  1. Sesuaikan parameter STC overbought/oversold.

  2. Mengoptimalkan periode MA untuk meningkatkan keandalan sinyal crossover.

  3. Tambahkan filter tambahan seperti Bollinger Bands untuk mengurangi perdagangan breakout palsu.

  4. Menerapkan logika perdagangan dua arah untuk meningkatkan kapasitas.

  5. Tambahkan logika stop loss untuk mengendalikan kerugian per perdagangan.

Kesimpulan

Secara singkat, strategi ini menggabungkan indikator trend dan moving average crossover untuk menentukan arah tren dan waktu entri. Dengan kontrol risiko yang tepat, dapat mencapai pengembalian yang baik. Logika yang mudah membuatnya mudah dipahami dan dioptimalkan di berbagai kondisi pasar, sangat cocok untuk pemula.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")

fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.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] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)

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

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

fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)

ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)

bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1

if (bullbuy)
    strategy.entry("Riposte", strategy.long, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

if (bearsell)
    strategy.entry("Riposte", strategy.short, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

//plotshape(bullbuy,  title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell,  title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
















Lebih banyak