new pine
This commit is contained in:
parent
fdf3d8fd85
commit
219cfa3569
@ -1,137 +1,122 @@
|
|||||||
//@version=6
|
//@version=6
|
||||||
strategy("Aggressive Bear Market Short Strategy - V6 (Aggressive Conditions)", overlay=true, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
|
strategy("Aggressive Bear Market Short Strategy - V6 Improved", overlay=true, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
|
||||||
|
|
||||||
// === INPUTS ===
|
// === INPUTS ===
|
||||||
// Trend Confirmation: Simple Moving Average
|
// Trend Confirmation: SMA
|
||||||
smaPeriod = input.int(title="SMA Period", defval=50, minval=1)
|
smaPeriod = input.int(title="SMA Period", defval=50, minval=1)
|
||||||
|
|
||||||
// RSI Parameters
|
// RSI Inputs
|
||||||
rsiPeriod = input.int(title="RSI Period", defval=14, minval=1)
|
rsiPeriod = input.int(title="RSI Period", defval=14, minval=1)
|
||||||
// Lower the overbought threshold to be more aggressive.
|
rsiAggThreshold = input.int(title="Aggressive RSI Threshold", defval=60, minval=1, maxval=100)
|
||||||
rsiAggThreshold = input.int(title="Aggressive RSI Threshold", defval=50, minval=1, maxval=100)
|
|
||||||
|
|
||||||
// MACD Parameters
|
// MACD Inputs
|
||||||
macdFast = input.int(title="MACD Fast Length", defval=12, minval=1)
|
macdFast = input.int(title="MACD Fast Length", defval=12, minval=1)
|
||||||
macdSlow = input.int(title="MACD Slow Length", defval=26, minval=1)
|
macdSlow = input.int(title="MACD Slow Length", defval=26, minval=1)
|
||||||
macdSignalL = input.int(title="MACD Signal Length", defval=9, minval=1)
|
macdSignalL = input.int(title="MACD Signal Length", defval=9, minval=1)
|
||||||
|
|
||||||
// Bollinger Bands Parameters
|
// Bollinger Bands Inputs
|
||||||
bbLength = input.int(title="Bollinger Bands Length", defval=20, minval=1)
|
bbLength = input.int(title="Bollinger Bands Length", defval=20, minval=1)
|
||||||
bbStdDev = input.float(title="BB StdDev Multiplier", defval=2.0, step=0.1)
|
bbStdDev = input.float(title="BB StdDev Multiplier", defval=2.0, step=0.1)
|
||||||
|
|
||||||
// Stochastic Oscillator Parameters
|
// Stochastic Inputs
|
||||||
stochLength = input.int(title="Stochastic %K Length", defval=14, minval=1)
|
stochLength = input.int(title="Stochastic %K Length", defval=14, minval=1)
|
||||||
stochSmooth = input.int(title="Stochastic %D Smoothing", defval=3, minval=1)
|
stochSmooth = input.int(title="Stochastic %D Smoothing", defval=3, minval=1)
|
||||||
// Lower overbought threshold to catch more rallies.
|
stochAggThreshold = input.int(title="Aggressive Stochastic Threshold", defval=75, minval=1, maxval=100)
|
||||||
stochAggThreshold = input.int(title="Aggressive Stochastic Threshold", defval=70, minval=1, maxval=100)
|
|
||||||
|
|
||||||
// ADX Parameters (Manual Calculation)
|
// ADX Inputs (Manual Calculation)
|
||||||
adxPeriod = input.int(title="ADX Period", defval=14, minval=1)
|
adxPeriod = input.int(title="ADX Period", defval=14, minval=1)
|
||||||
// Lower the ADX threshold for trend strength.
|
|
||||||
adxAggThreshold = input.float(title="Aggressive ADX Threshold", defval=20.0, step=0.1)
|
adxAggThreshold = input.float(title="Aggressive ADX Threshold", defval=20.0, step=0.1)
|
||||||
|
|
||||||
// Risk Management
|
// Risk Management Inputs
|
||||||
stopLossPercent = input.float(title="Stop Loss (%)", defval=0.5, step=0.1)
|
stopLossPercent = input.float(title="Stop Loss (%)", defval=0.5, step=0.1)
|
||||||
takeProfitPercent = input.float(title="Take Profit (%)", defval=0.3, step=0.1)
|
takeProfitPercent = input.float(title="Take Profit (%)", defval=1.0, step=0.1)
|
||||||
|
|
||||||
|
// Trailing Stop Option
|
||||||
|
useTrailingStop = input.bool(title="Use Trailing Stop", defval=true)
|
||||||
|
trailStopPercent = input.float(title="Trailing Stop (%)", defval=0.5, step=0.1)
|
||||||
|
trailOffset = useTrailingStop ? trailStopPercent / 100 * close : na
|
||||||
|
|
||||||
|
|
||||||
// === INDICATOR CALCULATIONS ===
|
// === INDICATOR CALCULATIONS ===
|
||||||
|
// 1. SMA for trend confirmation.
|
||||||
// 1. SMA for overall trend determination.
|
|
||||||
smaValue = ta.sma(close, smaPeriod)
|
smaValue = ta.sma(close, smaPeriod)
|
||||||
|
// 2. RSI measurement.
|
||||||
// 2. RSI calculation.
|
|
||||||
rsiValue = ta.rsi(close, rsiPeriod)
|
rsiValue = ta.rsi(close, rsiPeriod)
|
||||||
|
// 3. MACD Calculation.
|
||||||
// 3. MACD calculation.
|
|
||||||
[macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignalL)
|
[macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignalL)
|
||||||
|
// 4. Bollinger Bands Calculation.
|
||||||
// 4. Bollinger Bands calculation.
|
|
||||||
bbBasis = ta.sma(close, bbLength)
|
bbBasis = ta.sma(close, bbLength)
|
||||||
bbDev = bbStdDev * ta.stdev(close, bbLength)
|
bbDev = bbStdDev * ta.stdev(close, bbLength)
|
||||||
bbUpper = bbBasis + bbDev
|
bbUpper = bbBasis + bbDev
|
||||||
bbLower = bbBasis - bbDev
|
bbLower = bbBasis - bbDev
|
||||||
|
// 5. Stochastic Oscillator.
|
||||||
// 5. Stochastic Oscillator calculation.
|
|
||||||
k = ta.stoch(close, high, low, stochLength)
|
k = ta.stoch(close, high, low, stochLength)
|
||||||
d = ta.sma(k, stochSmooth)
|
d = ta.sma(k, stochSmooth)
|
||||||
|
// 6. Manual ADX Calculation (using Wilder’s smoothing):
|
||||||
|
|
||||||
// === MANUAL ADX CALCULATION ===
|
|
||||||
// Step 1: True Range (TR)
|
|
||||||
prevClose = nz(close[1], close)
|
prevClose = nz(close[1], close)
|
||||||
tr = math.max(high - low, math.max(math.abs(high - prevClose), math.abs(low - prevClose)))
|
tr = math.max(high - low, math.max(math.abs(high - prevClose), math.abs(low - prevClose)))
|
||||||
|
|
||||||
// Step 2: Directional Movements (DM)
|
|
||||||
upMove = high - nz(high[1])
|
upMove = high - nz(high[1])
|
||||||
downMove = nz(low[1]) - low
|
downMove = nz(low[1]) - low
|
||||||
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
|
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
|
||||||
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
|
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
|
||||||
|
|
||||||
// Step 3: Wilder's RMA smoothing
|
|
||||||
atr = ta.rma(tr, adxPeriod)
|
atr = ta.rma(tr, adxPeriod)
|
||||||
smPlusDM = ta.rma(plusDM, adxPeriod)
|
smPlusDM = ta.rma(plusDM, adxPeriod)
|
||||||
smMinusDM = ta.rma(minusDM, adxPeriod)
|
smMinusDM = ta.rma(minusDM, adxPeriod)
|
||||||
|
|
||||||
// Step 4: Directional Indicators
|
|
||||||
plusDI = 100 * (smPlusDM / atr)
|
plusDI = 100 * (smPlusDM / atr)
|
||||||
minusDI = 100 * (smMinusDM / atr)
|
minusDI = 100 * (smMinusDM / atr)
|
||||||
|
|
||||||
// Step 5: Directional Index (DX)
|
|
||||||
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
|
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
|
||||||
|
|
||||||
// Step 6: ADX from smoothed DX values.
|
|
||||||
adxValue = ta.rma(dx, adxPeriod)
|
adxValue = ta.rma(dx, adxPeriod)
|
||||||
|
|
||||||
|
|
||||||
// === AGGRESSIVE SIGNAL CONDITIONS ===
|
// === AGGRESSIVE SIGNAL CONDITIONS ===
|
||||||
|
// Mandatory Bearish Trend Condition: Price must be below the SMA.
|
||||||
// Mandatory Bearish Condition: Price must be below the SMA.
|
|
||||||
bearTrend = close < smaValue
|
bearTrend = close < smaValue
|
||||||
|
|
||||||
// Aggressive MACD Condition: Instead of a cross event, use a simple condition.
|
// MACD Condition: Enter if MACD is below its signal line.
|
||||||
macdSignalFlag = macdLine < signalLine
|
macdSignalFlag = macdLine < signalLine
|
||||||
|
|
||||||
// Aggressive RSI Condition: RSI above a lower overbought threshold.
|
// RSI Condition: Enter if RSI is above the aggressive threshold.
|
||||||
rsiSignalFlag = rsiValue > rsiAggThreshold
|
rsiSignalFlag = rsiValue > rsiAggThreshold
|
||||||
|
|
||||||
// Aggressive Bollinger Bands Condition: Price is above the upper band (suggesting an overextended rally).
|
// Bollinger Bands Condition: Enter if price is above the upper band (overextended rally).
|
||||||
bbSignalFlag = close > bbUpper
|
bbSignalFlag = close > bbUpper
|
||||||
|
|
||||||
// Aggressive Stochastic Condition: Look for a crossunder of the aggressive threshold.
|
// Stochastic Condition: Trigger if %K crosses under the aggressive threshold.
|
||||||
stochSignalFlag = ta.crossunder(k, stochAggThreshold)
|
stochSignalFlag = ta.crossunder(k, stochAggThreshold)
|
||||||
|
|
||||||
// Aggressive ADX Condition: Market shows trend strength above the lower threshold.
|
// ADX Condition: Confirm that trend strength is above the threshold.
|
||||||
adxSignalFlag = adxValue > adxAggThreshold
|
adxSignalFlag = adxValue > adxAggThreshold
|
||||||
|
|
||||||
// Count the number of indicator signals that are true.
|
// Count the number of indicator signals present.
|
||||||
signalCount = (macdSignalFlag ? 1 : 0) +
|
signalCount = (macdSignalFlag ? 1 : 0) +
|
||||||
(rsiSignalFlag ? 1 : 0) +
|
(rsiSignalFlag ? 1 : 0) +
|
||||||
(bbSignalFlag ? 1 : 0) +
|
(bbSignalFlag ? 1 : 0) +
|
||||||
(stochSignalFlag ? 1 : 0) +
|
(stochSignalFlag ? 1 : 0) +
|
||||||
(adxSignalFlag ? 1 : 0)
|
(adxSignalFlag ? 1 : 0)
|
||||||
|
|
||||||
// Take a short position if the bear market condition is met and at least 2 indicator signals fire.
|
// Require the bearish trend plus at least 3 indicator signals before entering.
|
||||||
if bearTrend and (signalCount >= 2)
|
entryCondition = bearTrend and (signalCount >= 3)
|
||||||
|
|
||||||
|
if entryCondition
|
||||||
strategy.entry("Short", strategy.short)
|
strategy.entry("Short", strategy.short)
|
||||||
|
|
||||||
|
|
||||||
// === EXIT CONDITIONS ===
|
// === EXIT CONDITIONS ===
|
||||||
// For open short positions, define a percentage‑based stop loss (above entry) and take profit (below entry).
|
// For open short positions, set a defined stop loss and take profit.
|
||||||
|
// The stop loss is placed above the entry price, and the take profit is below.
|
||||||
|
// If enabled, a trailing stop is added.
|
||||||
if strategy.position_size < 0
|
if strategy.position_size < 0
|
||||||
entryPrice = strategy.position_avg_price
|
entryPrice = strategy.position_avg_price
|
||||||
stopPrice = entryPrice * (1 + stopLossPercent / 100)
|
stopPrice = entryPrice * (1 + stopLossPercent / 100)
|
||||||
targetPrice = entryPrice * (1 - takeProfitPercent / 100)
|
targetPrice = entryPrice * (1 - takeProfitPercent / 100)
|
||||||
strategy.exit("Exit Short", from_entry="Short", stop=stopPrice, limit=targetPrice)
|
strategy.exit("Exit Short", from_entry="Short", stop=stopPrice, limit=targetPrice, trail_offset=trailOffset)
|
||||||
|
|
||||||
|
|
||||||
// === PLOTTING ===
|
// === PLOTTING ===
|
||||||
plot(smaValue, color=color.orange, title="SMA")
|
plot(smaValue, color=color.orange, title="SMA")
|
||||||
plot(bbUpper, color=color.blue, title="Bollinger Upper Band")
|
plot(bbUpper, color=color.blue, title="Bollinger Upper")
|
||||||
plot(bbBasis, color=color.gray, title="Bollinger Basis")
|
plot(bbBasis, color=color.gray, title="Bollinger Basis")
|
||||||
plot(bbLower, color=color.blue, title="Bollinger Lower Band")
|
plot(bbLower, color=color.blue, title="Bollinger Lower")
|
||||||
plot(adxValue, title="ADX", color=color.fuchsia)
|
plot(adxValue, title="ADX", color=color.fuchsia)
|
||||||
|
|
||||||
// Optional: Plot RSI and a horizontal line at the aggressive RSI threshold.
|
|
||||||
plot(rsiValue, title="RSI", color=color.purple)
|
plot(rsiValue, title="RSI", color=color.purple)
|
||||||
hline(rsiAggThreshold, title="Aggressive RSI Threshold", color=color.red)
|
hline(rsiAggThreshold, title="Aggressive RSI Threshold", color=color.red)
|
Loading…
x
Reference in New Issue
Block a user