ट्रेंड-फॉलोइंग मूविंग एवरेज और कैंडलस्टिक पैटर्न संयोजन रणनीति


निर्माण तिथि: 2024-02-02 17:53:43 अंत में संशोधित करें: 2024-02-02 17:53:43
कॉपी: 0 क्लिक्स: 717
1
ध्यान केंद्रित करना
1617
समर्थक

ट्रेंड-फॉलोइंग मूविंग एवरेज और कैंडलस्टिक पैटर्न संयोजन रणनीति

अवलोकन

यह रणनीति ट्रेंड ट्रैक ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेडों को लागू करने के लिए ट्रेंड ट्रैकिंग ट्रेड

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

रणनीति 10 दिनों की सरल चलती औसत का उपयोग करके मूल्य प्रवृत्ति की दिशा का आकलन करती है। जब कीमत चलती औसत से अधिक होती है, तो यह एक ऊंची प्रवृत्ति में माना जाता है; जब कीमत चलती औसत से कम होती है, तो इसे गिरावट में माना जाता है।

प्रवृत्ति की दिशा का आकलन करने के बाद, रणनीति एक संभावित प्रवृत्ति रिवर्सिंग बिंदु का आकलन करने के लिए एक श्रृंखला के-लाइन और के-लाइन के रूपों की एक श्रृंखला का उपयोग करती है। सामान्य सूर्य-लाइन रूपों में प्रबुद्धता, सुबह का तारा, तीन गोरे सैनिक शामिल हैं। सामान्य सूर्य-लाइन रूपों में डूबने वाला तारा, तीन कौवे शामिल हैं। जब एक उछाल प्रवृत्ति में एक सूर्य-लाइन संकेत की पहचान की जाती है, तो रणनीति एक खरीद-ऑपरेशन करती है; जब एक गिरावट प्रवृत्ति में एक सूर्य-लाइन संकेत की पहचान की जाती है, तो रणनीति एक बिक्री-ऑपरेशन करती है।

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

रणनीतिक लाभ

इस रणनीति का सबसे बड़ा लाभ यह है कि यह एक साथ प्रवृत्ति निर्णय और प्रतिगमन संकेतों को जोड़ती है, जिससे यह प्रवृत्ति के मोड़ को समय पर पकड़ने और प्रवृत्ति को ट्रैक करने के लिए संभव बनाती है। सरल चलती औसत रणनीति की तुलना में, यह रणनीति लाभ की संभावना में काफी वृद्धि कर सकती है।

इसके अलावा, K-लाइन आकृति निर्णय को शामिल करने की रणनीति ने आकस्मिक घटनाओं के लिए अपनी क्षमता को भी बढ़ाया है। बाजार में कम संभावना वाले घटनाओं के कारण झूठे ब्रेकआउट होने पर, K-लाइन आकृति गलत ट्रेडों से बचने के लिए फ़िल्टर की भूमिका निभा सकती है।

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

इस रणनीति का मुख्य जोखिम चलती औसत पैरामीटर सेटिंग और K-लाइन आकलन की सटीकता में है। यदि चलती औसत चक्र को गलत तरीके से सेट किया जाता है, तो यह प्रवृत्ति आकलन में त्रुटि का कारण बनता है; यदि K-लाइन आकलन में त्रुटि होती है, तो यह ट्रेडिंग निर्णय में त्रुटि का कारण बनता है।

इसके अलावा, एक उलटा K-लाइन पैटर्न 100% ट्रेंड रिवर्सिंग की गारंटी नहीं देता है, इसलिए रणनीति के लिए कुछ जोखिम भी हैं। जब बाजार में अधिक व्यापक उलटा होता है, तो रणनीति को अधिक नुकसान हो सकता है।

अनुकूलन दिशा

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

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

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trend Following Strategy with Candlestick Patterns", overlay=true)

// Moving Average
ma_period = input(10, title="Moving Average Period")
moving_average = ta.sma(close, ma_period)

// Candlestick Patterns
// Custom Function
abs(x) => x >= 0 ? x : -x

// Candlestick Patterns
isDoji() =>
    (close - open) <= (high - low) * 0.1

isMarubozuWhite() =>
    close == high and open == low and close > open

isHammer() =>
    (high - low) >= 3 * abs(open - close) and (close - low) / (0.001 + high - low) > 0.6 and (open - low) / (0.001 + high - low) > 0.6

isInvertedHammer() =>
    (high - low) >= 3 * abs(open - close) and (high - close) / (0.001 + high - low) > 0.6 and (high - open) / (0.001 + high - low) > 0.6

isLongLowerShadow() =>
    (low - close) > 2 * abs(open - close) and (low - open) / (0.001 + high - low) > 0.6

isUpsideTasukiGap() =>
    close[1] < open[1] and open > close and open > close[1] and close < open[1]

isRisingWindow() =>
    high[1] < low and close > open

isPiercing() =>
    close[1] < open[1] and close > open and close > ((open + low) / 2) and close < open[1] and open < close[1]

isBullishEngulfing() =>
    close[1] < open[1] and close > open and high > high[1] and low < low[1]

isTweezerBottom() =>
    low == ta.valuewhen(low == ta.lowest(low, 10), low, 0) and low == ta.valuewhen(low == ta.lowest(low, 20), low, 0)

isBullishAbandonedBaby() =>
    close[2] < open[2] and close[1] > open[1] and low[1] > ta.valuewhen(high == ta.highest(high, 2), high, 0) and open > close and close > ta.valuewhen(high == ta.highest(high, 2), high, 0)

isMorningStar() =>
    close[2] < open[2] and close[1] < open[1] and close > open[1] and open < close[2] and open > close[1]

isMorningDojiStar() =>
    close[2] < open[2] and close[1] < open[1] and isDoji() and close > open[1] and open < close[2] and open > close[1]

isDragonflyDoji() =>
    isDoji() and (high - close) / (0.001 + high - low) < 0.1 and (open - low) / (0.001 + high - low) > 0.6

isThreeWhiteSoldiers() =>
    close[2] < open[2] and close[1] < open[1] and close > open and open < close[2] and open < close[1] and close > open[1]

isRisingThreeMethods() =>
    close[4] < open[4] and close[1] < open[1] and close > open and open < close[4] and open < close[1] and close > open[1]

isMarubozuBlack() =>
    close == low and open == high and open > close

isGravestoneDoji() =>
    isDoji() and (close - low) / (0.001 + high - low) < 0.1 and (high - open) / (0.001 + high - low) > 0.6

isHangingMan() =>
    (high - low) >= 4 * abs(open - close) and (open - close) / (0.001 + high - low) > 0.6 and (high - open) / (0.001 + high - low) > 0.6

isLongUpperShadow() =>
    (high - open) > 2 * abs(open - close) and (high - close) / (0.001 + high - low) > 0.6

isDownsideTasukiGap() =>
    close[1] > open[1] and open < close and open < close[1] and close > open[1]

isFallingWindow() =>
    low[1] > high and close < open

isDarkCloudCover() =>
    close[1] > open[1] and close < open and close < ((open + high) / 2) and close > open[1] and open > close[1]

isBearishEngulfing() =>
    close[1] > open[1] and close < open and high > high[1] and low < low[1]

isTweezerTop() =>
    high == ta.valuewhen(high == ta.highest(high, 10), high, 0) and high == ta.valuewhen(high == ta.highest(high, 20), high, 0)

isAbandonedBaby() =>
    close[2] > open[2] and close[1] < open[1] and high[1] < ta.valuewhen(low == ta.lowest(low, 2), low, 0) and open < close and close < ta.valuewhen(low == ta.lowest(low, 2), low, 0)

isEveningDojiStar() =>
    close[2] > open[2] and close[1] > open[1] and isDoji() and close < open[1] and open > close[2] and open < close[1]

isEveningStar() =>
    close[2] > open[2] and close[1] > open[1] and close < open[1] and open > close[2] and open < close[1]

isThreeBlackCrows() =>
    close[2] > open[2] and close[1] > open[1] and close < open and open > close[2] and open > close[1] and close < open[1]

isFallingThreeMethods() =>
    close[4] > open[4] and close[1] > open

isShootingStar() =>
    (high - low) >= 3 * abs(open - close) and (high - close) / (0.001 + high - low) > 0.6 and (high - open) / (0.001 + high - low) > 0.6

doji = isDoji()
marubozuWhite = isMarubozuWhite()
hammer = isHammer()
invertedHammer = isInvertedHammer()
longLowerShadow = isLongLowerShadow()
upsideTasukiGap = isUpsideTasukiGap()
risingWindow = isRisingWindow()
piercing = isPiercing()
bullishEngulfing = isBullishEngulfing()
tweezerBottom = isTweezerBottom()
bullishAbandonedBaby = isBullishAbandonedBaby()
morningStar = isMorningStar()
morningDojiStar = isMorningDojiStar()
dragonflyDoji = isDragonflyDoji()
threeWhiteSoldiers = isThreeWhiteSoldiers()
risingThreeMethods = isRisingThreeMethods()
marubozuBlack = isMarubozuBlack()
gravestoneDoji = isGravestoneDoji()
hangingMan = isHangingMan()
longUpperShadow = isLongUpperShadow()
downsideTasukiGap = isDownsideTasukiGap()
fallingWindow = isFallingWindow()
darkCloudCover = isDarkCloudCover()
bearishEngulfing = isBearishEngulfing()
tweezerTop = isTweezerTop()
abandonedBaby = isAbandonedBaby()
eveningDojiStar = isEveningDojiStar()
eveningStar = isEveningStar()
threeBlackCrows = isThreeBlackCrows()
fallingThreeMethods = isFallingThreeMethods()
shootingStar = isShootingStar()
isBullishPattern() =>
    (isMarubozuWhite() or isHammer() or isInvertedHammer() or isDoji() or isMorningStar() or isBullishEngulfing() or isThreeWhiteSoldiers() or isMarubozuBlack() or isHangingMan() or isDownsideTasukiGap() or isDarkCloudCover())

isBearishPattern() =>
    (isMarubozuBlack() or isInvertedHammer() or isLongUpperShadow() or isTweezerTop() or isGravestoneDoji() or isEveningStar() or isBearishEngulfing() or isThreeBlackCrows() or isShootingStar())

isBullishCandle = isBullishPattern()
isBearishCandle = isBearishPattern()

// Calculate Pivot Points
pivotPoint(high, low, close) =>
    (high + low + close) / 3

r1 = pivotPoint(high[1], low[1], close[1]) * 2 - low[1]
s1 = pivotPoint(high[1], low[1], close[1]) * 2 - high[1]

r2 = pivotPoint(high[1], low[1], close[1]) + (high[1] - low[1])
s2 = pivotPoint(high[1], low[1], close[1]) - (high[1] - low[1])

r3 = high[1] + 2 * (pivotPoint(high[1], low[1], close[1]) - low[1])
s3 = low[1] - 2 * (high[1] - pivotPoint(high[1], low[1], close[1]))
// Trend Identification
is_uptrend = close > moving_average
is_downtrend = close < moving_average
// Entry and Exit Conditions with Trend Identification
enterLong = is_uptrend and isBullishCandle and close > r1
exitLong = is_uptrend and (bearishEngulfing or doji or close < s1)

enterShort = is_downtrend and isBearishCandle and close < s1
exitShort = is_downtrend and (bullishEngulfing or doji or close > r1)



// Strategy Execution
if enterLong and strategy.position_size == 0 and strategy.position_size[1] == 0 and close > r1
    strategy.entry("Buy", strategy.long, qty=1)

if exitLong and strategy.position_size > 0
    strategy.close("Buy")

if enterShort and strategy.position_size == 0 and close < s1
    strategy.entry("Sell", strategy.short, qty=1)

if exitShort and strategy.position_size < 0
    strategy.close("Sell")


// Stop-Loss and Trailing Stop-Loss
stop_loss_pct = input(2.0, title="Stop Loss Percentage")
trailing_stop_loss_pct = input(1.0, title="Trailing Stop Loss Percentage")
trailing_stop_loss_active = input(true, title="Trailing Stop Loss Active")

// Stop-Loss
stop_loss_level = strategy.position_avg_price * (1 - stop_loss_pct / 100)
strategy.exit("Stop Loss", "Buy", loss=stop_loss_level)

// Trailing Stop-Loss


// Plotting Moving Average
plot(moving_average, color=color.blue, title="Moving Average", linewidth=2)

// Plotting Candlestick Patterns
plotshape(isBullishCandle, title="Bullish Candle", location=location.belowbar, color=color.green, style=shape.labelup)
plotshape(isBearishCandle, title="Bearish Candle", location=location.abovebar, color=color.red, style=shape.labeldown)

// Plotting Support and Resistance Levels
//hline(r1, "Resistance Level 1", color=color.red, linestyle=hline.style_dotted)
//hline(s1, "Support Level 1", color=color.green, linestyle=hline.style_dotted)