बोलिंगर बैंड और गतिशील समर्थन/प्रतिरोध मात्रात्मक रणनीति के साथ संयुक्त आरएसआई

लेखक:चाओझांग, दिनांकः 2024-01-24 15:19:22
टैगः

img

अवलोकन

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

रणनीति तर्क

इस रणनीति में 3 प्रमुख घटक शामिल हैं आरएसआई, बोलिंगर बैंड और डायनेमिक एस/आर।

आरएसआई घटक ओवरबॉट / ओवरसोल्ड स्तरों का न्याय करता है। आरएसआई 30 से नीचे गिरने से ओवरसोल्ड स्थिति का सुझाव देता है और ट्रिगर खरीद संकेत। आरएसआई 70 से ऊपर बढ़ने से ओवरबोल्ड स्थिति का सुझाव देता है और ट्रिगर बेच संकेत।

बोलिंगर बैंड ऊपरी/निम्न बैंड हैं जो मूल्य चलती औसत और मानक विचलन से गणना की जाती हैं, यह निर्धारित करने के लिए कि क्या मूल्य सामान्य उतार-चढ़ाव सीमा से बाहर निकल गया है। ऊपरी बैंड के करीब कीमत एक बिक्री का सुझाव देती है जबकि निचला बैंड एक खरीद का सुझाव देता है।

एस/आर घटक एक गतिशील गणना पद्धति का उपयोग करता है, जो ऐतिहासिक उच्च/निम्न कीमतों (या बंद/खुले मूल्य) के आधार पर कुछ लुकबैक अवधि और प्रतिशत सीमाओं के साथ-साथ ऐतिहासिक मूल्य उलट बिंदुओं के भीतर महत्वपूर्ण एस/आर स्तर उत्पन्न करता है। यह बिक्री संकेत को ट्रिगर करता है जब मूल्य प्रमुख प्रतिरोध स्तरों तक बढ़ता है, और खरीद संकेत जब मूल्य समर्थन स्तरों तक गिरता है।

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

लाभ

  1. मौलिक सूचक आरएसआई तकनीकी विश्लेषण सूचक बोलिंगर बैंड्स के साथ संयुक्त। आरएसआई मूल रूप से ओवरबॉट/ओवरसोल्ड स्तरों का आकलन करता है जबकि बोलिंगर बैंड्स तकनीकी मूल्य पैटर्न निर्धारित करता है।

  2. गतिशील एस/आर गणना वास्तविक एस/आर के करीब रहती है जो मूल्य आंदोलन को नियंत्रित करती है।

  3. रुझान फ़िल्टर जोड़ने से आरएसआई और बोलिंगर बैंड के साथ संयोजन में शोर को फ़िल्टर करके संकेत की सटीकता में और सुधार होता है।

जोखिम

  1. गलत आरएसआई पैरामीटर सेटिंग्स गलत आकलन का कारण बन सकती हैं। बहुत कम आरएसआई लंबाई शोर को बढ़ाती है। गलत ओवरबॉट / ओवरसोल्ड थ्रेशोल्ड सेटअप भी त्रुटियों का कारण बनता है।

  2. गलत बोलिंगर बैंड पैरामीटर जैसे लंबाई, StdDev गुणक न्याय की सटीकता को प्रभावित करते हैं।

  3. गतिशील एस/आर ऐतिहासिक उच्च/निम्न कीमतों पर निर्भर करता है, इस प्रकार पिछड़ जाता है। उपयोगकर्ताओं को वर्तमान मूल्य के लिए अधिक प्रासंगिकता के लिए एस/आर मापदंडों को अनुकूलित करना चाहिए।

  4. इस रणनीति में कई संकेतकों के साथ अपेक्षाकृत जटिल तर्क है जो संभावित रूप से हस्तक्षेप का कारण बनते हैं। उपयोगकर्ताओं को संघर्ष को कम करने के लिए मापदंडों का परीक्षण करना चाहिए। प्रवेश मानदंडों को सरल बनाने से त्रुटियों को कम करने में भी मदद मिलती है।

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

  1. लंबाई, ओवरबॉट/ओवरसोल्ड सीमाओं सहित आरएसआई मापदंडों का परीक्षण और अनुकूलन करें।

  2. लंबाई और StdDev गुणक सहित बोलिंगर बैंड्स मापदंडों का परीक्षण और अनुकूलन करें।

  3. गतिशील एस/आर मापदंडों को मूल्य के करीब एस/आर स्तरों को संरेखित करने के लिए अनुकूलित करें, जैसे कि कम लुकबैक अवधि या कम ऐतिहासिक उच्च/निम्न कीमतों का उपयोग करना।

  4. सटीकता में सुधार के लिए आरएसआई के साथ अतिरिक्त सहायक संकेतकों जैसे कि केडीजे, एमएसीडी आदि का परीक्षण करें।

  5. ट्रेंड फिल्टर मापदंडों का परीक्षण और अनुकूलन, विशेष रूप से फिल्टर लंबाई, रखरखाव अवधि को बढ़ाने और अनावश्यक रिवर्स ऑर्डर को कम करने के लिए।

निष्कर्ष

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


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI + BB + S/R Strategy with Trend Filter", shorttitle="RSI + BB + S/R + Trend Filter", overlay=true)

// RSI Settings
rsi_length = input.int(14, title="RSI Length")
overbought = input.int(70, title="Overbought Level")
oversold = input.int(30, title="Oversold Level")

// Bollinger Bands Settings
bb_length = input.int(20, title="BB Length")
bb_deviation = input.float(2.0, title="BB Deviation")

// Dynamic Support/Resistance Settings
pivot_period = input.int(10, title="Pivot Period")
pivot_source = input.string("High/Low", title="Pivot Source", options=["High/Low", "Close/Open"])
max_pivots = input.int(20, title="Maximum Number of Pivot", minval=5, maxval=100)
channel_width = input.int(10, title="Maximum Channel Width %", minval=1)
max_sr_levels = input.int(5, title="Maximum Number of S/R Levels", minval=1, maxval=10)
min_strength = input.int(2, title="Minimum Strength", minval=1, maxval=10)

// Trend Filter Settings
use_trend_filter = input.bool(false, title="Use Trend Filter")
trend_filter_length = input.int(50, title="Trend Filter Length")

// Calculate RSI and Bollinger Bands
rsi = ta.rsi(close, rsi_length)
basis = ta.sma(close, bb_length)
deviation = ta.stdev(close, bb_length)
upper_band = basis + bb_deviation * deviation
lower_band = basis - bb_deviation * deviation

// Plot Bollinger Bands on the chart
plot(upper_band, color=color.blue, title="Upper Bollinger Band")
plot(lower_band, color=color.red, title="Lower Bollinger Band")

// Dynamic Support/Resistance Calculation
float src1 = pivot_source == "High/Low" ? high : math.max(close, open)
float src2 = pivot_source == "High/Low" ? low : math.min(close, open)
float ph = ta.pivothigh(src1, pivot_period, pivot_period)
float pl = ta.pivotlow(src2, pivot_period, pivot_period)


// Calculate maximum S/R channel zone width
prdhighest = ta.highest(300)
prdlowest = ta.lowest(300)
cwidth = (prdhighest - prdlowest) * channel_width / 100

var pivotvals = array.new_float(0)

if ph or pl
    array.unshift(pivotvals, ph ? ph : pl)
    if array.size(pivotvals) > max_pivots
        array.pop(pivotvals)

get_sr_vals(ind) =>
    float lo = array.get(pivotvals, ind)
    float hi = lo
    int numpp = 0
    for y = 0 to array.size(pivotvals) - 1 by 1
        float cpp = array.get(pivotvals, y)
        float wdth = cpp <= lo ? hi - cpp : cpp - lo
        if wdth <= cwidth
            if cpp <= hi
                lo := math.min(lo, cpp)
            else
                hi := math.max(hi, cpp)
            numpp += 1
    [hi, lo, numpp]

var sr_up_level = array.new_float(0)
var sr_dn_level = array.new_float(0)
sr_strength = array.new_float(0)

find_loc(strength) =>
    ret = array.size(sr_strength)
    for i = ret > 0 ? array.size(sr_strength) - 1 : na to 0 by 1
        if strength <= array.get(sr_strength, i)
            break
        ret := i
    ret

check_sr(hi, lo, strength) =>
    ret = true
    for i = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
        if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) <= hi or array.get(sr_dn_level, i) >= lo and array.get(sr_dn_level, i) <= hi
            if strength >= array.get(sr_strength, i)
                array.remove(sr_strength, i)
                array.remove(sr_up_level, i)
                array.remove(sr_dn_level, i)
            else
                ret := false
            break
    ret

if ph or pl
    array.clear(sr_up_level)
    array.clear(sr_dn_level)
    array.clear(sr_strength)
    for x = 0 to array.size(pivotvals) - 1 by 1
        [hi, lo, strength] = get_sr_vals(x)
        if check_sr(hi, lo, strength)
            loc = find_loc(strength)
            if loc < max_sr_levels and strength >= min_strength
                array.insert(sr_strength, loc, strength)
                array.insert(sr_up_level, loc, hi)
                array.insert(sr_dn_level, loc, lo)
                if array.size(sr_strength) > max_sr_levels
                    array.pop(sr_strength)
                    array.pop(sr_up_level)
                    array.pop(sr_dn_level)

// Calculate the Trend Filter
trend_filter = use_trend_filter ? ta.sma(close, trend_filter_length) : close

// Buy Condition (RSI + Proximity to Support + Trend Filter)
buy_condition = ta.crossover(rsi, oversold) and close <= ta.highest(high, max_sr_levels) and close >= ta.lowest(low, max_sr_levels) and (not use_trend_filter or close > trend_filter)

// Sell Condition (RSI + Proximity to Resistance + Trend Filter)
sell_condition = ta.crossunder(rsi, overbought) and close >= ta.lowest(low, max_sr_levels) and close <= ta.highest(high, max_sr_levels) and (not use_trend_filter or close < trend_filter)

// Strategy Orders
strategy.entry("Buy", strategy.long, when = buy_condition)
strategy.entry("Sell", strategy.short, when = sell_condition)

अधिक