وسائل لوڈ ہو رہے ہیں... لوڈنگ...

حجم قیمت موم بتی پیٹرن ٹریڈنگ کی حکمت عملی کے ساتھ کثیر جہتی KNN الگورتھم

مصنف:چاؤ ژانگ، تاریخ: 2025-01-17 16:10:07
ٹیگز:ایس ایم اےKNNآر ایس آئیVOLایم اےایس ڈی

 Multi-Dimensional KNN Algorithm with Volume-Price Candlestick Pattern Trading Strategy

جائزہ

یہ حکمت عملی ایک جامع تجارتی نظام ہے جس میں K-Nearest Neighbors (KNN) مشین لرننگ الگورتھم ، موم بتی کے نمونوں کی شناخت ، اور حجم تجزیہ کو یکجا کیا گیا ہے۔ متحرک اوسط چینلز ، حجم کی حد کی توثیق ، اور امکان کے اعدادوشمار سمیت کثیر جہتی تجزیہ کے طریقوں کے ذریعے ، حکمت عملی ممکنہ تجارتی مواقع کو حاصل کرنے کے لئے تین جہتی تجزیہ کا فریم ورک تشکیل دیتی ہے۔

حکمت عملی کے اصول

حکمت عملی کا بنیادی منطق کئی اہم عناصر پر بنایا گیا ہے: 1. زیادہ خریدنے اور زیادہ فروخت کرنے والے علاقوں کی نشاندہی کے لئے قیمت چینلز کی تعمیر کے لئے سادہ چلتی اوسط (ایس ایم اے) اور معیاری انحراف کا استعمال 2۔ پروگرام کے ذریعے متعین حالات کے ذریعے نو کلاسیکی موم بتی کے نمونوں کی نشاندہی کرنا، بشمول ہیمر، شوٹنگ اسٹار، نگلنگ پیٹرن وغیرہ۔ تاریخی قیمتوں کی نقل و حرکت سے سیکھنے اور مستقبل کی قیمتوں کی سمت کی پیش گوئی کے لئے KNN الگورتھم کو شامل کرنا سگنل کی تصدیق کے اشارے کے طور پر حجم کا استعمال کرتے ہوئے، سگنل ٹرگر ہونے پر حجم مقررہ حد سے زیادہ ہونا ضروری ہے سگنل فلٹرنگ کے حالات میں سے ایک کے طور پر اوپر اور نیچے کی نقل و حرکت کے لئے امکان تقسیم کا حساب

حکمت عملی کے فوائد

  1. متعدد سطح پر سگنل کی تصدیق کا طریقہ کار تجارت کی وشوسنییتا کو نمایاں طور پر بہتر بناتا ہے
  2. KNN الگورتھم کا تعارف روایتی تکنیکی تجزیہ کے لئے مشینی سیکھنے کا نقطہ نظر فراہم کرتا ہے
  3. حجم کی تصدیق کا طریقہ کار مؤثر طریقے سے جھوٹے بریک آؤٹس سے بچتا ہے
  4. معاونت اور مزاحمت کی لائنوں کا متحرک نقشہ اہم قیمت کی سطح کو سمجھنے میں مدد کرتا ہے
  5. جامع انتباہی نظام اہم تجارتی مواقع کو ضائع نہ کرنے کو یقینی بناتا ہے
  6. مختلف مارکیٹ کے ماحول کو اپنانے کے لئے پیرامیٹرز کی مضبوط ایڈجسٹمنٹ

حکمت عملی کے خطرات

  1. غیر مستحکم منڈیوں میں KNN الگورتھم پیچھے رہ سکتا ہے
  2. متعدد سگنل فلٹرنگ کی شرائط سے کچھ تجارتی مواقع ضائع ہوسکتے ہیں
  3. مقررہ حجم کی حدیں مختلف ادوار میں متحرک ایڈجسٹمنٹ کی ضرورت ہوسکتی ہیں
  4. استحکام کے مراحل کے دوران بہت زیادہ جھوٹے سگنل پیدا کر سکتا ہے تجویز کردہ حل:
  • متحرک الگورتھم پیرامیٹر ایڈجسٹمنٹ
  • مارکیٹ ماحول کی پہچان کے طریقہ کار کا تعارف
  • زیادہ سے زیادہ نقصان کی حد مقرر کرنا
  • پوزیشن مینجمنٹ سسٹم کا قیام

اصلاح کی ہدایات

  1. مارکیٹ کے حالات کی بنیاد پر پیرامیٹرز کو خود بخود ایڈجسٹ کرنے کے لئے موافقت پذیر پیرامیٹر ایڈجسٹمنٹ میکانزم متعارف کرایا جائے
  2. پیشن گوئی کی درستگی کو بہتر بنانے کے لئے گہری سیکھنے کے الگورتھم کو ضم کریں
  3. مزید مارکیٹ مائکرو ساخت اشارے شامل کریں
  4. حجم کی حد کے لئے متحرک حساب کے طریقہ کار کو بہتر بنائیں
  5. خطرے کے کنٹرول کا ایک زیادہ جامع نظام قائم کریں

خلاصہ

یہ حکمت عملی روایتی تکنیکی تجزیہ کو جدید مشین لرننگ طریقوں کے ساتھ جوڑ کر ایک مضبوط تجارتی نظام تیار کرتی ہے۔ حکمت عملی کے کثیر جہتی تجزیہ کے فریم ورک اور سخت سگنل کی تصدیق کے طریقہ کار سے تجارتی فیصلوں کی قابل اعتماد بنیاد فراہم ہوتی ہے۔ مسلسل اصلاح اور رسک کنٹرول کے ذریعے ، حکمت عملی سے توقع کی جاتی ہے کہ وہ مارکیٹ کے مختلف حالات میں مستحکم کارکردگی برقرار رکھے گی۔


/*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!")


متعلقہ

مزید