
Strategi overtrend swallowing adalah strategi pelacakan tren yang menggabungkan rata-rata real amplitude (ATR), indikator overtrend, dan bentuk swallowing untuk mengidentifikasi arah tren, dan mencari peluang masuk dengan rasio yang menguntungkan sambil mengkonfirmasi tren dalam bentuk swallowing.
Strategi ini pertama-tama menggunakan ATR dan indikator supertrend untuk menentukan arah tren pasar saat ini. Secara khusus, ini didefinisikan sebagai tren turun ketika harga berada di bawah tren atas dan tren naik ketika harga berada di atas tren bawah.
Strategi juga menilai apakah K-line membentuk bentuk penyelundupan. Menurut logika kode, dalam tren naik, penyelundupan kepala kosong akan dipicu oleh situasi di mana K-line sebelumnya ditutup dengan harga lebih tinggi dari harga K-line saat ini dan ditutup dengan harga K-line saat ini di bawah harga pembukaan. Dalam tren turun, penyelundupan kepala kosong akan dipicu oleh situasi di mana K-line sebelumnya ditutup dengan harga lebih rendah dari K-line saat ini dan ditutup dengan harga K-line saat ini di atas harga pembukaan.
Ketika bentuk penetrasi sesuai dengan arah tren, sinyal perdagangan dihasilkan. Selain itu, strategi juga akan menghitung harga stop loss dan harga stop berdasarkan bentuk penetrasi. Setelah masuk, jika harga menyentuh harga stop loss atau stop loss, maka akan keluar dari posisi saat ini.
Strategi ini menggabungkan keuntungan dari pelacakan tren dan pengenalan pola, dapat mengidentifikasi sinyal reversal dalam tren, sehingga menangkap tren yang lebih besar di titik-titik perubahan pasar. Selain itu, mekanisme stop loss juga dapat secara efektif mengendalikan risiko kerugian.
Risiko terbesar dari strategi ini adalah bahwa bentuk penelan mungkin palsu, sehingga menghasilkan sinyal yang salah. Selain itu, pengaturan stop loss dan stop loss mungkin terlalu arbitrer dan tidak dapat mencapai keseimbangan untung-rugi. Disarankan untuk mengoptimalkan kombinasi parameter dan menyesuaikan posisi stop loss dengan tepat.
Parameter ATR dapat dipertimbangkan untuk dioptimalkan secara real-time untuk menangkap perubahan volatilitas pasar dengan lebih baik. Selain itu, indikator lain dapat dipelajari untuk mengidentifikasi tren dan meningkatkan stabilitas strategi lebih lanjut.
Strategi penelan lonjakan supertrend mengintegrasikan keuntungan dari pelacakan tren dan identifikasi pola, strategi penelan pola sebagai sinyal pembalikan, dapat memperoleh efisiensi yang lebih tinggi pada titik pivot pasar. Namun, strategi ini juga memiliki risiko sinyal palsu tertentu yang perlu diuji dan dioptimalkan lebih lanjut untuk mengendalikan risiko.
/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 00:00:00
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/
// © Armanhammer
//@version=5
strategy("Engulfing with Trend", overlay=true)
Periods = input.int(title="ATR Period", defval=10)
src = input(hl2, title="Source")
Multiplier = input.float(title="ATR Multiplier", step=0.1, defval=3.0)
changeATR= input.bool(title="Change ATR Calculation Method ?", defval=true)
showsignals = input.bool(title="Show Buy/Sell Signals ?", defval=true)
highlighting = input.bool(title="Highlighter On/Off ?", defval=true)
atr2 = ta.sma(src, Periods)
atr= changeATR ? ta.atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? math.max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
var 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 and showsignals ? up : na, title="Buy", style=shape.labelup, location=location.absolute, color=color.new(color.green, 0), text="Buy")
//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 and showsignals ? dn : na, title="Sell", style=shape.labeldown, location=location.absolute, color=color.new(color.red, 0), text="Sell")
//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 and trend == 1 ? color.new(color.green, 0) : na
shortFillColor = highlighting and trend == -1 ? color.new(color.red, 0) : na
fill(upPlot, dnPlot, color=longFillColor)
fill(dnPlot, upPlot, 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.float(25, title="Boring Candle Threshold (%)", minval=1, maxval=100)
engulfingThreshold = input.float(50, title="Engulfing Candle Threshold (%)", minval=1, maxval=100)
stopLevel = input.int(200, title="Stop Level (Pips)", minval=1)
// Boring Candle (Inside Bar) and Engulfing Candlestick Conditions
isBoringCandle = math.abs(open[1] - close[1]) * 100 / math.abs(high[1] - low[1]) <= boringThreshold
isEngulfingCandle = math.abs(open - close) * 100 / math.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 = ta.crossover(close, bullTP) or ta.crossover(close, bullSL)
exitShort = ta.crossover(close, bearTP) or ta.crossover(close, bearSL)
// Check if exit conditions are met by the next candle
exitLongNextCandle = exitLong and (ta.crossover(close[1], bullTP[1]) or ta.crossover(close[1], bullSL[1]))
exitShortNextCandle = exitShort and (ta.crossover(close[1], bearTP[1]) or ta.crossover(close[1], bearSL[1]))
// Strategy Execution
if enterLong
strategy.entry("Buy", strategy.long)
if enterShort
strategy.entry("Sell", strategy.short)
// 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(series=bullEngulfing, style=shape.triangleup, location=location.abovebar, color=color.green)
plotshape(series=bearEngulfing, style=shape.triangledown, location=location.abovebar, color=color.red)
// Determine OP, SL, and TP
plot(series=bullEngulfing ? bullStop : na, title="Bullish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(series=bearEngulfing ? bearStop : na, title="Bearish Engulfing stop", color=color.red, linewidth=3, style=plot.style_linebr)
plot(series=bullEngulfing ? bullSL : na, title="Bullish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(series=bearEngulfing ? bearSL : na, title="Bearish Engulfing SL", color=color.red, linewidth=3, style=plot.style_linebr)
plot(series=bullEngulfing ? bullTP : na, title="Bullish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)
plot(series=bearEngulfing ? bearTP : na, title="Bearish Engulfing TP", color=color.green, linewidth=3, style=plot.style_linebr)
// Create labels if the condition for bullEngulfing or bearEngulfing is met
//if bullEngulfing
// label.new(x=bar_index, y=bullSL, text="SL: " + str.tostring(bullSL), color=color.red, textcolor=color.white, style=label.style_labelup, size=size.tiny)
//if bearEngulfing
// label.new(x=bar_index, y=bearSL, text="SL: " + str.tostring(bearSL), color=color.red, textcolor=color.white, style=label.style_labeldown, size=size.tiny)
//if bullEngulfing
// label.new(x=bar_index, y=bullTP, text="TP: " + str.tostring(bullTP), color=color.green, textcolor=color.white, style=label.style_labeldown, size=size.tiny)
//if bearEngulfing
// label.new(x=bar_index, y=bearTP, text="TP: " + str.tostring(bearTP), color=color.green, textcolor=color.white, style=label.style_labelup, size=size.tiny)