संसाधन लोड हो रहा है... लोड करना...

VAWSI और गतिशील लंबाई गणना बहु-सूचक विश्लेषण प्रणाली के साथ प्रवृत्ति स्थिरता उलट रणनीति

लेखक:चाओझांग, दिनांकः 2024-06-21 15:36:43
टैगःVAWSIएटीआरआरएसआईडब्ल्यूएमएएसएमएआरएमए

स्रोत - पिछले स्रोत के अनुसार, फिर अपने परिवर्तन का पूर्ण मान लेता है और इसे स्रोत के साथ सामान्य करता है।

  1. गतिशील लंबाई गणनाः बाजार की स्थितियों के आधार पर सूचक लंबाई मापदंडों को समायोजित करने के लिए BlackCat1402 की गतिशील लंबाई गणना विधि का उपयोग करता है।

  2. मिश्रित विश्लेषणः एक समग्र संकेतक उत्पन्न करने के लिए VAWSI, ट्रेंड दृढ़ता और ATR से रीडिंग को जोड़ती है। कम अंतिम मूल्य आसन्न उलटफेर का संकेत देते हैं, जबकि उच्च मूल्य अस्थिर या चंचल बाजारों का सुझाव देते हैं।

  3. गतिशील स्टॉप-लॉस/टेक-प्रॉफिटः समग्र संकेतक और वर्तमान रुझान की दिशा के आधार पर गतिशील स्टॉप-लॉस और टेक-प्रॉफिट स्तरों की गणना करता है।

  4. ट्रेड सिग्नलः क्रॉसओवर की पुष्टि करता है और जब कीमत पूरी तरह से गणना की गई सीमा रेखा को पार करती है तो ट्रेड सिग्नल उत्पन्न करता है।

रणनीतिक लाभ

  1. बहुआयामी विश्लेषणः कई संकेतकों को मिलाकर, रणनीति विभिन्न कोणों से बाजार का विश्लेषण कर सकती है, निर्णय की सटीकता में सुधार कर सकती है।

  2. अनुकूलन क्षमताः गतिशील लंबाई गणना से रणनीति को विभिन्न बाजार स्थितियों के अनुकूल बनाने में मदद मिलती है, जिससे इसकी लचीलापन बढ़ जाती है।

  3. जोखिम प्रबंधन: गतिशील स्टॉप-लॉस और टेक-प्रॉफिट सेटिंग्स जोखिम को बेहतर ढंग से नियंत्रित करने और बाजार परिवर्तनों के अनुकूल होने में मदद करती हैं।

  4. मूल संकेतकः VAWSI और ट्रेंड पर्सिस्टेंस संकेतक अद्वितीय बाजार अंतर्दृष्टि प्रदान करते हैं जो पारंपरिक संकेतकों द्वारा अनदेखी किए गए संकेतों को पकड़ सकते हैं।

  5. एंटी-रिपेंटिंगः बारस्टेट.इसकन्फर्मड का उपयोग संकेतों को फिर से पेंट न करने के लिए सुनिश्चित करता है, बैकटेस्टिंग सटीकता में सुधार करता है।

  6. अनुकूलन क्षमताः कई समायोज्य मापदंडों से रणनीति को विभिन्न व्यापारिक साधनों और समय सीमाओं के लिए अनुकूलित किया जा सकता है।

रणनीतिक जोखिम

  1. अति-अनुकूलन: बड़ी संख्या में मापदंड अति-अनुकूलन का कारण बन सकते हैं, जिससे लाइव ट्रेडिंग में खराब प्रदर्शन हो सकता है।

  2. बाजार अनुकूलन क्षमताः कुछ बाजारों में अच्छा प्रदर्शन करते हुए, यह सभी बाजार स्थितियों के लिए उपयुक्त नहीं हो सकता है, विशेष रूप से कम अस्थिरता वाले बाजारों में।

  3. जटिलता: रणनीति की जटिलता के कारण इसे समझना और बनाए रखना मुश्किल हो सकता है, जिससे परिचालन त्रुटियों का जोखिम बढ़ जाता है।

  4. कम्प्यूटेशन गहन: कई कस्टम संकेतक और गतिशील गणनाओं के परिणामस्वरूप उच्च कम्प्यूटेशनल लोड हो सकता है, जो निष्पादन गति को प्रभावित करता है।

  5. ऐतिहासिक आंकड़ों पर निर्भरता: रणनीति में गणना के लिए बड़ी मात्रा में ऐतिहासिक आंकड़ों का उपयोग किया गया है, जिससे कुछ स्थितियों में विलंब हो सकता है।

अनुकूलन दिशाएँ

  1. पैरामीटर अनुकूलनः विभिन्न बाजार स्थितियों में रणनीति प्रदर्शन में सुधार के लिए विभिन्न वजन और लंबाई मापदंडों को अनुकूलित करने के लिए मशीन लर्निंग एल्गोरिदम का उपयोग करें।

  2. मार्केट स्टेट रिकग्निशनः विभिन्न बाजार वातावरणों में स्वचालित रूप से रणनीति मापदंडों को समायोजित करने के लिए एक मार्केट स्टेट रिकग्निशन मॉड्यूल जोड़ें।

  3. सिग्नल फ़िल्टरिंगः झूठे संकेतों को कम करने के लिए अतिरिक्त फ़िल्टरिंग तंत्र, जैसे कि प्रवृत्ति शक्ति की सीमाएं, पेश करें।

  4. वॉल्यूम विश्लेषणः संकेत की विश्वसनीयता बढ़ाने के लिए वॉल्यूम पैटर्न पहचान को लागू करके वॉल्यूम विश्लेषण को गहरा करें।

  5. बहु-समय-सीमा विश्लेषणः व्यापारिक निर्णयों की मजबूती में सुधार के लिए कई समय-सीमाओं से संकेतों को एकीकृत करें।

  6. जोखिम प्रबंधन अनुकूलनः अधिक परिष्कृत जोखिम प्रबंधन रणनीतियों को लागू करें, जैसे गतिशील स्थिति आकार और बहु-स्तरीय स्टॉप-लॉस।

  7. कम्प्यूटेशनल दक्षताः गणना दक्षता में सुधार के लिए कोड का अनुकूलन करें, विशेष रूप से बड़ी मात्रा में ऐतिहासिक डेटा को संसाधित करते समय।

निष्कर्ष

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))



संबंधित

अधिक