Strategi Trend Mengambil Dinamis

Penulis:ChaoZhang, Tarikh: 2024-02-29 11:24:18
Tag:

img

Ringkasan

Strategi Trend Mengambil Dinamis adalah strategi perdagangan yang mengambil kedudukan panjang atau pendek berdasarkan corak menggeluti ke arah trend. Strategi ini menggunakan Julat Benar Purata (ATR) untuk mengukur turun naik pasaran, penunjuk Supertrend untuk menentukan arah trend pasaran, dan memasuki perdagangan apabila corak menggeluti sejajar dengan arah trend. Stop loss dan mengambil tahap keuntungan juga dikira secara dinamik berdasarkan corak menggeluti.

Logika Strategi

  1. Mengira ATR untuk mengukur turun naik pasaran.
  2. Mengira penunjuk Supertrend untuk mengenal pasti trend pasaran.
  3. Tentukan keadaan untuk aliran naik dan turun.
  4. Mengenal pasti penembusan bullish (dalam trend menaik) dan penembusan bearish (dalam trend menurun).
  5. Mengira tahap Stop Loss (SL) dan Take Profit (TP) berdasarkan corak penggelapan.
  6. Masukkan perdagangan apabila corak meluap sepadan dengan arah trend.
  7. Perdagangan keluar apabila harga mencapai tahap SL atau TP.
  8. Gambarkan corak penelan pada carta.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Kualiti isyarat yang lebih baik dengan menggabungkan corak meluap dengan trend.
  2. Keupayaan untuk mengenal pasti pembalikan trend untuk entri yang tepat.
  3. Jelas isyarat panjang / pendek untuk masa yang lebih baik.
  4. Strategi hentian menelan mengikuti trend sambil menguruskan risiko.
  5. Kerangka kod modular untuk pengoptimuman mudah.

Analisis Risiko

Terdapat juga beberapa risiko yang perlu dipertimbangkan:

  1. Corak menelan mungkin menjadi kebocoran palsu.
  2. Sukar untuk menentukan parameter optimum seperti saiz corak, tempoh dll.
  3. Penentuan trend yang tidak sempurna boleh membawa kepada isyarat palsu.
  4. Tahap Stop Loss dan Take Profit bergantung kepada budi bicara dan mungkin bersifat subjektif.
  5. Prestasi bergantung pada penyesuaian parameter berdasarkan data sejarah.

Risiko boleh dikurangkan dengan:

  1. Menambah penapis untuk menghilangkan isyarat palsu.
  2. Menggunakan ATR adaptif untuk pengiraan parameter yang kukuh.
  3. Meningkatkan penentuan trend menggunakan pembelajaran mesin.
  4. Mencari parameter optimum melalui algoritma genetik.
  5. Ujian semula selama tempoh yang lebih lama untuk memastikan ketahanan.

Arahan pengoptimuman

Terdapat ruang untuk pengoptimuman lanjut:

  1. Pembelajaran mesin boleh meningkatkan penentuan trend.
  2. Kaedah pengenalan corak baru dapat mengenal pasti corak menelan.
  3. Strategi Stop Loss / Take Profit terkini boleh mengoptimumkan tahap secara dinamik.
  4. Data frekuensi tinggi boleh membangunkan sistem jangka pendek.
  5. Penyesuaian parameter untuk instrumen yang berbeza.

Kesimpulan

Ringkasnya, strategi Trend Engulfing Dinamik menggabungkan isyarat corak engulfing berkualiti tinggi dengan penentuan trend yang tepat untuk menjana sistem perdagangan dengan entri yang tepat dan kerugian berhenti yang munasabah dan mengambil keuntungan. Penambahbaikan lanjut dalam parameter, pengurusan risiko dan integrasi teknologi dapat meningkatkan kestabilan dan keuntungan. Kerangka kod berstruktur juga menjadikan strategi ini disesuaikan di seluruh pasaran yang berbeza.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Malikdrajat


//@version=4
strategy("Engulfing with Trend", overlay=true)

Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)

atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2

up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Define Downtrend and Uptrend conditions
downtrend = trend == -1
uptrend = trend == 1


// Engulfing 
boringThreshold = input(25, title="Boring Candle Threshold (%)", minval=1, maxval=100, step=1)
engulfingThreshold = input(50, title="Engulfing Candle Threshold (%)", minval=1, maxval=100, step=1)
stopLevel = input(200, title="Stop Level (Pips)", minval=1)


// Boring Candle (Inside Bar) and Engulfing Candlestick Conditions
isBoringCandle = abs(open[1] - close[1]) * 100 / abs(high[1] - low[1]) <= boringThreshold
isEngulfingCandle = abs(open - close) * 100 / abs(high - low) <= engulfingThreshold

// Bullish and Bearish Engulfing Conditions
bullEngulfing = uptrend and close[1] < open[1] and close > open[1] and not isBoringCandle and not isEngulfingCandle
bearEngulfing = downtrend and close[1] > open[1] and close < open[1] and not isBoringCandle and not isEngulfingCandle

// Stop Loss, Take Profit, and Entry Price Calculation
bullStop = close + (stopLevel * syminfo.mintick)
bearStop = close - (stopLevel * syminfo.mintick)
bullSL = low 
bearSL = high
bullTP = bullStop + (bullStop - low)
bearTP = bearStop - (high - bearStop)

// Entry Conditions
enterLong = bullEngulfing and uptrend
enterShort = bearEngulfing and downtrend

// Exit Conditions
exitLong = crossover(close, bullTP) or crossover(close, bullSL)
exitShort = crossover(close, bearTP) or crossover(close, bearSL)

// Check if exit conditions are met by the next candle
exitLongNextCandle = exitLong and (crossover(close[1], bullTP[1]) or crossover(close[1], bullSL[1]))
exitShortNextCandle = exitShort and (crossover(close[1], bearTP[1]) or crossover(close[1], bearSL[1]))

// Strategy Execution
strategy.entry("Buy", strategy.long, when=enterLong )
strategy.entry("Sell", strategy.short, when=enterShort )

// Exit Conditions for Long (Buy) Positions
if (bullEngulfing and not na(bullTP) and not na(bullSL))
    strategy.exit("Exit Long", from_entry="Buy", stop=bullSL, limit=bullTP)

// Exit Conditions for Short (Sell) Positions
if (bearEngulfing and not na(bearTP) and not na(bearSL))
    strategy.exit("Exit Short", from_entry="Sell", stop=bearSL, limit=bearTP)

// Plot Shapes and Labels
plotshape(bullEngulfing, style=shape.triangleup, location=location.abovebar, color=color.green)
plotshape(bearEngulfing, style=shape.triangledown, location=location.abovebar, color=color.red)

// Determine OP, SL, and TP
plot(bullEngulfing ? bullStop : na, title="Bullish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearStop : na, title="Bearish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullSL : na, title="Bullish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearSL : na, title="Bearish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(bullEngulfing ? bullTP : na, title="Bullish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)
plot(bearEngulfing ? bearTP : na, title="Bearish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)



Lebih lanjut