
क्या आप जानते हैं? यह रणनीति बाजार के लिए एक “भावना डिटेक्टर” की तरह है! यह बाजार के “खुशी और आक्रोश” को महसूस करने के लिए द्विध्रुवीय चिकनी ऑसिलेटर का उपयोग करता है, और जब बाजार बहुत उत्साहित है (ओवरबॉय) या बहुत उदास (ओवरसेलिंग) है, तो यह एक व्यापार संकेत देता है।
कल्पना कीजिए कि यह रणनीति एक सुपर-संवेदनशील “मार्केट बॉडी टेम्परेचर” की तरह है। सबसे पहले, यह गणना करता है कि कीमतें 25 चक्रों के औसत से कितनी दूर हैं, और फिर इसे मानकीकृत किया जाता है (जैसे कि विभिन्न ऊंचाई वाले लोगों को मानक ऊंचाई के अनुपात में बदलना) । इसके बाद, महत्वपूर्ण “डबल स्मूथिंग” प्रक्रिया है, जैसे कि तस्वीरों को दो बार लगातार रंगीन लेंस के साथ चमकाने के लिए, ताकि संकेत अधिक स्पष्ट और विश्वसनीय हो सके। जब ऑस्सिलेटर एक निर्धारित सीमा को पार करता है, तो रणनीति बंद हो जाती है!
इस रणनीति के बारे में सबसे अच्छी बात यह है कि इसका “रिवर्स सिग्नल क्लियर” तंत्र है - जैसे कि ड्राइविंग के दौरान लाल बत्ती को देखते ही तुरंत ब्रेक लगाना! ठीक है, जब विपरीत सिग्नल आता है, तो रणनीति तुरंत क्लियर हो जाती है, न कि मर जाती है। इसके अलावा, 5 चक्रों की स्थायी स्टॉप-लॉस सुरक्षा भी है, जैसे कि आपके पैसे के लिए एक “सुरक्षा एयर बैग” जोड़ा गया है। सबसे अच्छी बात यह है कि यह पूरी तरह से ट्रेडिंग सांख्यिकी सुविधाओं के साथ आता है, जिससे आप रणनीति के प्रदर्शन पर हमेशा नियंत्रण रख सकते हैं!
हालांकि यह रणनीति बहुत अच्छी है, यह सर्वव्यापी नहीं है। मजबूत प्रवृत्ति वाले बाजारों में, ऑसिलेटर “भटक” सकते हैं, जैसे कि हाईवे पर शहर के नेविगेशन का उपयोग करना। निश्चित थ्रेशोल्ड सेटिंग्स अलग-अलग बाजार स्थितियों के लिए अनुचित हो सकती हैं, आपको वास्तविक परिस्थितियों के अनुसार लचीलेपन से समायोजित करने की आवश्यकता होगी। याद रखें, किसी भी रणनीति को अच्छे जोखिम प्रबंधन के साथ जोड़ा जाना चाहिए, सभी अंडे एक टोकरी में न रखें!
/*backtest
start: 2025-01-01 00:00:00
end: 2025-10-15 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":500000}]
*/
//@version=6
strategy("Two-Pole Threshold Entries + Opposite-Signal & Stop Exits + Stats",
overlay=true,
max_labels_count=500)
// === Inputs ===
length = input.int(20, minval=1, title="Filter Length")
buyTrig = input.float(-0.8, title="Buy Threshold (osc ↑)")
sellTrig = input.float( 0.8, title="Sell Threshold (osc ↓)")
stopLossPts = input.int(10, minval=1, title="Stop Loss (pts)")
// === Two-Pole Oscillator ===
sma25 = ta.sma(close, 25)
dev = (close - sma25) - ta.sma(close - sma25, 25)
norm = dev / ta.stdev(close - sma25, 25)
alpha = 2.0 / (length + 1)
var float s1 = na
var float s2 = na
s1 := na(s1) ? norm : (1 - alpha) * s1 + alpha * norm
s2 := na(s2) ? s1 : (1 - alpha) * s2 + alpha * s1
osc = s2
prevOsc = osc[4]
// === Trigger Cross Signals ===
isLongSig = ta.crossover(osc, buyTrig) and barstate.isconfirmed
isShortSig = ta.crossunder(osc, sellTrig) and barstate.isconfirmed
// === State & Stats Vars ===
var int tradeDir = 0 // 1=long, -1=short, 0=flat
var float entryPrice = na
var int entryBar = na
var int buyTotal = 0
var int buyFailed = 0
var float sumMoveB = 0.0
var int cntMoveB = 0
var float sumPLptsB = 0.0
var int sellTotal = 0
var int sellFailed = 0
var float sumMoveS = 0.0
var int cntMoveS = 0
var float sumPLptsS = 0.0
// === Exit Marker Flags ===
var bool longStopHit = false
var bool shortStopHit = false
var bool longSigExit = false
var bool shortSigExit = false
longStopHit := false
shortStopHit := false
longSigExit := false
shortSigExit := false
// === 1) Opposite-Signal Exit ===
if tradeDir == 1 and isShortSig
float ptsL = close - entryPrice
sumMoveB += ptsL
sumPLptsB += ptsL
cntMoveB += 1
strategy.close("Long")
longSigExit := true
tradeDir := 0
if tradeDir == -1 and isLongSig
float ptsS = entryPrice - close
sumMoveS += ptsS
sumPLptsS += ptsS
cntMoveS += 1
strategy.close("Short")
shortSigExit := true
tradeDir := 0
// === 2) 5-Bar, Bar-Close 10-pt Stop Exit ===
inWindow = (tradeDir != 0) and (bar_index <= entryBar + 5)
longStopPrice = entryPrice - stopLossPts
shortStopPrice = entryPrice + stopLossPts
if tradeDir == 1 and inWindow and close <= longStopPrice
buyFailed += 1
sumPLptsB -= stopLossPts
strategy.close("Long")
longStopHit := true
tradeDir := 0
if tradeDir == -1 and inWindow and close >= shortStopPrice
sellFailed += 1
sumPLptsS -= stopLossPts
strategy.close("Short")
shortStopHit := true
tradeDir := 0
// === 3) New Entries (only when flat) ===
if tradeDir == 0 and isLongSig
buyTotal += 1
entryPrice := close
entryBar := bar_index
strategy.entry("Long", strategy.long)
tradeDir := 1
if tradeDir == 0 and isShortSig
sellTotal += 1
entryPrice := close
entryBar := bar_index
strategy.entry("Short", strategy.short)
tradeDir := -1
// === Stats Computation ===
float avgMoveB = cntMoveB > 0 ? sumMoveB / cntMoveB : na
float successPctB = buyTotal > 0 ? (buyTotal - buyFailed) / buyTotal * 100 : na
float pnlUSD_B = sumPLptsB * 50.0
float avgMoveS = cntMoveS > 0 ? sumMoveS / cntMoveS : na
float successPctS = sellTotal > 0 ? (sellTotal - sellFailed) / sellTotal * 100 : na
float pnlUSD_S = sumPLptsS * 50.0
string tf = timeframe.period
// === On-Chart Markers ===
plotshape(isLongSig, title="Long Entry", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
plotshape(isShortSig, title="Short Entry", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny)
plotshape(longSigExit, title="Exit on Sell Sig", style=shape.xcross, location=location.abovebar, color=color.orange, size=size.tiny)
plotshape(shortSigExit, title="Exit on Buy Sig", style=shape.xcross, location=location.belowbar, color=color.orange, size=size.tiny)
plotshape(longStopHit, title="Stop Exit Long", style=shape.xcross, location=location.abovebar, color=color.purple, size=size.tiny)
plotshape(shortStopHit, title="Stop Exit Short", style=shape.xcross, location=location.belowbar, color=color.purple, size=size.tiny)