এই কৌশলটি কে-নিকর্স্ট নেবারস (কেএনএন) মেশিন লার্নিং অ্যালগরিদমের উপর ভিত্তি করে একটি অভিযোজিত পরামিতিগত প্রবণতা অনুসরণকারী সিস্টেম। কৌশলটি কেএনএন অ্যালগরিদমের মাধ্যমে প্রবণতা অনুসরণকারী পরামিতিগুলিকে গতিশীলভাবে সামঞ্জস্য করে এবং চলমান গড়ের সাথে সংমিশ্রণে ট্রেডিং সংকেত উত্পন্ন করে। সিস্টেমটি বাজারের অবস্থার পরিবর্তনের উপর ভিত্তি করে কৌশল পরামিতিগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করতে পারে, কৌশল অভিযোজনযোগ্যতা এবং স্থিতিশীলতা উন্নত করে। এই কৌশলটি ঐতিহ্যবাহী প্রবণতা অনুসরণকারী কৌশলগুলিকে অনুকূল করতে মেশিন লার্নিং পদ্ধতিগুলিকে একত্রিত করে, যা পরিমাণগত বিনিয়োগে প্রযুক্তি এবং উদ্ভাবনের সংমিশ্রণকে উপস্থাপন করে।
কৌশলটির মূল নীতি হল 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)