Strategi Tren Penampakan Dinamis

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

img

Gambaran umum

Strategi tren engulfing dinamis adalah strategi perdagangan yang mengambil posisi panjang atau pendek berdasarkan pola engulfing ke arah tren. Strategi ini menggunakan Average True Range (ATR) untuk mengukur volatilitas pasar, indikator Supertrend untuk menentukan arah tren pasar, dan memasuki perdagangan ketika pola engulfing sejajar dengan arah tren. Stop loss dan take profit level juga dihitung secara dinamis berdasarkan pola engulfing.

Logika Strategi

  1. Menghitung ATR untuk mengukur volatilitas pasar.
  2. Menghitung indikator Supertrend untuk mengidentifikasi tren pasar.
  3. Mendefinisikan kondisi untuk tren naik dan turun.
  4. Mengidentifikasi bullish engulfing (dalam uptrend) dan bearish engulfing (dalam downtrend).
  5. Menghitung Stop Loss (SL) dan Take Profit (TP) tingkat berdasarkan pola engulfing.
  6. Masukkan perdagangan ketika pola engulfing sesuai dengan arah tren.
  7. Perdagangan keluar ketika harga mencapai tingkat SL atau TP.
  8. Gambarkan pola penelan pada grafik.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Meningkatkan kualitas sinyal dengan menggabungkan pola engulfing dengan tren.
  2. Kemampuan untuk mengidentifikasi pembalikan tren untuk entri yang tepat.
  3. Jelas sinyal panjang / pendek untuk waktu yang lebih baik.
  4. Strategi stop engulfing mengikuti tren sambil mengelola risiko.
  5. Kerangka kode modular untuk pengoptimalan yang mudah.

Analisis Risiko

Ada juga beberapa risiko yang harus dipertimbangkan:

  1. Pola menelan bisa menjadi kebocoran palsu.
  2. Sulit untuk menentukan parameter optimal seperti ukuran pola, durasi dll.
  3. Penentuan tren yang tidak sempurna dapat menyebabkan sinyal yang salah.
  4. Stop loss dan take profit level bergantung pada kebijaksanaan dan mungkin bersifat subjektif.
  5. Kinerja tergantung pada pengaturan parameter berdasarkan data historis.

Risiko dapat dikurangi dengan:

  1. Menambahkan filter untuk menghilangkan sinyal palsu.
  2. Menggunakan ATR adaptif untuk perhitungan parameter yang kuat.
  3. Meningkatkan penentuan tren menggunakan pembelajaran mesin.
  4. Menemukan parameter optimal melalui algoritma genetik.
  5. Backtesting selama jangka waktu yang lebih lama untuk memastikan ketahanan.

Arahan Optimasi

Ada ruang untuk optimasi lebih lanjut:

  1. Pembelajaran mesin dapat meningkatkan penentuan tren.
  2. Metode pengenalan pola baru dapat lebih baik mengidentifikasi pola menelan.
  3. Strategi stop loss/take profit terbaru dapat secara dinamis mengoptimalkan level.
  4. Data frekuensi tinggi dapat mengembangkan sistem jangka pendek.
  5. Pengaturan parameter untuk instrumen yang berbeda.

Kesimpulan

Singkatnya, strategi tren engulfing dinamis menggabungkan sinyal pola engulfing berkualitas tinggi dengan penentuan tren yang akurat untuk menghasilkan sistem perdagangan dengan entri yang tepat dan stop loss dan profit taking yang wajar. Peningkatan lebih lanjut dalam parameter, manajemen risiko dan integrasi teknologi dapat meningkatkan stabilitas dan profitabilitasnya. Kerangka kode terstruktur juga membuat strategi ini dapat disesuaikan di berbagai pasar.


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