এই কৌশলটি ট্রেডিংয়ের পরে প্রবণতা বাস্তবায়ন করার জন্য প্রবণতা দিক নির্ধারণের জন্য চলমান গড় এবং সম্ভাব্য বিপরীত পয়েন্টগুলি সনাক্ত করার জন্য মোমবাতি নিদর্শনগুলিকে একত্রিত করে। কৌশলটি প্রথমে সামগ্রিক প্রবণতার দিক নির্ধারণের জন্য চলমান গড় ব্যবহার করে এবং তারপরে প্রবণতা ট্র্যাক করার জন্য প্রবণতা দিক বরাবর প্রবেশ সংকেত হিসাবে সম্ভাব্য বিপরীত মোমবাতি নিদর্শনগুলি সন্ধান করে।
কৌশলটি মূল্যের প্রবণতা নির্ধারণের জন্য একটি 10-দিনের সহজ চলমান গড় গ্রহণ করে। যখন দাম চলমান গড়ের উপরে থাকে, তখন এটি একটি আপট্রেন্ডে বলে মনে করা হয়; যখন দাম চলমান গড়ের নীচে থাকে, তখন এটি একটি ডাউনট্রেন্ডে বলে মনে করা হয়।
প্রবণতা দিক নির্ধারণ করার পরে, কৌশলটি উত্থান এবং হ্রাসের মোমবাতি প্যাটার্নগুলির একটি সিরিজের উপর ভিত্তি করে সম্ভাব্য প্রবণতা বিপরীত পয়েন্টগুলি বিচার করবে। সাধারণ উত্থান প্যাটার্নগুলির মধ্যে রয়েছে মর্নিং স্টার, বুলিশ এনগুলফিং, থ্রি হোয়াইট সোলজার ইত্যাদি; সাধারণ হ্রাস প্যাটার্নগুলির মধ্যে রয়েছে ইভিনিং স্টার, থ্রি ব্ল্যাক ক্রো ইত্যাদি। যখন একটি আপট্রেন্ডে একটি উত্থান সংকেত সনাক্ত করা হয়, তখন কৌশলটি একটি ক্রয় অর্ডার স্থাপন করবে; যখন একটি হ্রাস সংকেত একটি ডাউনট্রেন্ডে সনাক্ত করা হয়, তখন কৌশলটি একটি বিক্রয় অর্ডার স্থাপন করবে।
উপরন্তু, কৌশলটি নির্দিষ্ট এন্ট্রি মূল্য নির্ধারণের জন্য প্রধান সমর্থন এবং প্রতিরোধের স্তরগুলিও অন্তর্ভুক্ত করে। উদাহরণস্বরূপ, একটি আপট্রেন্ডে কেনার সময়, এটি প্রথম সমর্থন স্তরটি ভেঙে গেলে কিনবে।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ'ল এটি প্রবণতা বিচার এবং বিপরীত সংকেত উভয়ই একত্রিত করে যাতে এটি প্রবণতা অনুসরণ করার জন্য সময়মত প্রবণতা টার্নিং পয়েন্টগুলি ক্যাপচার করতে পারে। সহজ চলমান গড় কৌশলগুলির তুলনায়, এই কৌশলটি লাভজনকতাকে ব্যাপকভাবে উন্নত করতে পারে।
এছাড়াও, ক্যান্ডেলস্টিক প্যাটার্ন বিচারের অন্তর্ভুক্তি আকস্মিক ঘটনাগুলির সাথে মোকাবিলা করার ক্ষমতাও উন্নত করে। যখন একটি কম সম্ভাব্য ঘটনা বাজারে একটি মিথ্যা ব্রেকআউট সৃষ্টি করে, তখন ক্যান্ডেলস্টিক প্যাটার্ন ভুল ট্রেড এড়ানোর জন্য ফিল্টারিংয়ের ভূমিকা পালন করতে পারে।
এই কৌশলটির প্রধান ঝুঁকিগুলি চলমান গড় প্যারামিটার সেটিংসের নির্ভুলতা এবং ক্যান্ডেলস্টিক প্যাটার্ন বিচারের মধ্যে রয়েছে। যদি চলমান গড় সময়কালটি ভুলভাবে সেট করা হয় তবে এটি ভুল প্রবণতা নির্ধারণের দিকে পরিচালিত করবে; যদি ক্যান্ডেলস্টিক প্যাটার্নের বিচারে ত্রুটি থাকে তবে এটি ভুল ট্রেডিং সিদ্ধান্তের দিকেও পরিচালিত করবে।
উপরন্তু, বিপরীতমুখী মোমবাতি প্যাটার্নগুলি 100% নিশ্চয়তার সাথে প্রবণতা বিপরীতমুখী গ্যারান্টি দিতে পারে না, তাই কৌশলটিতে এখনও কিছু ঝুঁকি রয়েছে। যখন বাজার বড় বিপরীতমুখী দেখায়, এটি কৌশলটিকে বৃহত্তর ক্ষতি করতে পারে।
এই কৌশলটিতে অপ্টিমাইজেশনের জন্য এখনও যথেষ্ট জায়গা রয়েছে। উদাহরণস্বরূপ, আমরা গতিশীলভাবে চলমান গড়ের পরামিতিগুলি সামঞ্জস্য করতে এবং বিভিন্ন বাজারের পর্যায়ে বিভিন্ন চলমান গড় সময়কাল গ্রহণ করতে বিবেচনা করতে পারি। আমরা বিচার নির্ভুলতা উন্নত করতে historicalতিহাসিক ডেটা ব্যবহার করে ক্যান্ডেলস্টিক প্যাটার্ন বিচার মডেলগুলি প্রশিক্ষণের জন্য মেশিন লার্নিং পদ্ধতিও প্রবর্তন করতে পারি।
এছাড়াও, কৌশলটিকে আরও ব্যাপক ও শক্তিশালী করার জন্য আমরা প্রবণতা এবং হট এলাকাগুলি যেমন ট্রেডিং ভলিউমের পরিবর্তন, অস্থিরতার সূচক ইত্যাদি বিচার করার জন্য আরও কারণ অন্তর্ভুক্ত করার বিষয়টিও বিবেচনা করতে পারি।
সাধারণভাবে, এই কৌশলটি স্টক মার্কেটে মাঝারি মেয়াদী প্রবণতা ট্র্যাক করার জন্য খুব উপযুক্ত এবং তুলনামূলকভাবে উচ্চ এবং স্থিতিশীল রিটার্ন অর্জন করতে পারে। যদি আরও অনুকূলিত করা হয় তবে এটি একটি ভাল-কার্যকরী পরিমাণগত কৌশল হয়ে উঠার সম্ভাবনা রয়েছে। যদি বিনিয়োগকারীরা এই কৌশলটির ব্যবহার বুঝতে পারে তবে তারা আরও ভাল অতিরিক্ত রিটার্ন পাওয়ার সময় পৃথক স্টক ঝুঁকিগুলি নিয়ন্ত্রণ করতে দীর্ঘমেয়াদী হোল্ডিং তৈরি করতে এটি ব্যবহার করতে পারে।
/*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)