gogo2/Niki/GPT/short_1m.pine
2025-02-05 22:59:44 +02:00

137 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//@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)
// === INPUTS ===
// Trend Confirmation: Simple Moving Average
smaPeriod = input.int(title="SMA Period", defval=50, minval=1)
// RSI Parameters
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=50, minval=1, maxval=100)
// MACD Parameters
macdFast = input.int(title="MACD Fast Length", defval=12, minval=1)
macdSlow = input.int(title="MACD Slow Length", defval=26, minval=1)
macdSignalL = input.int(title="MACD Signal Length", defval=9, minval=1)
// Bollinger Bands Parameters
bbLength = input.int(title="Bollinger Bands Length", defval=20, minval=1)
bbStdDev = input.float(title="BB StdDev Multiplier", defval=2.0, step=0.1)
// Stochastic Oscillator Parameters
stochLength = input.int(title="Stochastic %K Length", defval=14, 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=70, minval=1, maxval=100)
// ADX Parameters (Manual Calculation)
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)
// Risk Management
stopLossPercent = input.float(title="Stop Loss (%)", defval=0.5, step=0.1)
takeProfitPercent = input.float(title="Take Profit (%)", defval=0.3, step=0.1)
// === INDICATOR CALCULATIONS ===
// 1. SMA for overall trend determination.
smaValue = ta.sma(close, smaPeriod)
// 2. RSI calculation.
rsiValue = ta.rsi(close, rsiPeriod)
// 3. MACD calculation.
[macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignalL)
// 4. Bollinger Bands calculation.
bbBasis = ta.sma(close, bbLength)
bbDev = bbStdDev * ta.stdev(close, bbLength)
bbUpper = bbBasis + bbDev
bbLower = bbBasis - bbDev
// 5. Stochastic Oscillator calculation.
k = ta.stoch(close, high, low, stochLength)
d = ta.sma(k, stochSmooth)
// === MANUAL ADX CALCULATION ===
// Step 1: True Range (TR)
prevClose = nz(close[1], close)
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])
downMove = nz(low[1]) - low
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
// Step 3: Wilder's RMA smoothing
atr = ta.rma(tr, adxPeriod)
smPlusDM = ta.rma(plusDM, adxPeriod)
smMinusDM = ta.rma(minusDM, adxPeriod)
// Step 4: Directional Indicators
plusDI = 100 * (smPlusDM / atr)
minusDI = 100 * (smMinusDM / atr)
// Step 5: Directional Index (DX)
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
// Step 6: ADX from smoothed DX values.
adxValue = ta.rma(dx, adxPeriod)
// === AGGRESSIVE SIGNAL CONDITIONS ===
// Mandatory Bearish Condition: Price must be below the SMA.
bearTrend = close < smaValue
// Aggressive MACD Condition: Instead of a cross event, use a simple condition.
macdSignalFlag = macdLine < signalLine
// Aggressive RSI Condition: RSI above a lower overbought threshold.
rsiSignalFlag = rsiValue > rsiAggThreshold
// Aggressive Bollinger Bands Condition: Price is above the upper band (suggesting an overextended rally).
bbSignalFlag = close > bbUpper
// Aggressive Stochastic Condition: Look for a crossunder of the aggressive threshold.
stochSignalFlag = ta.crossunder(k, stochAggThreshold)
// Aggressive ADX Condition: Market shows trend strength above the lower threshold.
adxSignalFlag = adxValue > adxAggThreshold
// Count the number of indicator signals that are true.
signalCount = (macdSignalFlag ? 1 : 0) +
(rsiSignalFlag ? 1 : 0) +
(bbSignalFlag ? 1 : 0) +
(stochSignalFlag ? 1 : 0) +
(adxSignalFlag ? 1 : 0)
// Take a short position if the bear market condition is met and at least 2 indicator signals fire.
if bearTrend and (signalCount >= 2)
strategy.entry("Short", strategy.short)
// === EXIT CONDITIONS ===
// For open short positions, define a percentagebased stop loss (above entry) and take profit (below entry).
if strategy.position_size < 0
entryPrice = strategy.position_avg_price
stopPrice = entryPrice * (1 + stopLossPercent / 100)
targetPrice = entryPrice * (1 - takeProfitPercent / 100)
strategy.exit("Exit Short", from_entry="Short", stop=stopPrice, limit=targetPrice)
// === PLOTTING ===
plot(smaValue, color=color.orange, title="SMA")
plot(bbUpper, color=color.blue, title="Bollinger Upper Band")
plot(bbBasis, color=color.gray, title="Bollinger Basis")
plot(bbLower, color=color.blue, title="Bollinger Lower Band")
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)
hline(rsiAggThreshold, title="Aggressive RSI Threshold", color=color.red)