From 219cfa3569275a65102a07b58efb53a53d83e849 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Sat, 8 Feb 2025 21:03:55 +0200 Subject: [PATCH] new pine --- Niki/GPT/short_1m.pine | 111 ++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 63 deletions(-) diff --git a/Niki/GPT/short_1m.pine b/Niki/GPT/short_1m.pine index 51acf95..5364666 100644 --- a/Niki/GPT/short_1m.pine +++ b/Niki/GPT/short_1m.pine @@ -1,137 +1,122 @@ //@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 === -// Trend Confirmation: Simple Moving Average +// Trend Confirmation: SMA smaPeriod = input.int(title="SMA Period", defval=50, minval=1) -// RSI Parameters +// RSI Inputs 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) +rsiAggThreshold = input.int(title="Aggressive RSI Threshold", defval=60, minval=1, maxval=100) -// MACD Parameters +// MACD Inputs 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 +// Bollinger Bands Inputs 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) +// Stochastic Inputs +stochLength = input.int(title="Stochastic %K Length", defval=14, minval=1) +stochSmooth = input.int(title="Stochastic %D Smoothing", defval=3, minval=1) +stochAggThreshold = input.int(title="Aggressive Stochastic Threshold", defval=75, 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. +// ADX Inputs (Manual Calculation) +adxPeriod = input.int(title="ADX Period", defval=14, minval=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) -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 === - -// 1. SMA for overall trend determination. +// 1. SMA for trend confirmation. smaValue = ta.sma(close, smaPeriod) - -// 2. RSI calculation. +// 2. RSI measurement. rsiValue = ta.rsi(close, rsiPeriod) - -// 3. MACD calculation. +// 3. MACD Calculation. [macdLine, signalLine, _] = ta.macd(close, macdFast, macdSlow, macdSignalL) - -// 4. Bollinger Bands calculation. +// 4. Bollinger Bands Calculation. bbBasis = ta.sma(close, bbLength) -bbDev = bbStdDev * ta.stdev(close, bbLength) +bbDev = bbStdDev * ta.stdev(close, bbLength) bbUpper = bbBasis + bbDev bbLower = bbBasis - bbDev - -// 5. Stochastic Oscillator calculation. +// 5. Stochastic Oscillator. k = ta.stoch(close, high, low, stochLength) d = ta.sma(k, stochSmooth) - - -// === MANUAL ADX CALCULATION === -// Step 1: True Range (TR) +// 6. Manual ADX Calculation (using Wilder’s smoothing): 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) +atr = ta.rma(tr, adxPeriod) +smPlusDM = ta.rma(plusDM, adxPeriod) smMinusDM = ta.rma(minusDM, adxPeriod) - -// Step 4: Directional Indicators -plusDI = 100 * (smPlusDM / atr) +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. +// Mandatory Bearish Trend Condition: Price must be below the SMA. 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 -// Aggressive RSI Condition: RSI above a lower overbought threshold. +// RSI Condition: Enter if RSI is above the aggressive threshold. 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 -// 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) -// Aggressive ADX Condition: Market shows trend strength above the lower threshold. +// ADX Condition: Confirm that trend strength is above the threshold. adxSignalFlag = adxValue > adxAggThreshold -// Count the number of indicator signals that are true. +// Count the number of indicator signals present. 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) +// Require the bearish trend plus at least 3 indicator signals before entering. +entryCondition = bearTrend and (signalCount >= 3) + +if entryCondition strategy.entry("Short", strategy.short) // === 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 - entryPrice = strategy.position_avg_price - stopPrice = entryPrice * (1 + stopLossPercent / 100) + 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) + strategy.exit("Exit Short", from_entry="Short", stop=stopPrice, limit=targetPrice, trail_offset=trailOffset) // === PLOTTING === 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(bbLower, color=color.blue, title="Bollinger Lower Band") +plot(bbLower, color=color.blue, title="Bollinger Lower") 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) \ No newline at end of file