उच्च निम्न ब्रेकर बैकटेस्ट रणनीति

लेखक:चाओझांग, दिनांक: 2023-11-27 15:37:13
टैगः

img

अवलोकन

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

रणनीति तर्क

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

खरीद संकेत उत्पन्न करने पर, रणनीति उस मूल्य पर लंबी स्थिति में प्रवेश करती है, जिसमें स्टॉप लॉस मूल्य और ले लाभ मूल्य निर्धारित होता है। यह स्टॉप लॉस मूल्य को छूने पर स्टॉप लॉस के साथ स्थिति से बाहर निकलता है, और ले लाभ मूल्य को छूने पर लाभ के साथ बाहर निकलता है। बिक्री संकेतों के लिए तर्क समान है।

लाभ विश्लेषण

इस उच्च निम्न ब्रेकर बैकटेस्ट रणनीति के निम्नलिखित फायदे हैंः

  1. तर्क सरल और समझने/लागू करने में आसान है।
  2. यह शेयर की कीमतों की कुछ प्रवृत्ति विशेषताओं को पकड़ सकता है।
  3. सर्वोत्तम पैरामीटर संयोजन खोजने के लिए मापदंडों को अनुकूलित किया जा सकता है।
  4. अंतर्निहित स्टॉप लॉस और ले लाभ जोखिम को नियंत्रित करता है।
  5. विज़ुअलाइज़ेशन पैरामीटर ट्यूनिंग और परिणाम विश्लेषण को बहुत आसान बनाता है।

जोखिम विश्लेषण

इस रणनीति में कुछ जोखिम भी हैं:

  1. कई फ्लिप-फ्लॉप ट्रेडों और ओवर-ट्रेडिंग के लिए प्रवण।
  2. कीमत में उतार-चढ़ाव होने पर बार-बार स्थिति खोलना।
  3. यदि मापदंडों को ठीक से निर्धारित नहीं किया जाता है तो प्रमुख रुझान के अवसरों को खोना।
  4. मूल्य उतार-चढ़ाव की आवृत्ति और परिमाण को ध्यान में नहीं रखते हुए।
  5. अन्य संकेतकों के साथ कोई संकेत सत्यापन नहीं।

निम्नलिखित पहलू इन जोखिमों को कम करने में मदद कर सकते हैंः

  1. स्टॉप लॉस की दूरी को कम करके प्रतीक्षा समय बढ़ाएं।
  2. बार-बार प्रवेश करने से बचने के लिए अधिक प्रवेश मानदंड जोड़ें।
  3. इष्टतम संयोजन खोजने के लिए मापदंडों का अनुकूलन करें।
  4. अन्य संकेतकों के साथ फ़िल्टर की स्थिति जोड़ें।

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

इस रणनीति में निम्नलिखित तरीकों से सुधार किया जा सकता हैः

  1. अधिक व्यवस्थित परीक्षण का उपयोग करके पैरामीटर अनुकूलन।
  2. अन्य संकेतक जैसे चलती औसत के साथ सिग्नल फ़िल्टर जोड़ें।
  3. ब्रेकआउट सीमाओं को अनुकूलित करने के लिए एटीआर का उपयोग करके मूल्य अस्थिरता पर विचार करें।
  4. मापदंडों को अनुकूलित करने के लिए ट्रेंडिंग बनाम ऑसिलेटिंग बाजारों में अंतर करें।
  5. स्थिति के आकार के नियमों में सुधार करना, उदाहरण के लिए महत्वपूर्ण नुकसान के बाद नई स्थिति खोलना बंद करना।

सारांश

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


/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)

// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100


candlesBack = input(title="Number of candles back",  defval=50)
useHighAndLows =  input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum =  input(title="Number of candles back to ignore for last high/low",  defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)

getIndexOfLowestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] <= current
            index := i
            current := series[i]
    index

getIndexOfHighestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] >= current
            index := i
            current := series[i]
    index

indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)

max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]

barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange

isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)

alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")

if high > max 
    max := high
    barsSinceLastHigh := 0

if low < min
    min := low
    barsSinceLastLow := 0 

plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)

// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)

goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)

strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)

strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
        
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)


अधिक