
এই কৌশলটি একটি ব্যাপক ট্রেডিং সিস্টেম যা কে-নিয়ারেস্ট নেবার (KNN) মেশিন লার্নিং অ্যালগরিদম, ক্যান্ডেলস্টিক প্যাটার্ন রিকগনিশন এবং ভলিউম বিশ্লেষণকে একত্রিত করে। কৌশলটি বাজারের জন্য একটি ত্রি-মাত্রিক বিশ্লেষণ কাঠামো গঠনের জন্য মুভিং এভারেজ চ্যানেল, ভলিউম থ্রেশহোল্ড যাচাইকরণ এবং সম্ভাব্যতা পরিসংখ্যান সহ বহু-মাত্রিক বিশ্লেষণ পদ্ধতি ব্যবহার করে, যার ফলে সম্ভাব্য ট্রেডিং সুযোগগুলি ক্যাপচার করা হয়।
কৌশলটির মূল যুক্তি নিম্নলিখিত মূল উপাদানগুলির উপর ভিত্তি করে:
এই কৌশলটি আধুনিক মেশিন লার্নিং পদ্ধতির সাথে ঐতিহ্যগত প্রযুক্তিগত বিশ্লেষণকে একত্রিত করে একটি শক্তিশালী ট্রেডিং সিস্টেম তৈরি করে। কৌশলটির বহুমাত্রিক বিশ্লেষণ কাঠামো এবং কঠোর সংকেত নিশ্চিতকরণ প্রক্রিয়া ট্রেডিং সিদ্ধান্তের জন্য একটি নির্ভরযোগ্য ভিত্তি প্রদান করে। ক্রমাগত অপ্টিমাইজেশান এবং ঝুঁকি নিয়ন্ত্রণের মাধ্যমে, এই কৌশলটি বাজারের বিভিন্ন পরিবেশে স্থিতিশীল কর্মক্ষমতা বজায় রাখবে বলে আশা করা হচ্ছে।
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=6
strategy("Candle Pattern Analyzer with Volume", overlay=true)
// Input parameters
length = input.int(20, "Channel Length", minval=1)
mult = input.float(2.0, "Volatility Multiplier", minval=0.1)
candleLength = input.int(5, "Candle Length", minval=1)
k = input.int(5, "KNN Neighbors", minval=1)
volumeThreshold = input.int(100000, "Volume Threshold", minval=1)
// Calculate channel
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev
// Plot channel
plot(basis, color=color.blue)
plot(upper, color=color.green)
plot(lower, color=color.red)
// Identify candle patterns
isBullish = close > open
isBearish = close < open
// Pre-calculate SMAs
smaLow = ta.sma(low, candleLength)
smaHigh = ta.sma(high, candleLength)
smaClose = ta.sma(close, candleLength)
// Hammer pattern
isHammer = isBullish and
low < smaLow and
close > smaClose and
(close - low) / (high - low) > 0.6 and
low < low[1]
// Shooting Star pattern
isShootingStar = isBearish and
high > smaHigh and
close < smaClose and
(high - close) / (high - low) > 0.6 and
high > high[1]
// Inverse Hammer pattern
isInverseHammer = isBullish and
high > smaHigh and
close < smaClose and
(high - close) / (high - low) > 0.6 and
high > high[1]
// Bullish Engulfing pattern
isBullishEngulfing = isBullish and
close > high[1] and
open < low[1]
// Bearish Engulfing pattern
isBearishEngulfing = isBearish and
close < low[1] and
open > high[1]
// Morning Star pattern
isMorningStar = isBullish and close[2] < open[2] and close[1] < open[1] and close > open[1]
// Evening Star pattern
isEveningStar = isBearish and close[2] > open[2] and close[1] > open[1] and close < open[1]
// Three Black Crows pattern
isThreeBlackCrows = isBearish and
close < close[1] and
close[1] < close[2] and
close[2] < close[3]
// Three White Soldiers pattern
isThreeWhiteSoldiers = isBullish and close > close[1] and close[1] > close[2] and close[2] > close[3]
// Compare previous candles
prevCandleUp = close[1] > open[1]
prevCandleDown = close[1] < open[1]
// Calculate probability
probUp = ta.sma(close > open ? 1 : 0, candleLength) / candleLength
probDown = ta.sma(close < open ? 1 : 0, candleLength) / candleLength
// Generate signals
buySignal = isHammer and prevCandleDown and probUp > probDown and volume > volumeThreshold
sellSignal = isShootingStar and prevCandleUp and probDown > probUp and volume > volumeThreshold
// Highlight patterns
color candleColor = na
if (isHammer)
candleColor := color.green
label.new(bar_index, high, "Hammer", color=color.green, style=label.style_label_up)
else if (isShootingStar)
candleColor := color.red
label.new(bar_index, low, "Shooting Star", color=color.red, style=label.style_label_down)
else if (isInverseHammer)
candleColor := color.blue
label.new(bar_index, high, "Inverse Hammer", color=color.blue, style=label.style_label_up)
else if (isBullishEngulfing)
candleColor := color.yellow
label.new(bar_index, high, "Bullish Engulfing", color=color.yellow, style=label.style_label_up)
else if (isBearishEngulfing)
candleColor := color.purple
label.new(bar_index, low, "Bearish Engulfing", color=color.purple, style=label.style_label_down)
else if (isMorningStar)
candleColor := color.orange
label.new(bar_index, high, "Morning Star", color=color.orange, style=label.style_label_up)
else if (isEveningStar)
candleColor := color.new(color.red, 80)
label.new(bar_index, low, "Evening Star", color=color.new(color.red, 80), style=label.style_label_down)
else if (isThreeBlackCrows)
candleColor := color.black
label.new(bar_index, low, "Three Black Crows", color=color.black, style=label.style_label_down)
else if (isThreeWhiteSoldiers)
candleColor := color.white
label.new(bar_index, high, "Three White Soldiers", color=color.white, style=label.style_label_up)
// Plot candles
barcolor(candleColor)
// KNN algorithm
var float[] knnData = array.new_float(k, na)
var float[] knnLabels = array.new_float(k, na) // Create an array to store KNN labels
array.set(knnLabels, 0, 1.0) // Label for "up" movement
// Shift KNN dataset to make room for new data point
for i = 1 to k-1
array.set(knnData, i, array.get(knnData, i-1))
array.set(knnLabels, i, array.get(knnLabels, i-1))
// Predict next movement using KNN algorithm
float prediction = 0.0
for i = 0 to k-1
float distance = math.abs(close - array.get(knnData, i))
prediction += array.get(knnLabels, i) / distance
prediction /= k
// Plot prediction
// line.new(bar_index, close, bar_index + 1, prediction, color=color.purple)
// Plot resistance and support lines
float resistance = ta.sma(high, length)
float support = ta.sma(low, length)
// line.new(bar_index, resistance, bar_index + 1, resistance, color=color.green, style=line.style_dashed)
// line.new(bar_index, support, bar_index + 1, support, color=color.red, style=line.style_dashed)
// Plot buy and sell signals with prices
if (buySignal)
// label.new(bar_index, low, "Buy at " + str.tostring(low), color=color.green, style=label.style_label_up)
strategy.entry("Buy", strategy.long, comment="Buy at " + str.tostring(low))
if (sellSignal)
// label.new(bar_index, high, "Sell at " + str.tostring(high), color=color.red, style=label.style_label_down)
strategy.entry("Sell", strategy.short, comment="Sell at " + str.tostring(high))
// Create alerts
alertcondition(buySignal, title="Buy Signal", message="Buy signal generated!")
alertcondition(sellSignal, title="Sell Signal", message="Sell signal generated!")