स्रोत - पिछले स्रोत के अनुसार, फिर अपने परिवर्तन का पूर्ण मान लेता है और इसे स्रोत के साथ सामान्य करता है।
गतिशील लंबाई गणनाः बाजार की स्थितियों के आधार पर सूचक लंबाई मापदंडों को समायोजित करने के लिए BlackCat1402
मिश्रित विश्लेषणः एक समग्र संकेतक उत्पन्न करने के लिए VAWSI, ट्रेंड दृढ़ता और ATR से रीडिंग को जोड़ती है। कम अंतिम मूल्य आसन्न उलटफेर का संकेत देते हैं, जबकि उच्च मूल्य अस्थिर या चंचल बाजारों का सुझाव देते हैं।
गतिशील स्टॉप-लॉस/टेक-प्रॉफिटः समग्र संकेतक और वर्तमान रुझान की दिशा के आधार पर गतिशील स्टॉप-लॉस और टेक-प्रॉफिट स्तरों की गणना करता है।
ट्रेड सिग्नलः क्रॉसओवर की पुष्टि करता है और जब कीमत पूरी तरह से गणना की गई सीमा रेखा को पार करती है तो ट्रेड सिग्नल उत्पन्न करता है।
बहुआयामी विश्लेषणः कई संकेतकों को मिलाकर, रणनीति विभिन्न कोणों से बाजार का विश्लेषण कर सकती है, निर्णय की सटीकता में सुधार कर सकती है।
अनुकूलन क्षमताः गतिशील लंबाई गणना से रणनीति को विभिन्न बाजार स्थितियों के अनुकूल बनाने में मदद मिलती है, जिससे इसकी लचीलापन बढ़ जाती है।
जोखिम प्रबंधन: गतिशील स्टॉप-लॉस और टेक-प्रॉफिट सेटिंग्स जोखिम को बेहतर ढंग से नियंत्रित करने और बाजार परिवर्तनों के अनुकूल होने में मदद करती हैं।
मूल संकेतकः VAWSI और ट्रेंड पर्सिस्टेंस संकेतक अद्वितीय बाजार अंतर्दृष्टि प्रदान करते हैं जो पारंपरिक संकेतकों द्वारा अनदेखी किए गए संकेतों को पकड़ सकते हैं।
एंटी-रिपेंटिंगः बारस्टेट.इसकन्फर्मड का उपयोग संकेतों को फिर से पेंट न करने के लिए सुनिश्चित करता है, बैकटेस्टिंग सटीकता में सुधार करता है।
अनुकूलन क्षमताः कई समायोज्य मापदंडों से रणनीति को विभिन्न व्यापारिक साधनों और समय सीमाओं के लिए अनुकूलित किया जा सकता है।
अति-अनुकूलन: बड़ी संख्या में मापदंड अति-अनुकूलन का कारण बन सकते हैं, जिससे लाइव ट्रेडिंग में खराब प्रदर्शन हो सकता है।
बाजार अनुकूलन क्षमताः कुछ बाजारों में अच्छा प्रदर्शन करते हुए, यह सभी बाजार स्थितियों के लिए उपयुक्त नहीं हो सकता है, विशेष रूप से कम अस्थिरता वाले बाजारों में।
जटिलता: रणनीति की जटिलता के कारण इसे समझना और बनाए रखना मुश्किल हो सकता है, जिससे परिचालन त्रुटियों का जोखिम बढ़ जाता है।
कम्प्यूटेशन गहन: कई कस्टम संकेतक और गतिशील गणनाओं के परिणामस्वरूप उच्च कम्प्यूटेशनल लोड हो सकता है, जो निष्पादन गति को प्रभावित करता है।
ऐतिहासिक आंकड़ों पर निर्भरता: रणनीति में गणना के लिए बड़ी मात्रा में ऐतिहासिक आंकड़ों का उपयोग किया गया है, जिससे कुछ स्थितियों में विलंब हो सकता है।
पैरामीटर अनुकूलनः विभिन्न बाजार स्थितियों में रणनीति प्रदर्शन में सुधार के लिए विभिन्न वजन और लंबाई मापदंडों को अनुकूलित करने के लिए मशीन लर्निंग एल्गोरिदम का उपयोग करें।
मार्केट स्टेट रिकग्निशनः विभिन्न बाजार वातावरणों में स्वचालित रूप से रणनीति मापदंडों को समायोजित करने के लिए एक मार्केट स्टेट रिकग्निशन मॉड्यूल जोड़ें।
सिग्नल फ़िल्टरिंगः झूठे संकेतों को कम करने के लिए अतिरिक्त फ़िल्टरिंग तंत्र, जैसे कि प्रवृत्ति शक्ति की सीमाएं, पेश करें।
वॉल्यूम विश्लेषणः संकेत की विश्वसनीयता बढ़ाने के लिए वॉल्यूम पैटर्न पहचान को लागू करके वॉल्यूम विश्लेषण को गहरा करें।
बहु-समय-सीमा विश्लेषणः व्यापारिक निर्णयों की मजबूती में सुधार के लिए कई समय-सीमाओं से संकेतों को एकीकृत करें।
जोखिम प्रबंधन अनुकूलनः अधिक परिष्कृत जोखिम प्रबंधन रणनीतियों को लागू करें, जैसे गतिशील स्थिति आकार और बहु-स्तरीय स्टॉप-लॉस।
कम्प्यूटेशनल दक्षताः गणना दक्षता में सुधार के लिए कोड का अनुकूलन करें, विशेष रूप से बड़ी मात्रा में ऐतिहासिक डेटा को संसाधित करते समय।
VAWSI और ट्रेंड पर्सिस्टेंस रिवर्सल स्ट्रेटेजी एक जटिल और व्यापक ट्रेडिंग सिस्टम है जो कई अभिनव संकेतकों और गतिशील पैरामीटर समायोजन को जोड़ती है। इसकी ताकत बहु-आयामी बाजार विश्लेषण और अनुकूलन क्षमता में निहित है, जिससे यह विभिन्न बाजार स्थितियों में संभावित उलट अवसरों की तलाश करने की अनुमति देता है। हालांकि, रणनीति की जटिलता अति-अनुकूलन और अनुकूलन क्षमता के संदर्भ में चुनौतियां भी लाती है।
विशेष रूप से पैरामीटर समायोजन, बाजार की स्थिति की मान्यता और जोखिम प्रबंधन में आगे अनुकूलन के माध्यम से, इस रणनीति में एक शक्तिशाली ट्रेडिंग उपकरण बनने की क्षमता है। हालांकि, उपयोगकर्ताओं को ध्यान रखना चाहिए कि कोई भी रणनीति सही नहीं है, और निरंतर निगरानी और समायोजन आवश्यक हैं। व्यावहारिक अनुप्रयोग में, डेमो खातों पर गहन परीक्षण करने और इस रणनीति को अन्य विश्लेषणात्मक उपकरणों और बाजार ज्ञान के साथ जोड़ने की सिफारिश की जाती है।
/*backtest start: 2024-05-21 00:00:00 end: 2024-06-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("VAWSI and Trend Persistance Reversal", overlay=true, max_bars_back = 4999, process_orders_on_close = true) //INPUTS sltp = input.float(title = "Minimum SL/TP", defval = 5.0) rsi_weight = input.float(title = "Wawsi weight", defval = 100.0) half_weight= input.float(title = "Trend Persistence Weight", defval = 79.0) atr_weight = input.float(title = "ATR Weight", defval = 20.0) com_mult = input.float(title = "Combination Mult", defval = 1, step = .001) smoothing = input.int(title = "Trend Persistence smooth length", defval = 3) CycPart = input.float(1.1, step = .001, title = "Length Cycle Decimal") src = close hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src) //BlackCat1402's Dynamic Length Calculation EhlersHoDyDC(Price, CycPart) => // Vars: Smooth = 0.00 Detrender = 0.00 I1 = 0.00 Q1 = 0.00 jI = 0.00 jQ = 0.00 I2 = 0.00 Q2 = 0.00 Re = 0.00 Im = 0.00 Period = 0.00 SmoothPeriod = 0.00 pi = 2 * math.asin(1) DomCycle = 0.0 //Hilbert Transform Smooth := bar_index > 5 ? (4 * Price + 3 * nz(Price[1]) + 2 * nz(Price[2]) + nz(Price[3])) / 10 : Smooth Detrender := bar_index > 5 ? (.0962 * Smooth + .5769 * nz(Smooth[2]) - .5769 * nz(Smooth[4]) - .0962 * nz(Smooth[6])) * (.075 * nz(Period[1]) + .54) : Detrender //Compute InPhase and Quadrature components Q1 := bar_index > 5 ? (.0962 * Detrender + .5769 * nz(Detrender[2]) - .5769 * nz(Detrender[4]) - .0962 * nz(Detrender[6])) * (.075 * nz(Period[1]) + .54) : Q1 I1 := bar_index > 5 ? nz(Detrender[3]) : I1 //Advance the phase of I1 and Q1 by 90 degrees jI := (.0962 * I1 + .5769 * nz(I1[2]) - .5769 * nz(I1[4]) - .0962 * nz(I1[6])) * (.075 * nz(Period[1]) + .54) jQ := (.0962 * Q1 + .5769 * nz(Q1[2]) - .5769 * nz(Q1[4]) - .0962 * nz(Q1[6])) * (.075 * nz(Period[1]) + .54) //Phasor addition for 3 bar averaging I2 := I1 - jQ Q2 := Q1 + jI //Smooth the I and Q components before applying the discriminator I2 := .2 * I2 + .8 * nz(I2[1]) Q2 := .2 * Q2 + .8 * nz(Q2[1]) //Homodyne Discriminator Re := I2 * nz(I2[1]) + Q2 * nz(Q2[1]) Im := I2 * nz(Q2[1]) - Q2 * nz(I2[1]) Re := .2 * Re + .8 * nz(Re[1]) Im := .2 * Im + .8 * nz(Im[1]) Period := Im != 0 and Re != 0 ? 2 * pi / math.atan(Im / Re) : Period Period := Period > 1.5 * nz(Period[1]) ? 1.5 * nz(Period[1]) : Period Period := Period < .67 * nz(Period[1]) ? .67 * nz(Period[1]) : Period //Limit Period to be within the bounds of 6 bar and 50 bar cycles Period := Period < 6 ? 6 : Period Period := Period > 50 ? 50 : Period Period := .2 * Period + .8 * nz(Period[1]) SmoothPeriod := .33 * Period + .67 * nz(SmoothPeriod[1]) //it can add filter to Period here DomCycle := math.ceil(CycPart * SmoothPeriod) > 34 ? 34 : math.ceil(CycPart * SmoothPeriod) < 1 ? 1 : math.ceil(CycPart * SmoothPeriod) DomCycle wma(src, length) => wma = 0.0 sum = 0.0 norm = length * (length + 1) / 2 for i = 0 to length - 1 sum := sum + src[i] * (length - i) wma := sum / norm length = math.round(math.ceil(EhlersHoDyDC(hclose,CycPart))) // Traditional Function initialization highest_custom(src, length) => x = src for i = 0 to math.min(length, 4999) if src[i] > x x := src[i] x lowest_custom(src, length) => x = src for i = 0 to math.min(length, 4999) if src[i] < x x := src[i] x rma(src, len) => sum = 0.0 for i = 0 to len - 1 math.min(1, len) sum += src[i] rma = sum / len rma := nz(rma[1]) * (len - 1) / len + src / len sma(src, length) => math.sum(src, length) / length hln(src, length) => TR = math.max(math.abs(src - src[1]), high - low) TR := src / math.abs(ta.change(rma(TR, length))) TR := (1 / TR) * 100 vawma(src, length) => atr = ta.atr(1) aavg = sma(atr, length) vavg = sma(volume, length) weighted_sum = 0.0 sum_weights = 0.0 weighted = 0.0 for i = 0 to length weight = ((volume[i] / vavg + (atr[i]) / aavg) / 2) weighted_sum += src[i] * weight sum_weights += weight a = (weighted_sum / sum_weights) vawsi(src, len) => rmaUp = vawma(math.max(ta.change(src), 0), len) rmaDown = vawma(-math.min(ta.change(src), 0), len) rsi = 100 - (100 / (1 + rmaUp / rmaDown)) trendPersistence(src, length, smoothing) => trendu = math.abs(src - highest_custom(src, length)) trendd = math.abs(src - lowest_custom(src, length)) trendu := wma(trendu, smoothing) trendd := wma(trendd, smoothing) trendu := ta.change(ta.cum(trendu)) trendd := ta.change(ta.cum(trendd)) trend = wma(math.max(trendu, trendd), smoothing) rmaUp = rma(math.max(ta.change(trend), 0), length) rmaDown = rma(-math.min(ta.change(trend), 0), length) rsi = 100 - (100 / (1 + rmaUp / rmaDown)) //Strategy Calculations sl = ((100 - sltp) / 100) * close tp = ((100 + sltp) / 100) * close var bool crossup = na var bool crossdown = na var float dir = na var float BearGuy = 0 BullGuy = ta.barssince(crossup or crossdown) if na(BullGuy) BearGuy += 1 else BearGuy := math.min(BullGuy, 4999) rsiw = rsi_weight / 100 cew = half_weight / 100 atrw = atr_weight / 100 atr = hln(hclose, length) * atrw ce = 1 / trendPersistence(hclose, length, smoothing) com = 1 / math.max(math.abs(vawsi(hclose, length) - 50) * 2, 20) comfin = (((com * rsiw) + (ce * cew) - atr)) * com_mult lower = highest_custom(math.min((math.max(highest_custom(src, BearGuy) * (1 - comfin), sl)), src[1]), BearGuy) upper = lowest_custom(math.max((math.min(lowest_custom(src, BearGuy) * (1 + comfin), tp)), src[1]), BearGuy) var float thresh = na if na(thresh) thresh := lower if na(dir) dir := 1 if crossdown dir := -1 if crossup dir := 1 if dir == 1 thresh := lower if dir == -1 thresh := upper crossup := ta.crossover(hclose, thresh) and barstate.isconfirmed crossdown := ta.crossunder(hclose, thresh) and barstate.isconfirmed //STRATEGY if crossup strategy.entry("long", strategy.long) if crossdown strategy.entry("Short", strategy.short) //PLOTTING col = hclose > thresh ? color.lime : color.red plot(thresh, linewidth = 2, color = color.new(col[1], 0))