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

KNN مشین لرننگ حکمت عملی: K-Nearest Neighbors Algorithm پر مبنی رجحان پیش گوئی ٹریڈنگ سسٹم

مصنف:چاؤ ژانگ، تاریخ: 2024-05-15 17:09:34
ٹیگز:KNNایم اےاے ٹی آر

img

جائزہ

یہ حکمت عملی قیمت کے رجحانات کی پیش گوئی کے لئے K-Nearest Neighbors (KNN) مشین لرننگ الگورتھم کو استعمال کرتی ہے۔ تشخیص کے لئے مختلف قیمتوں کے حساب کتاب کے طریقوں (جیسے HL2 ، VWAP ، SMA ، وغیرہ) کو ان پٹ اقدار اور مختلف ہدف اقدار (جیسے قیمت کی کارروائی ، VWAP ، اتار چڑھاؤ ، وغیرہ) کے طور پر منتخب کرکے ، KNN الگورتھم موجودہ مارکیٹ کی حالت کے قریب ترین K تاریخی ڈیٹا پوائنٹس کی نشاندہی کرتا ہے۔ اس کے بعد حکمت عملی ان K ڈیٹا پوائنٹس کی رجحان کی سمت کی بنیاد پر لمبی یا مختصر پیش گوئیاں کرتی ہے۔ اس کے علاوہ ، حکمت عملی پیش گوئی کے نتائج کو ہموار کرنے اور استحکام کو بہتر بنانے کے لئے ایک چلتی اوسط لاگو کرتی ہے۔ آخر میں ، پیش گوئی کے نتائج کے مطابق تجارتی فیصلے کیے جاتے ہیں ، اور پس منظر کے رنگ میں موجودہ مارکیٹ کے رجحان کی تبدیلیوں کے ذریعہ موجودہ مارکیٹ کی تبدیلیوں کی پیش گوئی کی جاتی ہے۔

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

  1. ایک قیمت کے حساب کے طریقہ کار کا انتخاب کریں (مثال کے طور پر، HL2، VWAP، SMA) KNN الگورتھم کے لئے ان پٹ قدر کے طور پر.
  2. KNN الگورتھم کے لئے ہدف قدر کے طور پر ایک تشخیصی ہدف (مثال کے طور پر، قیمت کی کارروائی، VWAP، اتار چڑھاؤ) منتخب کریں.
  3. قریب ترین پڑوسیوں کی تعداد (K) اور ہموار مدت کو KNN الگورتھم کی حساسیت اور پیشن گوئی کے نتائج کی ہموار کو ایڈجسٹ کرنے کے لئے مقرر کریں.
  4. ہر نئے قیمت ڈیٹا پوائنٹ کے لئے، موجودہ مارکیٹ کی حالت کے قریب ترین K تاریخی ڈیٹا پوائنٹس تلاش کرنے کے لئے KNN الگورتھم کا استعمال کریں.
  5. ان K ڈیٹا پوائنٹس کی رجحان کی سمت (بلس یا بیرس) کی بنیاد پر، موجودہ مارکیٹ رجحان کی پیشن گوئی حاصل کرنے کے لئے ووٹ دیں.
  6. استحکام کو بہتر بنانے کے لئے ایک چلتی اوسط کا استعمال کرتے ہوئے پیشن گوئی کے نتائج کو ہموار کریں.
  7. ہموار پیش گوئی کے نتائج کی بنیاد پر تجارتی سگنل (طویل یا مختصر) تیار کریں اور پس منظر کے رنگ میں تبدیلیوں کے ذریعے موجودہ مارکیٹ کے رجحان کی پیش گوئی کو بصری طور پر ظاہر کریں۔

فوائد

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

خطرات

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

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

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

خلاصہ

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


/*backtest
start: 2023-05-09 00:00:00
end: 2024-05-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © Blake_22 {

//@version=5
strategy('money printer part 1', overlay=true)

// ~~ Tooltips {
t1 ="PriceValue selects the method of price computation. \n\nSets the smoothing period for the PriceValue. \n\nAdjusting these settings will change the input values for the K-Nearest Neighbors algorithm, influencing how the trend is calculated."
t2 = "TargetValue specifies the target to evaluate. \n\nSets the smoothing period for the TargetValue."
t3 ="numberOfClosestValues sets the number of closest values that are considered when calculating the KNN Moving Average. Adjusting this number will affect the sensitivity of the trend line, with a higher value leading to a smoother line and a lower value resulting in a line that is more responsive to recent price changes."
t4 ="smoothingPeriod sets the period for the moving average applied to the KNN classifier. Adjusting the smoothing period will affect how rapidly the trend line responds to price changes, with a larger smoothing period leading to a smoother line that may lag recent price movements, and a smaller smoothing period resulting in a line that more closely tracks recent changes."
t5 ="This option controls the background color for the trend prediction. Enabling it will change the background color based on the prediction, providing visual cues on the direction of the trend. A green color indicates a positive prediction, while red indicates a negative prediction."
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

// ~~ Inputs {
PriceValue   = input.string("hl2", options = ["hl2","VWAP", "sma", "wma", "ema", "hma"], group="", inline="Value")
maLen        = input.int(5, minval=2, maxval=200, title="", group="", inline="Value", tooltip=t1)
TargetValue  = input.string("Price Action", options = ["Price Action","VWAP", "Volatility", "sma", "wma", "ema", "hma"], group="", inline="Target")
maLen_       = input.int(5, minval=2, maxval=200, title="", group="", inline="Target", tooltip=t2)
// Input parameters for the KNN Moving Average
numberOfClosestValues = input.int(3, "Number of Closest Values", 2, 200, tooltip=t3) 
smoothingPeriod       = input.int(50, "Smoothing Period", 2, 500, tooltip=t4) 
windowSize            = math.max(numberOfClosestValues, 30) 

// knn Color
Upknn_col   = input.color(color.lime, title="", group="KNN Color", inline="knn col")
Dnknn_col   = input.color(color.red, title="", group="KNN Color", inline="knn col")
Neuknn_col  = input.color(color.orange, title="", group="KNN Color", inline="knn col")
// MA knn Color
Maknn_col   = input.color(color.teal, title="", group="MA KNN Color", inline="MA knn col")
// BG Color
bgcolor = input.bool(false, title="Trend Prediction Color", group="BG Color", inline="bg", tooltip=t5)
Up_col  = input.color(color.lime, title="", group="BG Color", inline="bg")
Dn_col  = input.color(color.red, title="", group="BG Color", inline="bg")
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

// ~~ kNN Classifier {
value_in = switch PriceValue
    "hl2"  => ta.sma(hl2,maLen)
    "VWAP" => ta.vwap(close[maLen])
    "sma" => ta.sma(close,maLen)
    "wma" => ta.wma(close,maLen)
    "ema" => ta.ema(close,maLen)
    "hma" => ta.hma(close,maLen)

meanOfKClosest(value_,target_) => 
    closestDistances = array.new_float(numberOfClosestValues, 1e10) 
    closestValues    = array.new_float(numberOfClosestValues, 0.0) 
    for i = 1 to windowSize 
        value = value_[i] 
        distance = math.abs(target_ - value) 
        maxDistIndex = 0 
        maxDistValue = closestDistances.get(0) 
        for j = 1 to numberOfClosestValues - 1 
            if closestDistances.get(j) > maxDistValue
                maxDistIndex := j
                maxDistValue := closestDistances.get(j)
        if distance < maxDistValue 
            closestDistances.set(maxDistIndex, distance)
            closestValues.set(maxDistIndex, value)
    closestValues.sum() / numberOfClosestValues 

// Choose the target input based on user selection
target_in = switch TargetValue
    "Price Action"  => ta.rma(close,maLen_) 
    "VWAP"          => ta.vwap(close[maLen_])
    "Volatility"    => ta.atr(14)
    "sma" => ta.sma(close,maLen_)
    "wma" => ta.wma(close,maLen_)
    "ema" => ta.ema(close,maLen_)
    "hma" => ta.hma(close,maLen_)

knnMA = meanOfKClosest(value_in,target_in)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

// ~~ kNN Prediction {
// Function to calculate KNN Classifier
price = math.avg(knnMA, close)
c     = ta.rma(knnMA[1], smoothingPeriod) 
o     = ta.rma(knnMA, smoothingPeriod)

// Defines KNN function to perform classification
knn(price) => 
    Pos_count = 0 
    Neg_count = 0 
    min_distance = 10e10 
    nearest_index = 0 
    for j = 1 to 10 
        distance = math.sqrt(math.pow(price[j] - price, 2)) 
        if distance < min_distance 
            min_distance := distance
            nearest_index := j
            Neg = c[nearest_index] > o[nearest_index] 
            Pos = c[nearest_index] < o[nearest_index] 
            if Pos 
                Pos_count += 1
            if Neg 
                Neg_count += 1
    output = Pos_count>Neg_count?1:-1 

// Calls KNN function and smooths the prediction
knn_prediction_raw = knn(price) 
knn_prediction     = ta.wma(knn_prediction_raw, 3)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

// ~~ Plots {
// Plots for display on the chart
knnMA_          = ta.wma(knnMA,5)
knnMA_col       = knnMA_>knnMA_[1]?Upknn_col:knnMA_<knnMA_[1]?Dnknn_col:Neuknn_col
Classifier_Line = plot(knnMA_,"Knn Classifier Line", knnMA_col)
MAknn_          = ta.rma(knnMA, smoothingPeriod)
plot(MAknn_,"Average Knn Classifier Line" ,Maknn_col) 
green = knn_prediction < 0.5
red   = knn_prediction > -0.5 
bgcolor( green and bgcolor? color.new(Dn_col,80) : 
 red and bgcolor ? color.new(Up_col,80) : na) 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

// ~~ Alerts {
knnMA_cross_Over_Ma      = ta.crossover(knnMA_,MAknn_)
knnMA_cross_Under_Ma     = ta.crossunder(knnMA_,MAknn_)
knnMA_cross_Over_Close   = ta.crossover(knnMA_,close)
knnMA_cross_Under_Close  = ta.crossunder(knnMA_,close)
knnMA_Switch_Up          = knnMA_[1]<knnMA_ and knnMA_[1]<=knnMA_[2]
knnMA_Switch_Dn          = knnMA_[1]>knnMA_ and knnMA_[1]>=knnMA_[2]
knnMA_Neutral            = knnMA_col==Neuknn_col and knnMA_col[1]!=Neuknn_col
greenBG                  = green and not green[1]
redBG                    = red and not red[1]

alertcondition(knnMA_cross_Over_Ma,  title = "Knn Crossover Average Knn",  message = "Knn Crossover Average Knn")
alertcondition(knnMA_cross_Under_Ma, title = "Knn Crossunder Average Knn", message = "Knn Crossunder Average Knn")
alertcondition(knnMA_cross_Over_Close,  title = "Knn Crossover Close",  message = "Knn Crossover Close")
alertcondition(knnMA_cross_Under_Close, title = "Knn Crossunder Close", message = "Knn Crossunder Close")
alertcondition(knnMA_Switch_Up,  title = "Knn Switch Up",  message = "Knn Switch Up")
alertcondition(knnMA_Switch_Dn, title = "Knn Switch Dn", message = "Knn Switch Dn")
alertcondition(knnMA_Neutral, title = "Knn is Neutral", message = "Knn is Neutral")
alertcondition(greenBG, title = "Positive Prediction", message = "Positive Prediction")
alertcondition(redBG, title = "Negative Prediction", message = "Negative Prediction")
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

//~~Trenddilo {



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}



//~~ strategy { 1

LongCondtion = knnMA_[1]<knnMA_ and knnMA_[1]<=knnMA_[2]
ShortCondtion = knnMA_[1]>knnMA_ and knnMA_[1]>=knnMA_[2]


//SecondaryLongCondtion = col == color.lime
//SecondaryShortCondtion = col == color.red

strategy.entry("Long", strategy.long, when = LongCondtion)
strategy.close("Long", when =ShortCondtion)

strategy.entry("Short", strategy.short, when =ShortCondtion)
strategy.close("short", when =LongCondtion)


plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

    


متعلقہ

مزید