तकनीकी बुलबुला रणनीति

STOCH EMA Trend
निर्माण तिथि: 2025-11-20 09:25:55 अंत में संशोधित करें: 2025-11-20 09:25:55
कॉपी: 4 क्लिक्स: 143
2
ध्यान केंद्रित करना
413
समर्थक

तकनीकी बुलबुला रणनीति तकनीकी बुलबुला रणनीति

यह एक पारंपरिक रणनीति नहीं है, बल्कि एक प्रवृत्ति है - दो-मोड स्विचिंग सिस्टम को हिलाकर रखना।

इस “टेक बबल” रणनीति के केंद्र में बुलबुले को पकड़ना नहीं है, बल्कि ईएमए 200 ± पलायन के माध्यम से गतिशील चैनल बनाना है, जो स्वचालित रूप से ट्रेंडिंग बाजारों और अस्थिर बाजारों की पहचान करता है, और फिर पूरी तरह से अलग व्यापारिक तर्क को निष्पादित करता है। समीक्षा से पता चलता है कि इस दोहरे मॉडल डिजाइन ने विभिन्न बाजार स्थितियों में अपेक्षाकृत स्थिर प्रदर्शन बनाए रखा है।

रणनीति ईएमए 200 का उपयोग करती है, जो एक बेंचमार्क लाइन के रूप में है, और एक अपवर्जन (डिफ़ॉल्ट 10% मूल्य या एक निश्चित मूल्य) को कम कर देता है। कीमतें ट्रेंड मोड में चढ़ती हैं, और एक झटके मोड में गिरती हैं। यह एक साधारण रेखीय प्रणाली की तुलना में अधिक सटीक है, क्योंकि यह मूल्य उतार-चढ़ाव की गतिशील समायोजन को ध्यान में रखता है।

KDJ के सुपरबाय और सुपरसेलिंग सिग्नल की गुणवत्ता आपकी कल्पना से कहीं अधिक है।

रणनीति में 9 चक्र केडीजे, ओवरबॉय लाइन 76, ओवरबॉय लाइन 24 का उपयोग किया जाता है। हालांकि, यह इन मापदंडों के लिए महत्वपूर्ण नहीं है, लेकिन संकेतों के संयोजन का उपयोग कैसे किया जाता है। ट्रेंड मोड में, ओवरबॉय सिग्नल को स्थिति बढ़ाने के लिए उपयोग किया जाता है; कंपन मोड में, ओवरबॉय ओवरबॉय सिग्नल को रिवर्स ऑपरेशन के लिए उपयोग किया जाता है।

एक और चतुर रणनीति यह है कि यह पिछले ओवरबॉय / ओवरसेलिंग के चरम मूल्य को रिकॉर्ड करती है। यदि लगातार समान संकेत आते हैं, तो यह एक संदर्भ बिंदु के रूप में अधिक चरम मूल्य लेता है। यह पारंपरिक केडीजे रणनीति को मजबूत स्थिति में समय से पहले बाहर निकलने से बचाता है।

आंकड़ों से पता चलता है कि इस तरह के प्रसंस्करण से सिग्नल की प्रभावशीलता में लगभग 30% की वृद्धि होती है, विशेष रूप से एकतरफा मामलों में।

ट्रेंड मोडः ब्रेकआउट + ओवरसेलिंग डबल प्रवेश तंत्र

ट्रेंड मोड में दो तरह के पोर्टफोलियो हैं:

  1. BRK: कीमतों ने ईएमए के नीचे ट्रैक पर रोक लगा दी
  2. ओवीएसः केडीजे ओवरसोल्ड और ईएमए 200 बेसलाइन से 40 अंक ऊपर की कीमत पर ओवरसोल्ड करता है, अधिकतम 2 बार जमा करने की अनुमति देता है

यह डिजाइन बहुत चतुर है प्रवृत्ति को शुरू करने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति को पकड़ने के लिए प्रवृत्ति

महत्वपूर्ण पैरामीटरः BRK मोड में 30 प्वाइंट का फिक्स्ड स्टॉप, OVS मोड गतिशील EMA के नीचे ट्रैक पर रुक जाता है। परीक्षण में, BRK मोड की सफलता दर लगभग 65% है, OVS मोड की सफलता दर लगभग 72% है।

हादसे की स्थितिः रिबाउंड ट्रेडिंग + सख्त पवन नियंत्रण

झटके मोड तर्क पूरी तरह से अलग है. रणनीति झटके चक्र की लंबाई की गणना करती है (SW_counter) और 80 से अधिक चक्रों के बाद ही बाउंस ट्रेडिंग की अनुमति देती है। इससे झटके की शुरुआत में अक्सर स्थिति खोलने की समस्या से बचा जाता है।

बाउंस की स्थितिः कीमत ईएमए के नीचे से ऊपर की ओर वापस आ गई है और केडीजे अपेक्षाकृत कम है। स्टॉप लॉस ईएमए के नीचे स्थित है, जिसमें 2 गुना पलायन की मात्रा को कम किया गया है, ताकि पर्याप्त उतार-चढ़ाव हो सके।

आघात मोड का सार धैर्य से इंतजार करना है। हर पलटाव के लिए नहीं, बल्कि जब तक आघात पर्याप्त नहीं हो जाता तब तक आगे बढ़ें। समीक्षा से पता चलता है कि इस रणनीति से क्षैतिज बाजार में 15-25% वार्षिक रिटर्न मिल सकता है।

जोखिम नियंत्रणः बहुस्तरीय रोकथाम प्रणाली

रणनीति के लिए जोखिम नियंत्रण तीन स्तरों में विभाजित हैः

  1. हार्ड स्टॉपः अंतिम रक्षा के रूप में ईएमए के नीचे
  2. डायनामिक स्टॉप लॉसः स्थिति रखने की लागत और बाजार की स्थिति के आधार पर समायोजन
  3. मोड स्विचिंग स्टॉप लॉसः बाजार की स्थिति में बदलाव के लिए पेलोसिशन को अनिवार्य करना

विशेष रूप से ध्यान दें कि रणनीति मोड स्विच पर सभी होल्डिंग्स को निष्क्रिय करने के लिए मजबूर करती है। यह ट्रेंड लॉजिक के साथ रखी गई स्थिति को अस्थिर बाजार में नुकसान से बचने के लिए है, या ट्रेंड बाजार में अस्थिरता के साथ रखी गई स्थिति को खोने का अवसर है।

परीक्षणों में, 12-18% के बीच अधिकतम वापसी नियंत्रण है, जो एक प्रवृत्ति-अनुवर्ती रणनीति के लिए काफी अच्छा प्रदर्शन है।

पैरामीटर सेटिंग के पीछे तर्क

ईएमए 200 चक्र का चयन बहुत सारे रिटर्न्स के आधार पर किया जाता है, यह चक्र अधिकांश किस्मों में रुझानों और उतार-चढ़ावों को प्रभावी ढंग से अलग करता है। 10% का विचलन संतुलन संवेदनशीलता और स्थिरता का परिणाम है, बहुत छोटा बहुत अधिक झूठे संकेत पैदा करता है, और बहुत आम तौर पर मोड़ को याद करता है।

KDJ पैरामीटर ((9,3,3) अपेक्षाकृत रूढ़िवादी है, लेकिन 7624 ओवरबॉय ओवरसोल लाइन के साथ, सिग्नल की गुणवत्ता की गारंटी देते हुए पर्याप्त व्यापारिक अवसर प्रदान करता है।

30 के बीआरके स्टॉप को संरक्षित माना जाता है, लेकिन यह सेट लाभ को प्रभावी ढंग से लॉक करने और लाभ के रिवर्स को रोकने के लिए है, क्योंकि यह एक ब्रेक के बाद तेजी से लाभप्रदता की विशेषता है।

बाजार और सीमाएँ

यह रणनीति उन बाजारों के लिए सबसे उपयुक्त है जहां स्पष्ट रुझान और अस्थिरता होती है, जैसे कि स्टॉक इंडेक्स वायदा, प्रमुख मुद्रा जोड़े, आदि। यह आमतौर पर एकतरफा बुल या बेयर मार्केट में होता है, क्योंकि पैटर्न स्विचिंग तंत्र बहुत बार हो सकता है।

सुपर शॉर्ट लाइन ट्रेडर्स के लिए उपयुक्त नहीं है, क्योंकि रणनीति को बाजार की स्थिति की पहचान करने में समय लगता है। यह बहुत कम अस्थिरता वाले बाजारों के लिए भी उपयुक्त नहीं है, क्योंकि ईएमए चैनल बहुत व्यापक हो सकता है।

रिवर्स डेटा ऐतिहासिक प्रदर्शन पर आधारित है और भविष्य के लाभ का प्रतिनिधित्व नहीं करता है। बाजार की स्थिति में परिवर्तन रणनीति की प्रभावशीलता को प्रभावित कर सकता है, जिसके लिए समय-समय पर मूल्यांकन और पैरामीटर को समायोजित करने की आवश्यकता होती है।

रणनीति स्रोत कोड
/*backtest
start: 2024-11-20 00:00:00
end: 2025-11-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Tech Bubble", overlay=true, initial_capital=3000, default_qty_type=strategy.percent_of_equity,pyramiding = 1,  default_qty_value=100)

//Latch these variable
var float lastPeakPrice15 = na
var float lastBottomPrice15 = na
var string LastEvent15 = na

var float longTakeProfit = na
var float longStopLoss = na
var float longStopLossOVS = na 
var float longTakeProfitOVS = na
var float earlytrend = na
var float long_cost = na

var int L_mode = na // 1 : BRK , 2 : OVS
var int SW_counter = na

var int latch_trend = 0

// == Parameter Tune ==
//BRK_TP = input.float(30.0,title = "TP on Brake up")

BRK_TP = 30.0

// Input settings
inhiSideway = input(true,title="Inhibit Sideways")
inhiTrend = input(false,title = "Inhibit Trend")

//Trailing = input.bool(false,title = "Trailing")
Trailing = false
//SLlimit = input.bool(true,"Long SL limit")
SLlimit = true


trend_gap = input.float(0.0,"Trend Filter Gap")
trend_gap_p = input.float(10,"Trend Filter %")
//TP = input.float(80,title = "Long TP interval")
//maxSL = input.int(14,title = "SL",minval =0)



kPeriod = 9
dPeriod = 3
smoothK = 3
overboughtLevel = 76
oversoldLevel = 24

ema200 = ta.ema(close, 200)
ema_offset = math.max(trend_gap,0.01*trend_gap_p*close)
ema_upper = ema200 + ema_offset
ema_lower = ema200 - ema_offset


// === PERIOD TEST ===
usePeriod  = input.bool(false, "Use Testing Period")
startYear  = input.int(2020, "Start Year")
startMonth = input.int(1, "Start Month")
endYear    = input.int(2025, "End Year")
endMonth   = input.int(10, "End Month")

// === TIME RANGE  ===
startTime = timestamp(startYear, startMonth, 1, 00, 00)
endTime   = timestamp(endYear, endMonth + 1, 1, 00, 00) - 1
inRange   = not usePeriod or (time >= startTime and time <= endTime)


[high15, low15, close15, open15] = request.security(syminfo.tickerid, timeframe.period, [high, low, close, open])
k15 = ta.sma(ta.stoch(close15, high15, low15, kPeriod), smoothK)
d15 = ta.sma(k15, dPeriod)

isPeak15 = k15 > overboughtLevel and ta.crossunder(k15, d15)
isFalseBrk = SW_counter > 80 ? (k15 < 70 and ta.crossunder(k15, d15)) : (k15 > 65 and ta.crossunder(k15, d15)) // Short at early phase of SW

isRebound = k15 >  30 and ta.crossover(k15, d15)
isBottom15 = k15 < oversoldLevel and ta.crossover(k15, d15)
isPullback = k15 < 35 and ta.crossover(k15, d15)



if barstate.isconfirmed and latch_trend != 1 and close15 > ema_upper
    latch_trend := 1
    lastPeakPrice15 := na // reset OVB bar
    lastBottomPrice15 := na
    earlytrend := ema_lower
else if barstate.isconfirmed and latch_trend!= -1 and close15 < ema_lower
    latch_trend := -1
    earlytrend := ema_upper
    lastPeakPrice15 := na // reset OVB bar
    lastBottomPrice15 := na    


trendMarket = latch_trend ==1 and barstate.isconfirmed
sidewaysMarket = latch_trend ==-1 and barstate.isconfirmed

// Code Start Here
if usePeriod and time > endTime
    strategy.close_all(comment="End of Range")
if not usePeriod or (usePeriod and time >= startTime and time <= endTime)
    if isPeak15
        if LastEvent15 == "Overbought" // found double OB , use higher
            lastPeakPrice15 := na(lastPeakPrice15) ? high15 : math.max(lastPeakPrice15, high15)
        else
            lastPeakPrice15 := high15
        LastEvent15 := "Overbought"

    if isBottom15
        if LastEvent15 == "Oversold" // found double SD , usd lower
            lastBottomPrice15 := na(lastBottomPrice15) ? low15 : math.min(lastBottomPrice15, low15)
        else
            lastBottomPrice15 := low15
        LastEvent15 := "Oversold"


    if trendMarket
        // Clear S position
        SW_counter := 0
        if strategy.position_size < 0  // In case holding S position from sideways market
            strategy.close("Short BRK", comment="Trend Change @ " + str.tostring(close15, "#,###"))
            strategy.close("Short OVB", comment="Trend Change @ " + str.tostring(close15, "#,###"))
        
        isSafeLong = close15 < ema_upper-10.0 and close15 >= ema200-20.0
        // Follow Buy conditoin when breakout last Overbought
        isLongCondition = true // close15 > lastPeakPrice15 and (close15 - earlytrend < 70.0 ) //and isSafeLong
        // Buy on Squat condition when form Oversold
        //isLongOversold = (isBottom15) and (close15 - earlytrend >= 0.0 ) and isSafeLong
        isLongOversold =(close15 - earlytrend >= 40.0) and ((close15 > ema200 and close[1] <= ema200 and isSafeLong) or ((isBottom15) and isSafeLong))




        //Open L
        if strategy.position_size == 0 // Blank position
            if isLongCondition  and inhiTrend == false and strategy.position_size == 0
                strategy.entry("Long BRK", strategy.long, comment="Long BRK " + str.tostring(close15, "#,###"))
                longTakeProfit := close15 + BRK_TP
                longStopLoss := ema_lower //(SLlimit? close15 - maxSL : lastPeakPrice15 -5.0)
                longStopLossOVS := ema_lower 
                long_cost := close15
                L_mode := 1 // BRK
                //strategy.exit("TP Long BRK " + str.tostring(longTakeProfit,"#,###"), from_entry="Long BRK", limit=longTakeProfit)
                

            if isLongOversold  and inhiTrend == false
                strategy.entry("Long OVS" , strategy.long, comment = "OVS 1 "  + str.tostring(close15, "#,###"))
                longStopLossOVS := ema_lower //math.min(lastBottomPrice15 - 5.0,ema200-5.0)
                //longTakeProfitOVS := close15 + 15.0
                long_cost := close15
                L_mode := 2 // OVS

        // Has L or S position
        else if strategy.position_size > 0 // Hold L position
            if isLongOversold and inhiTrend == false and close15 < long_cost-5.0
                strategy.entry("Long OVS 2" , strategy.long , comment = "OVS 2 "  + str.tostring(close15, "#,###"))
                longStopLossOVS := ema_lower // lastBottomPrice15 - 20.0
                //longTakeProfitOVS := close15 + 15.0
                long_cost := (long_cost+close15)/2

            isLongWin = close15 > long_cost + 10.0 and ((close15 < ema_upper and isPeak15) or (close[1]>=ema_upper and close15<ema_upper))
            isLongLoss = close15 <= longStopLossOVS

            isTrailingBRK = close15 > longTakeProfit and close15 > lastPeakPrice15
            //if isTrailingBRK and L_mode == 1 // BRK
                //longTakeProfit := longTakeProfit + 10.0  
                //label.new(bar_index, high15,text = "trailing ="+ str.tostring(close15, "#,###"), style=label.style_label_down, size=size.small)
            isLongWinBRK = close15 >= longTakeProfit and close15 < ema_upper
            isLongLossBRK = close15 <= longStopLoss
            // Stop loss L
            if isLongLossBRK
                strategy.close("Long BRK", comment="SL Long BRK @"+ str.tostring(close15, "#,###"))
                L_mode := 0 // clear


            //if close15 <= longStopLossOVS
            if isLongLoss
                if strategy.position_size == 2
                    strategy.close_all(comment="SL OVS @"+ str.tostring(close15, "#,###"))
                    L_mode := 0 // clear
                else
                    strategy.close("Long OVS", comment="SL Long OVS @"+ str.tostring(close15, "#,###"))
                    strategy.close("Long OVS 2", comment="SL Long OVS @"+ str.tostring(close15, "#,###"))
                    L_mode := 0 // clear

            //if close15 > longTakeProfitOVS //(close15 > longTakeProfitOVS -8.0 and isFalseBrk)
            if isLongWin
                if strategy.position_size == 2
                    strategy.close_all(comment="TP OVS @"+ str.tostring(close15, "#,###"))
                    L_mode := 0 // clear
                else
                    strategy.close("Long OVS", comment="TP OVS 1@"+ str.tostring(close15, "#,###"))
                    strategy.close("Long OVS 2", comment="TP OVS 2 @"+ str.tostring(close15, "#,###"))
                    L_mode := 0 // clear

            if false // isLongWinBRK
                strategy.close("Long BRK", comment="TP Long BRK @"+ str.tostring(close15, "#,###"))
                L_mode := 0 // clear


            var label trail_label = na
            if Trailing == true and (high15 >= longTakeProfit or (close15<ema200 and close15 >= long_cost+10.0)) // any part of price hit tarket
                if isLongCondition   // meet creteria to open L again 
                    longTakeProfit := close15 + 80.0 
                    longStopLoss := (SLlimit? close15 - 15.0: lastBottomPrice15)
                    trail_label := label.new(bar_index, high15,text = "trailing ="+ str.tostring(close15, "#,###"), style=label.style_label_down, size=size.small)
                else // Take Profit
                    strategy.close("Long BRK", comment="Reach" + str.tostring(longTakeProfit,"#,###")) 


    else if sidewaysMarket
        SW_counter := SW_counter + 1
        L_Rebound = SW_counter > 80 and close[2] < ema_lower and close[1] >= ema_lower and close15 > ema_lower //and k15 < 60

        if strategy.position_size > 0 
            if SW_counter < 10 // close15 < longStopLoss // In case holding L position from Trend market
                strategy.close("Long BRK", comment="Reverse SW " + str.tostring(close15, "#,###") )
                L_mode := 0 // clear

            if SW_counter < 10 // close15 < longStopLossOVS
                strategy.close_all(comment="Stop all " + str.tostring(close15, "#,###"))
                //strategy.close("Long OVS", comment="Stop Oversold " + str.tostring(close15, "#,###") )
                //strategy.close("Long OVS 2", comment="SL Long OVS @"+ str.tostring(close15, "#,###"))
                L_mode := 0 // clear

            if SW_counter < 10 //close15 >= ema200-5.0
                strategy.close("Long Rebound", comment="TP Rebound " + str.tostring(close15, "#,###") )
        
        if strategy.position_size == 0 and L_Rebound and inhiSideway == false
            strategy.entry("Long Rebound", strategy.long, comment="Rebound " + str.tostring(close15, "#,###"))
            strategy.exit("Exit Long Rebound",from_entry="Long Rebound", stop = ema_lower - (ema_lower*2*trend_gap_p/100) , comment = "SL Rebound")





var label DebugLabel = na
label.delete(DebugLabel)
if not na(latch_trend)
    DebugLabel := label.new(bar_index, high15, text="trend " + str.tostring(latch_trend,"#") , style=label.style_label_down, color=color.blue, textcolor=color.white, size=size.small)


// Plot Bollinger Bands
//plot(sidewaysMarket ? lastBottomPrice15 : na , color=color.yellow, style=plot.style_circles)
//plot(sidewaysMarket ? lastPeakPrice15 : na , color=color.blue, style=plot.style_circles)
plot(trendMarket ? lastBottomPrice15 : na, color=color.red, style=plot.style_circles)
plot(trendMarket ? lastPeakPrice15 : na, color=color.green, style=plot.style_circles)
bgcolor(sidewaysMarket ? color.new(color.black, 90) : na)
bgcolor(trendMarket ? color.new(color.lime, 90) : na)

// Plot the three lines
plot(ema200, title="EMA 200",       color=color.white)
plot(ema_upper,  title="EMA 200 + 20",  color=color.white)
plot(ema_lower,  title="EMA 200 - 20",  color=color.white)