
یہ حکمت عملی مشین لرننگ الگورتھم کے قریب قریب (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)