
Strategi ini adalah metode perdagangan kuantitatif yang komprehensif untuk mengidentifikasi tren pasar dan sinyal perdagangan dengan mengintegrasikan beberapa indikator teknis (MACD, Supertrend, dan Parabolic SAR). Strategi ini dirancang untuk memberikan kerangka keputusan perdagangan yang fleksibel dan ketat yang dapat disesuaikan dengan lingkungan pasar yang berbeda.
Prinsip strategi didasarkan pada kombinasi dinamis dari tiga indikator teknis utama:
Strategi membuat keputusan perdagangan dengan logika berikut:
Vishal Adaptive Multi Indicator Trading Strategy adalah metode perdagangan kuantitatif yang inovatif, yang memberikan kerangka keputusan perdagangan yang komprehensif dan fleksibel melalui sinergi MACD, Supertrend, dan Parabolic SAR. Meskipun ada risiko tertentu, validasi multi-indikator dan logika perdagangan simetrisnya memberikan investor model perdagangan yang layak untuk diteliti secara mendalam.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-27 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Vishal Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// **MACD Inputs & Calculation**
fast_length = input.int(13, title="MACD Fast Length")
slow_length = input.int(27, title="MACD Slow Length")
signal_length = input.int(9, title="MACD Signal Smoothing")
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.ema(close, slow_length)
macd = fast_ma - slow_ma
signal = ta.ema(macd, signal_length)
hist = macd - signal
// **Supertrend Inputs & Calculation**
atrPeriod = input.int(11, "ATR Length", minval = 1)
factor = input.float(3.0, "Factor", minval = 0.01, step = 0.01)
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
bullTrend = direction < 0 // Uptrend Condition
bearTrend = direction > 0 // Downtrend Condition
// **Parabolic SAR Inputs & Calculation**
sarStep = input.float(0.02, "Parabolic SAR Step")
sarMax = input.float(0.2, "Parabolic SAR Max")
sar = ta.sar(sarStep, sarStep, sarMax)
// **Trade Entry Conditions**
macdBullish = macd > signal // MACD in Bullish Mode
macdBearish = macd < signal // MACD in Bearish Mode
priceAboveSAR = close > sar // Price above SAR (Bullish)
priceBelowSAR = close < sar // Price below SAR (Bearish)
// **Boolean Flags to Track Conditions Being Met**
var bool macdConditionMet = false
var bool sarConditionMet = false
var bool trendConditionMet = false
// **Track if Each Condition is Met in Any Order**
if (macdBullish)
macdConditionMet := true
if (macdBearish)
macdConditionMet := false
if (priceAboveSAR)
sarConditionMet := true
if (priceBelowSAR)
sarConditionMet := false
if (bullTrend)
trendConditionMet := true
if (bearTrend)
trendConditionMet := false
// **Final Long Entry Signal (Triggers When All Three Flags Are True)**
longSignal = macdConditionMet and sarConditionMet and trendConditionMet
// **Final Short Entry Signal (Triggers When All Three Flags Are False)**
shortSignal = not macdConditionMet and not sarConditionMet and not trendConditionMet
// **Execute Full Equity Trades**
if (longSignal)
strategy.entry("Long", strategy.long)
if (shortSignal)
strategy.entry("Short", strategy.short)
// **Exit Logic - Requires 2 Consecutive Candle Closes Below/Above SAR**
var int belowSARCount = 0
var int aboveSARCount = 0
if (strategy.position_size > 0) // Long position is active
belowSARCount := close < sar ? belowSARCount + 1 : 0
if (belowSARCount >= 1)
strategy.close("Long")
if (strategy.position_size < 0) // Short position is active
aboveSARCount := close > sar ? aboveSARCount + 1 : 0
if (aboveSARCount >= 1)
strategy.close("Short")
// **Plot Indicators**
plot(supertrend, title="Supertrend", color=bullTrend ? color.green : color.red, linewidth=2, style=plot.style_linebr)
plot(sar, title="Parabolic SAR", color=color.blue, style=plot.style_cross, linewidth=2)
plot(macd, title="MACD Line", color=color.blue, linewidth=2)
plot(signal, title="MACD Signal", color=color.orange, linewidth=2)
plot(hist, title="MACD Histogram", style=plot.style_columns, color=hist >= 0 ? color.green : color.red)