এই কৌশলটির মূল ধারণা হ'ল ঝুঁকি নিয়ন্ত্রণ এবং নিম্ন গড় প্রবেশের মূল্য অর্জনের জন্য একটি ষাঁড়ের বাজারে সিস্টেমের সংকেতগুলির উপর ভিত্তি করে গতিশীলভাবে একটি অবস্থান তৈরি করা।
কৌশলটি প্রথমে প্রাথমিক মূলধন এবং ডিসিএ শতাংশ নির্ধারণ করে। প্রতিটি বার বন্ধ হওয়ার পরে, এটি মূল্য পরিবর্তনের উপর ভিত্তি করে একটি সমন্বিত শতাংশ গণনা করে। যদি দাম বেড়ে যায় তবে এটি শতাংশ হ্রাস করে। যদি দাম কমে যায় তবে এটি শতাংশ বৃদ্ধি করে। এটি কম মূল্যে অবস্থানে যোগ করার অনুমতি দেয়। এটি তারপরে সমন্বিত শতাংশ এবং অবশিষ্ট মূলধন ভিত্তিতে অর্ডার আকার গণনা করে। প্রতিটি বার বন্ধ হওয়ার পরে, এটি প্রাথমিক মূলধন ব্যবহার না হওয়া পর্যন্ত অবস্থান তৈরির অর্ডার দেয়।
এইভাবে, এটি ঝুঁকি নিয়ন্ত্রণ করতে পারে এবং দামের ক্রিয়াকলাপের সময় একটি নিম্ন গড় প্রবেশ মূল্য পেতে পারে। এদিকে, এটি বর্তমান প্রবেশের পরিস্থিতি বিচার করার জন্য গড় প্রবেশ মূল্য এবং মধ্যম মূল্য ট্র্যাক করে।
এই কৌশলটির নিম্নলিখিত সুবিধা রয়েছে:
এটি ঝুঁকি নিয়ন্ত্রণের জন্য ডাইপগুলিতে বরাদ্দ বৃদ্ধি এবং সমাবেশগুলিতে বরাদ্দ হ্রাস করে অবস্থানে গতিশীলভাবে স্কেল করতে পারে।
এটি মধ্যম মূল্যের তুলনায় একটি নিম্ন গড় প্রবেশ মূল্য পায়, যা আরও লাভের সম্ভাবনা দেয়।
এটি ভাল ঝুঁকি-প্রতিদান অনুপাতের জন্য অস্থিরতার সাথে বিভিন্ন ষাঁড়ের বাজারে ফিট করে।
এটি পজিশনের আকার নির্ধারণের ঝুঁকি নিয়ন্ত্রণের জন্য প্রাথমিক মূলধন এবং ডিসিএ শতাংশ পূর্বনির্ধারণ করতে সক্ষম করে।
এটি প্রবেশ মূল্যের পরিসংখ্যান এবং প্রবেশ মূল্যের মধ্যম মূল্যের পরিসংখ্যান প্রদান করে যাতে প্রবেশের মানের স্পষ্ট বিচার করা যায়।
এছাড়াও কিছু ঝুঁকি আছেঃ
বাজারের পতনের সময়, এটি অবস্থানকে বাড়িয়ে তুলবে, যার ফলে ভারী ক্ষতি হতে পারে।
যদি দাম দ্রুত বৃদ্ধি পায়, তবে স্কেলিং হ্রাস পাবে, সম্ভবত সমাবেশের অনেকটা মিস করবে। অন্য এলএসআই সংকেতগুলি তখন প্রয়োজন।
অপর্যাপ্ত প্যারামিটার কনফিগারেশনও বিপদ সৃষ্টি করে। অত্যধিক স্টার্ট-আপ মূলধন এবং উচ্চ ডিসিএ শতাংশ ক্ষতি বাড়িয়ে তুলবে।
কৌশলটি অপ্টিমাইজ করার কিছু উপায়ঃ
স্টপ লস লজিক যোগ করুন ভারী বিক্রির উপর স্কেলিং বন্ধ করতে।
ভোল্টেবিলিটি বা অন্যান্য মেট্রিকের ভিত্তিতে ডিসিএ শতাংশকে গতিশীলভাবে সামঞ্জস্য করুন।
দামের পূর্বাভাস দিতে এবং স্কেলিংয়ের সিদ্ধান্ত নিতে মেশিন লার্নিং মডেল অন্তর্ভুক্ত করা।
অন্যান্য সূচকগুলিকে একত্রিত করে বাজারের কাঠামোর পরিবর্তনগুলি সনাক্ত করুন।
অ্যাকাউন্টের মানের উপর ভিত্তি করে ডায়নামিকভাবে আকারের আদেশগুলিতে মূলধন পরিচালনার নিয়ম যুক্ত করুন।
এটি একটি খুব ব্যবহারিক গতিশীল পজিশন স্কেলিং কৌশল। এটি কনফিগারযোগ্য পরামিতিগুলির মাধ্যমে ঝুঁকি সীমাবদ্ধ করার সময় ভাল গড় এন্ট্রি অর্জন করতে মূল্যের ওঠানামা উপর ভিত্তি করে স্থিতির আকার নমনীয়ভাবে সামঞ্জস্য করে। এটি অন্যান্য সূচক বা মডেলগুলির সাথে একত্রিত করে এর কর্মক্ষমতা আরও উন্নত করতে পারে। এটি দীর্ঘমেয়াদী লাভের সন্ধানকারী বিনিয়োগকারীদের জন্য উপযুক্ত।
/*backtest start: 2024-01-20 00:00:00 end: 2024-02-19 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © RWCS_LTD //@version=5 strategy("DCA IN Calculator {RWCS}", overlay=true, pyramiding=999, default_qty_type=strategy.cash, initial_capital=10000, commission_value=0.02) // User inputs backtestStartDate = input(timestamp("1 Jan 2024"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") start_date = true starting_capital = input.float(defval=5000, title="Starting Capital") dca_allocation_percentage = input.int(defval=10, title="DCA Allocation Percentage") // Calculate DCA allocation based on price change price_change_percentage = ((close - close[1]) / close[1]) * 100 adjusted_allocation_percentage = close > close[1] ? dca_allocation_percentage - price_change_percentage : dca_allocation_percentage + price_change_percentage // If price action is negative, increase allocations adjusted_allocation_percentage1 = dca_allocation_percentage - price_change_percentage // If price action is positive, reduce allocations // Calculate order size based on adjusted allocation percentage order_size = (adjusted_allocation_percentage / 100) * starting_capital // Track remaining capital var remaining_capital = starting_capital // Long on the close of every bar if true // Ensure the order size doesn't exceed remaining capital or adjusted allocation order_size := math.min(order_size, remaining_capital, adjusted_allocation_percentage / 100 * starting_capital) // Ensure order size is not negative order_size := math.max(order_size, 0) strategy.entry("DCA", strategy.long, qty = order_size) remaining_capital := remaining_capital - order_size // Plot average entry price var float total_entry_price = 0.0 var int total_signals = 0 if start_date total_entry_price := total_entry_price + close total_signals := total_signals + 1 avg_entry_price = total_entry_price / total_signals // Calculate and plot median price var float median_price = na if start_date var float sum_prices = 0.0 var int num_prices = 0 for i = 0 to bar_index if (time[i] >= backtestStartDate) sum_prices := sum_prices + close[i] num_prices := num_prices + 1 median_price := sum_prices / num_prices // Reset variables at the start of each day if (dayofweek != dayofweek[1]) total_entry_price := 0.0 total_signals := 0 //table colors borders_col = color.new(color.black, 90) top_row_col = color.new(color.gray, 90) size = input.string(defval='Normal', options=['Tiny', 'Small', 'Normal', 'Large'], title='Table size', inline='design', group='Table Design') table_size = size == 'Tiny' ? size.tiny : size == 'Small' ? size.small : size == 'Normal' ? size.normal : size == 'Large' ? size.large : na var tablee = table.new(position=position.top_right, columns=2, rows=3, frame_color=borders_col, frame_width=4, border_color=borders_col, border_width=4) table.cell(tablee, 0, 0, "Average Entry Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size) table.cell(tablee, 1, 0, str.tostring(avg_entry_price, '#.##'), text_color=color.white, text_size=table_size) table.cell(tablee, 0, 1, "Median Price", bgcolor=top_row_col, text_color=color.white, text_size=table_size) table.cell(tablee, 1, 1, str.tostring(median_price, '#.##'), text_color=color.white, text_size=table_size) table.cell(tablee, 0, 2, "Remaining Capital", bgcolor=top_row_col, text_color=color.white, text_size=table_size) table.cell(tablee, 1, 2, str.tostring(remaining_capital, '#.##'), text_color=color.white, text_size=table_size)