Strategi kombinasi momentum breakout dan trend following


Tanggal Pembuatan: 2023-12-13 16:41:25 Akhirnya memodifikasi: 2023-12-13 16:41:25
menyalin: 0 Jumlah klik: 622
1
fokus pada
1621
Pengikut

Strategi kombinasi momentum breakout dan trend following

Ringkasan

Strategi ini adalah strategi kombinasi, yang menggabungkan indikator momentum, indikator pelacakan tren, dan indikator rata-rata, untuk mencapai trend tracking dan breakout buy/sell. Terutama melalui kombinasi indikator Stochastic dan indikator Supertrend untuk menentukan waktu buy/sell, dengan bantuan EMA rata-rata untuk menentukan tren utama pasar.

Prinsip Strategi

Strategi ini terdiri dari beberapa indikator:

  1. EMA rata-rata: menggunakan EMA 25, 50, 100 dan 200 empat garis rata-rata untuk menilai tren utama. EMA25 di atas EMA50 dan EMA100 di atas EMA200 adalah tren naik, jika tidak, tren turun.

  2. Indikator pelacakan tren Supertrend: Parameter adalah Factor 3 dan ATR 10, untuk menentukan apakah harga saat ini berada dalam tren naik atau turun. Ketika Supertrend berwarna hijau berarti tren naik, merah berarti tren turun.

  3. Stochastic momentum indicator: %K 8 dan %D 3, menilai apakah Stochastic menghasilkan golden fork atau dead fork. Ketika %K line melintasi %D line dari bawah, itu adalah golden fork signal, sebaliknya dead fork signal.

Strategi pembelian adalah: EMA menunjukkan tren naik + Supertrend menunjukkan tren naik + Stochastic Gold Forks. Strategi jual adalah: EMA menunjukkan tren turun + Supertrend menunjukkan tren turun + Stochastic dead fork time 。

Strategi ini menggabungkan tiga indikator, yaitu tren, momentum, dan breakout, untuk memberikan penilaian yang lebih terpercaya tentang pergerakan pasar dan titik jual beli.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan utama:

  1. Dengan kombinasi berbagai indikator, penilaian yang lebih kuat, dapat secara efektif memfilter terobosan palsu.

  2. Penambahan indikator momentum dapat menentukan titik balik lebih awal.

  3. Parameter yang dapat disesuaikan untuk lingkungan pasar yang berbeda.

  4. Pengaturan Stop Loss dan Stop Stop yang relatif efisien.

  5. Bisa dilakukan pada siklus tinggi seperti sinar matahari, lebih efektif.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Setting parameter yang tidak tepat dapat menyebabkan frekuensi transaksi atau sinyal tidak stabil. Parameter perlu disesuaikan.

  2. Ada kemungkinan kesalahan dalam memilih waktu. Anda dapat mempertimbangkan untuk menambahkan lebih banyak indikator gelombang.

  3. Stop loss ditetapkan sebagai titik ekstrim dari indikator Stochastic, mungkin terlalu dekat, dan perlu dipertimbangkan untuk melonggarkan dengan tepat.

  4. Data retesting tidak mencukupi, dapat mempengaruhi parameters fit, harus memperluas periode retesting.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Uji lebih banyak kombinasi parameter untuk menemukan parameter yang optimal. Misalnya, menyesuaikan parameter Factor dari Supertrend.

  2. Menambahkan lebih banyak indikator gelombang filter, seperti indikator energi, indikator tingkat fluktuasi, dan lain-lain, untuk mengurangi kemungkinan kesalahan penilaian.

  3. Anda dapat menguji berbagai cara untuk menghentikan kerugian, misalnya dengan menetapkan persentase tertentu dari stop loss pada titik ekstrim.

  4. Mengoptimalkan cara stop loss, seperti mempertimbangkan stop loss dinamis, untuk mengunci lebih banyak keuntungan.

  5. Memperluas jangkauan strategi, seperti mencoba untuk menyesuaikan lebih banyak varietas perdagangan, atau mencoba untuk digunakan dalam siklus yang lebih tinggi.

Meringkaskan

Strategi ini memiliki konsep yang jelas, pilihan indikator yang masuk akal, dan memungkinkan untuk melacak tren dan melakukan perdagangan yang lebih baik. Namun, masih ada ruang untuk pengoptimalan. Dengan penyesuaian parameter, menambahkan lebih banyak indikator gelombang, dan memperbaiki metode stop loss, Anda dapat membuat strategi lebih stabil dan dapat diandalkan.

Kode Sumber Strategi
/*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)