pine
This commit is contained in:
parent
79707c997c
commit
8a64d833f3
128
Niki/GPT/short_1m.pine
Normal file
128
Niki/GPT/short_1m.pine
Normal file
@ -0,0 +1,128 @@
|
||||
//@version=6
|
||||
strategy("Versatile Bear Market Short Strategy - V6 (Manual ADX)", 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)
|
||||
|
||||
// Overbought Condition: RSI Parameters
|
||||
rsiPeriod = input.int(title="RSI Period", defval=14, minval=1)
|
||||
rsiOverbought = input.int(title="RSI Overbought Level", defval=60, 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)
|
||||
macdSignal = 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)
|
||||
stochOverbought = input.int(title="Stochastic Overbought Level", defval=80, minval=1, maxval=100)
|
||||
|
||||
// ADX Parameters (Manual Calculation)
|
||||
adxPeriod = input.int(title="ADX Period", defval=14, minval=1)
|
||||
adxThreshold = input.float(title="ADX Trend Strength Threshold", defval=25.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 trend confirmation; price below this confirms a bearish market.
|
||||
smaValue = ta.sma(close, smaPeriod)
|
||||
|
||||
// 2. RSI to check for overbought conditions.
|
||||
rsiValue = ta.rsi(close, rsiPeriod)
|
||||
|
||||
// 3. MACD to catch momentum shifts.
|
||||
[macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignal)
|
||||
|
||||
// 4. Bollinger Bands to identify potential exhaustion in rallies.
|
||||
bbBasis = ta.sma(close, bbLength)
|
||||
bbDev = bbStdDev * ta.stdev(close, bbLength)
|
||||
bbUpper = bbBasis + bbDev
|
||||
bbLower = bbBasis - bbDev
|
||||
|
||||
// 5. Stochastic Oscillator (using %K) for additional overbought signals.
|
||||
k = ta.stoch(close, high, low, stochLength)
|
||||
d = ta.sma(k, stochSmooth)
|
||||
|
||||
|
||||
// === MANUAL ADX CALCULATION ===
|
||||
// Step 1: Calculate the 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: Calculate 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: Smooth the values using Wilder's RMA (smoothed moving average)
|
||||
atr = ta.rma(tr, adxPeriod)
|
||||
smPlusDM = ta.rma(plusDM, adxPeriod)
|
||||
smMinusDM = ta.rma(minusDM, adxPeriod)
|
||||
|
||||
// Step 4: Calculate the Directional Indicators (DI+ and DI-)
|
||||
plusDI = 100 * (smPlusDM / atr)
|
||||
minusDI = 100 * (smMinusDM / atr)
|
||||
|
||||
// Step 5: Compute the Directional Index (DX)
|
||||
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
|
||||
|
||||
// Step 6: Smooth DX to get ADX
|
||||
adxValue = ta.rma(dx, adxPeriod)
|
||||
|
||||
|
||||
// === ENTRY CONDITIONS FOR A SHORT POSITION ===
|
||||
|
||||
// Condition 1: Bear Trend Confirmation - Price is below the SMA.
|
||||
bearTrend = close < smaValue
|
||||
|
||||
// Condition 2: Bollinger Bands - Price crosses under the upper band.
|
||||
bbCondition = ta.crossunder(close, bbUpper)
|
||||
|
||||
// Condition 3: MACD - MACD line crosses below the signal line.
|
||||
macdCondition = ta.crossunder(macdLine, signalLine)
|
||||
|
||||
// Condition 4: RSI - Check if RSI is overbought.
|
||||
rsiCondition = rsiValue > rsiOverbought
|
||||
|
||||
// Condition 5: Stochastic - %K crosses under the overbought threshold.
|
||||
stochCondition = ta.crossunder(k, stochOverbought)
|
||||
|
||||
// Condition 6: ADX - The market must have a strong trend.
|
||||
adxCondition = adxValue > adxThreshold
|
||||
|
||||
// Combine all conditions for a short entry signal.
|
||||
shortEntryCondition = bearTrend and bbCondition and macdCondition and rsiCondition and stochCondition and adxCondition
|
||||
|
||||
if shortEntryCondition
|
||||
strategy.entry("Short", strategy.short)
|
||||
|
||||
|
||||
// === EXIT CONDITIONS ===
|
||||
|
||||
// For open short positions, define a stop loss above and a take profit below the entry price.
|
||||
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")
|
||||
plot(bbBasis, color=color.gray, title="Bollinger Basis")
|
||||
plot(bbLower, color=color.blue, title="Bollinger Lower")
|
||||
|
||||
// Optional: Plot the manually calculated ADX.
|
||||
plot(adxValue, title="ADX", color=color.fuchsia)
|
Loading…
x
Reference in New Issue
Block a user