یہ حکمت عملی K-Nearest Neighbors (KNN) مشین لرننگ الگورتھم پر مبنی ایک انکولی پیرامیٹر ٹرینڈ فالونگ سسٹم ہے۔ یہ حکمت عملی KNN الگورتھم کے ذریعے رجحان کے بعد پیرامیٹرز کو متحرک طور پر ایڈجسٹ کرتی ہے اور چلتی اوسط کے ساتھ مل کر تجارتی سگنل تیار کرتی ہے۔ یہ نظام مارکیٹ کے حالات میں ہونے والی تبدیلیوں کی بنیاد پر حکمت عملی کے پیرامیٹرز کو خود بخود ایڈجسٹ کرسکتا ہے ، حکمت عملی کی موافقت اور استحکام کو بہتر بناتا ہے۔ یہ حکمت عملی روایتی رجحان کی پیروی کرنے والی حکمت عملیوں کو بہتر بنانے کے لئے مشین لرننگ کے طریقوں کو جوڑتی ہے ، جو مقدار کی سرمایہ کاری میں ٹیکنالوجی اور جدت کے امتزاج کی نمائندگی کرتی ہے۔
حکمت عملی کا بنیادی اصول KNN الگورتھم کا استعمال کرتے ہوئے تاریخی قیمتوں کے اعداد و شمار کا تجزیہ کرنا اور موجودہ مارکیٹ کے حالات اور تاریخی اعداد و شمار کے مابین مماثلت کا حساب کتاب کرکے قیمتوں کے رجحانات کی پیش گوئی کرنا ہے۔ اس کے نفاذ کے مخصوص اقدامات یہ ہیں:
یہ حکمت عملی جدید طور پر تجارتی رجحانات کے بعد کے این این الگورتھم کا اطلاق کرتی ہے ، مشین لرننگ کے طریقوں کے ذریعہ روایتی تکنیکی تجزیہ کی حکمت عملیوں کو بہتر بناتی ہے۔ یہ حکمت عملی مضبوط موافقت اور لچکدار ہے ، جو مارکیٹ کے حالات کی بنیاد پر پیرامیٹرز کو متحرک طور پر ایڈجسٹ کرنے کے قابل ہے۔ اگرچہ اعلی کمپیوٹیشنل پیچیدگی اور پیرامیٹر حساسیت جیسے خطرات موجود ہیں ، لیکن حکمت عملی کے پاس مناسب اصلاح اور رسک کنٹرول کے اقدامات کے ذریعہ اب بھی درخواست کی اچھی قیمت ہے۔ یہ تجویز کی جاتی ہے کہ سرمایہ کار مارکیٹ کی خصوصیات کے مطابق پیرامیٹرز کو ایڈجسٹ کریں اور عملی ایپلی کیشنز میں تجارتی فیصلوں کے لئے تجزیہ کے دوسرے طریقوں کو جوڑیں۔
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("Trend Following Strategy with KNN", overlay=true,commission_value=0.03,currency='USD', commission_type=strategy.commission.percent,default_qty_type=strategy.cash) // Input parameters k = input.int(5, title="K (Number of Neighbors)", minval=1) // Number of neighbors for KNN algorithm window_size = input.int(20, title="Window Size", minval=1) // Window size for feature vector calculation ma_length = input.int(50, title="MA Length", minval=1) // Length of the moving average // Calculate moving average ma = ta.sma(close, ma_length) // Initialize variables var float[] features = na var float[] distances = na var int[] nearest_neighbors = na if bar_index >= window_size - 1 // Ensure there is enough historical data features := array.new_float(0) // Keep only the current window data for i = 0 to window_size - 1 array.push(features, close[i]) // Calculate distances distances := array.new_float(0) // Clear the array for each calculation for i = 0 to window_size - 1 // Calculate the distance between the current price and all prices in the window var float distance = 0.0 for j = 0 to window_size - 1 distance += math.pow(close[j] - array.get(features, j), 2) distance := math.sqrt(distance) array.push(distances, distance) // Find the nearest neighbors if array.size(distances) > 0 and array.size(distances) >= k nearest_neighbors := array.new_int(0) for i = 0 to k - 1 var int min_index = -1 var float min_distance = na for j = 0 to array.size(distances) - 1 if na(min_distance) or array.get(distances, j) < min_distance min_index := j min_distance := array.get(distances, j) if min_index != -1 array.push(nearest_neighbors, min_index) array.remove(distances, min_index) // Remove the processed neighbor // Calculate the average price change of the neighbors var float average_change = 0.0 if array.size(nearest_neighbors) > 0 for i = 0 to array.size(nearest_neighbors) - 1 var int index = array.get(nearest_neighbors, i) // Ensure index + 1 is within range if index + 1 < bar_index average_change += (close[index] - close[index + 1]) average_change := average_change / array.size(nearest_neighbors) // Generate trading signals if average_change > 0 and close > ma strategy.entry("Long", strategy.long) else if average_change < 0 and close < ma strategy.entry("Short", strategy.short)