Momentum Breakout dan Trend Setelah Strategi Kombinasi

Penulis:ChaoZhang, Tanggal: 2023-12-13 16:41:25
Tag:

img

Gambaran umum

Strategi ini merupakan strategi kombinasi yang mengintegrasikan indikator momentum, indikator trend berikut dan indikator rata-rata bergerak untuk mewujudkan trend berikut dan breakout entry/exit.

Prinsip Strategi

Strategi ini terdiri dari indikator berikut:

  1. Garis EMA: Gunakan EMA 25, 50, 100 dan 200 untuk menentukan tren utama. Ketika EMA25 melintasi di atas EMA50 dan EMA100 melintasi di atas EMA200, itu adalah tren naik, jika tidak, itu adalah tren turun.

  2. Supertrend trend following indicator: Parameter adalah Factor 3 dan ATR 10 untuk menilai apakah harga saat ini berada dalam tren naik atau turun.

  3. Indikator momentum stochastic: %K 8 dan %D 3 untuk menentukan apakah Stochastic menghasilkan golden cross atau dead cross. Ketika garis %K melintasi garis %D dari bawah, itu adalah sinyal golden cross, dan sebaliknya untuk dead cross.

Strategi beli adalah: EMA menunjukkan uptrend + Supertrend menunjukkan uptrend + Stochastic golden cross.
Strategi jual adalah: EMA menunjukkan downtrend + Supertrend menunjukkan downtrend + Stochastic dead cross.

Strategi ini mengintegrasikan indikator tren, momentum dan breakout untuk menentukan pergerakan pasar dan titik perdagangan secara andal.

Analisis Keuntungan

Keuntungan utama dari strategi ini adalah:

  1. Menggabungkan beberapa indikator meningkatkan ketahanan dan menyaring keluar palsu breakouts secara efektif.

  2. Menambahkan indikator momentum dapat menemukan titik balik lebih awal.

  3. Parameter yang dapat disesuaikan sesuai dengan lingkungan pasar yang berbeda.

  4. Membuat pengaturan stop loss dan take profit yang relatif efisien.

  5. Berfungsi baik ketika backtested pada jangka waktu yang panjang seperti setiap hari.

Analisis Risiko

Ada juga beberapa risiko:

  1. Pengaturan parameter yang tidak benar dapat menyebabkan perdagangan yang terlalu sering atau sinyal yang tidak stabil.

  2. Masih bisa ada kesalahan penilaian dalam waktu. indikator filter lebih dapat ditambahkan.

  3. Stop loss yang ditetapkan pada ekstrim Stochastic mungkin terlalu dekat.

  4. Data backtest yang tidak cukup dapat menyebabkan bias dalam penyesuaian parameter.

Arahan Optimasi

Strategi dapat dioptimalkan dengan cara berikut:

  1. Uji lebih banyak set parameter untuk menemukan optimal. misalnya menyesuaikan Supertrend Factor.

  2. Tambahkan lebih banyak indikator filter seperti energi atau volatilitas untuk mengurangi penilaian yang salah.

  3. Uji cara stop loss yang berbeda, misalnya stop loss berdasarkan persentase.

  4. Mengoptimalkan mengambil keuntungan, seperti trailing stop untuk mengunci lebih banyak keuntungan.

  5. Memperluas ruang lingkup, beradaptasi dengan lebih banyak produk atau jangka waktu yang lebih panjang.

Kesimpulan

Strategi ini memiliki logika yang jelas dan pilihan indikator yang masuk akal. Strategi ini mewujudkan tren mengikuti dan momentum breakout trading dengan hasil backtest yang baik. Namun masih ada ruang untuk optimasi, misalnya penyesuaian parameter, menambahkan filter, meningkatkan stop dan mengambil keuntungan. Optimasi multi-dimensi dapat membuat strategi lebih kuat.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-06 07:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Supertrend + Stoch Strategy", overlay=true)

// ---inputs---
pl = input(1.5, title="P/L", minval=0.1)
lossPercentage = input(1, title="Loss Percentage", minval=1, maxval=100)
atrPeriod = input(10, "ATR Length")
factor = input(3, "Supertrend Factor")
periodK = input(8, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
ema1l = input(25, title="EMA 1 Length", minval=1)
ema2l = input(50, title="EMA 2 Length", minval=1)
ema3l = input(100, title="EMA 3 Length", minval=1)
ema4l = input(200, title="EMA 4 Length", minval=1)

// ---lines---
ema1 = ema(close, ema1l)
ema2 = ema(close, ema2l)
ema3 = ema(close, ema3l)
ema4 = ema(close, ema4l)
trendUpper = ema1 > ema2 and ema3 > ema4
trendLower = ema1 < ema2 and ema3 < ema4

[supertrend, direction] = supertrend(factor, atrPeriod)
supertrendUpper = direction < 0
supertrendLower = direction > 0

k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
stochCrossOver = crossover(k, d)
stochCrossUnder = crossunder(k, d)

// ---plot---
plot(ema1, color=color.green)
plot(ema2, color=color.orange)
plot(ema3, color=color.blue)
plot(ema4, color=color.purple)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 95), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 95), fillgaps=false)

// ---stop place compute---
edge = 0.  // periodly high/low
edge := stochCrossOver ? high : stochCrossUnder ? low : k > d ? max(edge[1], high) : k < d ? min(edge[1], low) : edge[1]

// plot(edge)

// ---trade condition---
// longCond = trendUpper and supertrendUpper and stochCrossOver
// shortCond = trendLower and supertrendLower and stochCrossUnder
longCond = trendUpper and supertrendUpper and stochCrossOver and strategy.position_size == 0
shortCond = trendLower and supertrendLower and stochCrossUnder and strategy.position_size == 0

// ---stop & take---
stop = 0.
stop := nz(stop[1], stop)
take = 0.
take := nz(take[1], take)

if longCond
    stop := edge[1]
    take := close + (close - stop) * pl
if shortCond
    stop := edge[1]
    take := close - (stop - close) * pl

// ---trade---
qty = strategy.equity / abs(stop - close) / 100 * lossPercentage

strategy.entry("Buy", strategy.long, when=longCond, qty=qty)
strategy.exit("Close Buy","Buy", limit=take, stop=stop)

strategy.entry("Sell", strategy.short, when=shortCond, qty=qty)
strategy.exit("Close Sell","Sell", limit=take, stop=stop)

stopLine = plot(strategy.position_size != 0 ? stop : na, color=color.red, style=plot.style_linebr)
takeLine = plot(strategy.position_size != 0 ? take : na, color=color.green, style=plot.style_linebr)
entryLine = plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.blue, style=plot.style_linebr)
fill(entryLine, stopLine, color.new(color.red, 90), fillgaps=false)
fill(entryLine, takeLine, color.new(color.green, 90), fillgaps=false)

Lebih banyak