
Strategi ini adalah strategi gabungan yang menggabungkan penunjuk momentum, penunjuk trend dan penunjuk garis rata untuk mencapai trend dan membeli / menjual. Terutama melalui gabungan penunjuk Stochastic dan penunjuk Supertrend untuk menentukan masa membeli / menjual, dengan bantuan EMA untuk menentukan trend utama di pasaran.
Strategi ini terdiri daripada beberapa bahagian utama:
EMA rata-rata: menggunakan EMA 25, 50, 100, dan 200 empat garis rata untuk menilai trend utama. EMA25 melintasi EMA50 dan EMA100 melintasi EMA200 sebagai tren naik, jika tidak, ia adalah tren menurun.
Indikator pengesanan trend Supertrend: Parameter Factor 3 dan ATR 10 untuk menentukan sama ada harga semasa berada dalam trend naik atau turun. Apabila Supertrend berwarna hijau untuk trend naik, merah untuk trend turun.
Stochastic momentum indicator: %K 8 dan %D 3, menentukan sama ada Stochastic menghasilkan fenomena garpu emas atau garpu mati. Apabila %K garpu melintasi %D garpu dari bawah adalah isyarat garpu emas, sebaliknya isyarat garpu mati.
Strategi pembelian adalah: EMA menunjukkan trend naik + Supertrend menunjukkan trend naik + Stochastic Gold Fork Time. Strategi jual adalah: EMA menunjukkan trend menurun + Supertrend menunjukkan trend menurun + Stochastic Dead Fork Time.
Strategi ini menggabungkan trend, momentum, dan tiga pencahayaan untuk menilai pergerakan pasaran dan titik jual beli dengan lebih yakin.
Strategi ini mempunyai kelebihan utama:
Dengan pelbagai petunjuk, penilaian yang lebih baik, penapis penembusan palsu dapat dilakukan dengan berkesan.
Penambahan penunjuk momentum dapat menentukan titik perubahan lebih awal.
Parameter yang boleh disesuaikan untuk persekitaran pasaran yang berbeza.
Penetapan Stop Loss dan Stop Stop yang agak cekap.
Ia boleh diukur pada kitaran yang tinggi seperti sinar matahari, dan ia lebih berkesan.
Strategi ini mempunyai beberapa risiko:
Tetapan parameter yang tidak betul boleh menyebabkan pertukaran yang kerap atau isyarat yang tidak stabil. Perlu menyesuaikan parameter.
Dalam kes ini, terdapat kemungkinan untuk membuat keputusan yang salah. Anda boleh mempertimbangkan untuk menambah lebih banyak indikator gelombang.
Stop loss yang ditetapkan sebagai paras paras paras paras paras Stochastic mungkin terlalu dekat, dan perlu dipertimbangkan untuk melonggarkan dengan sewajarnya.
Data pengesanan tidak mencukupi, mungkin memberi kesan kepada parameter yang sesuai, perlu memperluaskan kitaran pengesanan semula.
Strategi ini boleh dioptimumkan dalam beberapa arah:
Uji lebih banyak kombinasi parameter untuk mencari parameter yang paling optimum. Seperti menyesuaikan parameter Factor untuk Supertrend.
Tambah lebih banyak penunjuk gelombang filter, seperti penunjuk tenaga, penunjuk kadar lonjakan, dan lain-lain, untuk mengurangkan kemungkinan kesalahan penghakiman.
Anda boleh menguji pelbagai cara untuk menghentikan kerugian, seperti menetapkan peratusan tertentu untuk menghentikan kerugian pada titik yang melampau.
Mengoptimumkan cara penangguhan, seperti mempertimbangkan penangguhan dinamik untuk mengunci lebih banyak keuntungan.
Memperluas kelayakan strategi, seperti cuba menyesuaikan diri dengan lebih banyak jenis perdagangan, atau cuba menggunakannya dalam kitaran yang lebih tinggi.
Strategi ini mempunyai pemikiran keseluruhan yang jelas, pilihan penunjuk yang munasabah, trend mengikuti dan melanggar perdagangan, dan pengukuran semula adalah lebih baik. Namun, masih ada ruang untuk pengoptimuman, dengan menyesuaikan parameter, menambah lebih banyak penunjuk gelombang, dan memperbaiki kaedah menghentikan kerugian, pengoptimuman pelbagai arah dapat menjadikan strategi lebih stabil dan lebih dipercayai.
/*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)