हाई-लो ब्रेकआउट बैकटेस्टिंग रणनीति


निर्माण तिथि: 2023-11-27 15:37:13 अंत में संशोधित करें: 2023-11-27 15:37:13
कॉपी: 0 क्लिक्स: 382
1
ध्यान केंद्रित करना
1166
समर्थक

हाई-लो ब्रेकआउट बैकटेस्टिंग रणनीति

अवलोकन

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

रणनीति सिद्धांत

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

जब एक खरीद संकेत उत्पन्न होता है, तो रणनीति उस कीमत पर खरीदती है और स्टॉप-लॉस और स्टॉप-प्रोइस सेट करती है। जब कीमत स्टॉप-लॉस को छूती है, तो रणनीति स्टॉप-लॉस और आउट हो जाती है; जब कीमत स्टॉप-प्रोइस को छूती है, तो रणनीति स्टॉप-आउट हो जाती है। सिग्नल को बेचने का तर्क भी इसी तरह है।

श्रेष्ठता विश्लेषण

इस तरह की उच्च और निम्न दरार की रणनीति के कुछ फायदे हैंः

  1. रणनीति तर्क सरल है, इसे समझना और लागू करना आसान है।
  2. स्टॉक की कीमतों के ट्रेंडिंग लक्षणों को पकड़ने में सक्षम होने के लिए, कीमतों की प्रवृत्ति के साथ चलें
  3. Finding पैरामीटर को अनुकूलित करके सबसे उपयुक्त नीति पैरामीटर संयोजन को समायोजित करें।
  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)