Pelanggaran Momentum dan Trend Berikutan Strategi Gabungan

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

img

Ringkasan

Strategi ini adalah strategi gabungan yang mengintegrasikan penunjuk momentum, penunjuk trend berikut dan penunjuk purata bergerak untuk merealisasikan trend berikut dan entri / keluar pecah. Ia terutamanya menggunakan gabungan penunjuk Stochastic dan penunjuk Supertrend untuk menentukan masa masuk / keluar, dan menggunakan garis EMA untuk menilai trend pasaran utama.

Prinsip Strategi

Strategi ini terdiri daripada penunjuk berikut:

  1. Garis EMA: Gunakan EMA 25, 50, 100 dan 200 untuk menentukan trend utama. Apabila EMA25 melintasi di atas EMA50 dan EMA100 melintasi di atas EMA200, ia adalah trend menaik, sebaliknya ia adalah trend menurun.

  2. Indikator trend berikut Supertrend: Parameter adalah Faktor 3 dan ATR 10 untuk menilai sama ada harga semasa berada dalam trend menaik atau menurun. Apabila Supertrend hijau, ia adalah trend menaik. Apabila ia merah, ia adalah trend menurun.

  3. Indikator momentum stochastic: %K 8 dan %D 3 untuk menentukan sama ada Stochastic menghasilkan salib emas atau salib mati. Apabila garis %K melintasi garis %D dari bawah, ia adalah isyarat salib emas, dan sebaliknya untuk salib mati.

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

Strategi ini mengintegrasikan penunjuk trend, momentum dan pecah untuk menentukan pergerakan pasaran dan titik dagangan dengan boleh dipercayai.

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Menggabungkan pelbagai penunjuk meningkatkan ketahanan dan menapis keluar palsu breakouts dengan berkesan.

  2. Menambah penunjuk momentum boleh menjumpai titik perubahan awal.

  3. Parameter yang boleh disesuaikan sesuai dengan persekitaran pasaran yang berbeza.

  4. Menyedari penempatan stop loss dan mengambil keuntungan yang agak cekap.

  5. Berkesan baik apabila diuji semula dalam jangka masa yang panjang seperti setiap hari.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Tetapan parameter yang tidak betul boleh menyebabkan perdagangan yang terlalu kerap atau isyarat yang tidak stabil.

  2. Masih boleh ada salah pertimbangan dalam masa. lebih banyak penunjuk penapis boleh ditambah.

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

  4. Data backtest yang tidak mencukupi boleh menyebabkan bias dalam pemasangan parameter.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Uji lebih banyak set parameter untuk mencari optimum. contohnya menyesuaikan Supertrend Factor.

  2. Tambah lebih banyak penapis penunjuk seperti tenaga atau turun naik untuk mengurangkan penilaian yang salah.

  3. Uji cara stop loss yang berbeza, contohnya stop loss berasaskan peratusan.

  4. Mengoptimumkan mengambil keuntungan, seperti berhenti untuk mengunci lebih banyak keuntungan.

  5. Memperluas ruang lingkup, menyesuaikan diri dengan lebih banyak produk atau jangka masa yang lebih tinggi.

Kesimpulan

Logik strategi ini jelas dan pemilihan penunjuk munasabah. Ia merealisasikan perdagangan trend berikut dan momentum dengan hasil backtest yang baik. Tetapi masih ada ruang untuk pengoptimuman, contohnya penyesuaian parameter, menambah penapis, meningkatkan berhenti dan mengambil keuntungan. Pengoptimuman pelbagai dimensi boleh menjadikan strategi lebih mantap.


/*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 lanjut