From 8a64d833f39f923aa1660a3958f4f2a9174b9ff1 Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Wed, 5 Feb 2025 22:55:13 +0200 Subject: [PATCH] pine --- Niki/GPT/short_1m.pine | 128 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 Niki/GPT/short_1m.pine diff --git a/Niki/GPT/short_1m.pine b/Niki/GPT/short_1m.pine new file mode 100644 index 0000000..3fcef45 --- /dev/null +++ b/Niki/GPT/short_1m.pine @@ -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) \ No newline at end of file