গতিশীল অবস্থান সংযোজন কৌশলের উপর ভিত্তি করে


সৃষ্টির তারিখ: 2024-02-20 14:16:30 অবশেষে সংশোধন করুন: 2024-02-20 14:16:30
অনুলিপি: 0 ক্লিকের সংখ্যা: 624
1
ফোকাস
1617
অনুসারী

গতিশীল অবস্থান সংযোজন কৌশলের উপর ভিত্তি করে

ওভারভিউ

এই কৌশলটির মূল ধারণা হল সিস্টেমের সংকেত গতিশীলতার উপর ভিত্তি করে পজিশন বাড়ানো, ঝুঁকি নিয়ন্ত্রণ এবং নিম্ন গড় প্রবেশ মূল্য অর্জনের জন্য বুল মার্কেটে ধীরে ধীরে অবস্থান স্থাপন করা।

কৌশল নীতি

এই কৌশলটি প্রথমে প্রারম্ভিক মূলধন এবং ডিসিএ কনফিগারেশনের শতাংশ সেট করে। প্রতিটি কে লাইনের সমাপ্তির সময়, এটি দামের পরিবর্তনের উপর ভিত্তি করে কনফিগারেশনের শতাংশের সমন্বয় করে। দাম বাড়লে, এটি শতাংশ হ্রাস করে; যদি দাম কমে যায় তবে এটি শতাংশ বাড়ায়।

এইভাবে, এটি বাজারের অস্থিরতার সময় ঝুঁকি নিয়ন্ত্রণ করতে পারে এবং কম গড় প্রবেশ মূল্য পেতে পারে। একই সাথে, এটি গড় প্রবেশ মূল্য এবং মধ্যবর্তী মূল্যের পরিসংখ্যানও তৈরি করে, যা বর্তমান প্রবেশের পরিস্থিতি নির্ধারণ করতে পারে।

সামর্থ্য বিশ্লেষণ

এই কৌশলটির সুবিধাগুলো হলঃ

  1. আপনি গতিশীলভাবে পজিশন বাড়াতে পারেন, যখন বাজারের পতন হয় তখন পজিশন বাড়ান, যখন বাজারের উত্থান হয় তখন পজিশন হ্রাস করুন, যার ফলে ঝুঁকি নিয়ন্ত্রণ করা যায়।

  2. গড় প্রবেশমূল্য মধ্যম মূল্যের চেয়ে কম, যা উচ্চতর লাভের জন্য সুবিধাজনক।

  3. এটি একটি ভাল রিস্ক-রিটার্ন অনুপাতের জন্য উপযুক্ত, যা একটি ভাল বাজারের মধ্যে চলমান বাজারের জন্য উপযুক্ত।

  4. প্রারম্ভিক তহবিল এবং ডিসিএ শতাংশের পূর্বনির্ধারণ করা যায়, প্রতিবারের জন্য তহবিলের পরিমাণ নিয়ন্ত্রণ করা যায়, অত্যধিক ঝুঁকি এড়ানো যায়।

  5. গড় ভর্তি মূল্য এবং মধ্যম ভর্তি মূল্যের পরিসংখ্যান সরবরাহ করে, যা ভর্তির গুণগত মান নির্ধারণ করতে পারে।

ঝুঁকি বিশ্লেষণ

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

  1. বাজারের পতনের সময়, এই কৌশলটি ধারাবাহিকভাবে পজিশনিং করে, যার ফলে বড় পরিমাণে অর্থের ক্ষতি হতে পারে। ঝুঁকি নিয়ন্ত্রণের জন্য ক্ষতি বন্ধ করা যেতে পারে।

  2. যদি বাজার দ্রুত বৃদ্ধি পায়, তবে এই কৌশলটির জন্য হারের হার হ্রাস পাবে এবং এটির বেশিরভাগ উত্থানের সুযোগ মিস হতে পারে। এই ক্ষেত্রে অন্যান্য সংকেত ব্যবহার করে একটি দ্রুত এলএসআই প্রয়োজন।

  3. ভুল প্যারামিটার সেট করাও কিছু ঝুঁকি নিয়ে আসে। খুব বেশি প্রারম্ভিক মূলধন, খুব বেশি ডিসিএ শতাংশ ক্ষতির বিস্তার করে।

অপ্টিমাইজেশান দিক

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকেও উন্নত করা যেতে পারেঃ

  1. স্টপ লজিস্টিক যুক্ত করা যায়, যাতে বড় পতনের সময় পজিশন করা বন্ধ করা যায়।

  2. ডিসিএ শতাংশের গতিশীলতা ওঠানামা বা অন্যান্য সূচকের উপর ভিত্তি করে পরিবর্তন করা যেতে পারে।

  3. মেশিন লার্নিং মডেল যুক্ত করা যায়, যা দামের পরিবর্তনের পূর্বাভাস দেয়, যা পজিশন বাড়ানোর সিদ্ধান্তকে নির্দেশ করে।

  4. অন্যান্য প্রযুক্তিগত সূচকগুলির সাথে একত্রে বাজারের কাঠামো নির্ধারণ করা যায়, কাঠামোগত বিপর্যয়ের সময় পজিশন বন্ধ করা যায়।

  5. ক্যাপিটাল ম্যানেজমেন্ট মডিউল যুক্ত করা যায় যাতে অ্যাকাউন্টের তহবিলের উপর ভিত্তি করে প্রতিবারের জন্য ক্যাপিটাল ম্যানেজমেন্ট পরিবর্তন করা যায়।

সারসংক্ষেপ

এই কৌশলটি একটি খুব কার্যকর গতিশীল পজিশনিং কৌশল। এটি বাজারের ওঠানামা অনুযায়ী পজিশন পজিশনকে নমনীয়ভাবে সামঞ্জস্য করতে পারে, একটি ষাঁড়ের বাজারে কম গড় প্রবেশের মূল্য অর্জন করে। একই সাথে, এটি ঝুঁকি নিয়ন্ত্রণের জন্য প্যারামিটার সেটগুলি অন্তর্নির্মিত করে। অন্যান্য প্রযুক্তিগত সূচক বা মডেলের সাথে মিলিত হলে আরও ভাল ফলাফল পাওয়া যায়। এই কৌশলটি দীর্ঘমেয়াদী বিনিয়োগের রিটার্নের সন্ধানকারী বিনিয়োগকারীদের জন্য উপযুক্ত।

কৌশল সোর্স কোড
/*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)