ডনচিয়ান চ্যানেল ট্রেন্ড অনুসরণকারী কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০১-২২ ১২ঃ৩০ঃ০৫
ট্যাগঃ

img

সারসংক্ষেপ

ডনচিয়ান চ্যানেল ট্রেন্ড অনুসরণকারী কৌশল হল ডনচিয়ান চ্যানেল সূচকের উপর ভিত্তি করে একটি ট্রেন্ড অনুসরণকারী কৌশল। এটি মূল্যের প্রবণতা সনাক্ত করতে এবং যখন দামগুলি চ্যানেলগুলি থেকে বেরিয়ে আসে তখন ট্রেডিং সংকেত তৈরি করতে বিভিন্ন দৈর্ঘ্যের ডনচিয়ান চ্যানেলগুলি ব্যবহার করে।

এই কৌশলটির মূল ধারণা হল প্রধান প্রবণতা দিক নির্ধারণের জন্য একটি দীর্ঘমেয়াদী ডনচিয়ান চ্যানেল এবং প্রবেশ এবং স্টপ লস সিগন্যাল হিসাবে একটি স্বল্পমেয়াদী ডনচিয়ান চ্যানেল ব্যবহার করা। এর লক্ষ্য বাজারের স্বল্পমেয়াদী ওঠানামা দ্বারা বিভ্রান্ত না হয়ে মাঝারি থেকে দীর্ঘমেয়াদী মূল্য প্রবণতা ক্যাপচার করা।

কৌশলগত যুক্তি

  1. ডনচিয়ান চ্যানেল তৈরির জন্য দীর্ঘ সময়ের মধ্যে সর্বোচ্চ বন্ধের মূল্য এবং সর্বনিম্ন বন্ধের মূল্য গণনা করুন (উদাহরণস্বরূপ 50 দিন) । উপরের ব্যান্ডের উপরে একটি ব্রেকআউট একটি আপট্রেন্ড নির্দেশ করে যখন নিম্ন ব্যান্ডের নীচে একটি ব্রেকআউট একটি ডাউনট্রেন্ড নির্দেশ করে। এটি প্রধান প্রবণতার দিক নির্ধারণ করে।

  2. প্রবেশ এবং স্টপ লস এর মানদণ্ড হিসাবে স্বল্প সময়ের মধ্যে সর্বোচ্চ বন্ধের মূল্য এবং সর্বনিম্ন বন্ধের মূল্য ব্যবহার করুন (উদাহরণস্বরূপ 20 দিন) । যখন দাম দীর্ঘ সময়ের চ্যানেল থেকে বেরিয়ে আসে, যদি বন্ধের মূল্যও স্বল্প সময়ের চ্যানেলটি ভেঙে যায়, তখন যথাযথভাবে একটি লং/শর্ট পজিশন নিন।

  3. লং পজিশন ধরে রাখার সময়, যদি মূল্য স্বল্প-মেয়াদী উপরের ব্যান্ডের নিচে পড়ে, তাহলে ক্ষতিতে বন্ধ করুন।

  4. স্টপ লস N গুণ ATR এ সেট করা হয়। এটি বাজারের অস্থিরতার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সামঞ্জস্য করে, স্টপ লস আঘাতের সম্ভাবনা কম করে।

  5. ট্রেডিং সেশনের শেষ হওয়ার আগে পজিশন বন্ধ করা বা স্টপ লস না হওয়া পর্যন্ত পজিশন ধরে রাখার একটি বিকল্প রয়েছে। এটি একটি ইনপুট প্যারামিটার দ্বারা নিয়ন্ত্রিত হয়।

কৌশলটি ট্রেন্ড সনাক্তকরণ এবং লাভ স্টপ লস উভয়কেই বিবেচনা করে। এটি ঝুঁকি নিয়ন্ত্রণের সময় মূল্যের প্রবণতা ক্যাপচার করতে পারে। এটি মাঝারি থেকে দীর্ঘমেয়াদী ব্যবসায়ের জন্য উপযুক্ত।

সুবিধা বিশ্লেষণ

  1. স্বল্পমেয়াদী বাজারের গোলমালের হস্তক্ষেপ ছাড়াই মাঝারি থেকে দীর্ঘমেয়াদী প্রবণতা কার্যকরভাবে চিহ্নিত করে।

  2. স্বয়ংক্রিয় স্টপ লস মেকানিজম প্রতি ট্রেড ক্ষতির সীমা।

  3. এটিআর-ভিত্তিক স্টপ লস বাজার অস্থিরতার উপর ভিত্তি করে স্টপ লস দূরত্ব সামঞ্জস্য করে, স্টপ লসের সম্ভাবনা হ্রাস করে।

  4. ট্রেডিংয়ের ঝুঁকি পরিচালনা করা সম্ভব না হলে স্বয়ংক্রিয়ভাবে পজিশন বন্ধ করা।

  5. সহজ এবং স্পষ্ট কৌশল যুক্তি যা সহজেই বোঝা যায়।

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

  1. যেসব বাজারে প্রবণতা নেই, সেইসব বাজারে কৌশলটি আরও বেশি ট্রেড তৈরি করতে পারে, যার ফলে ট্রেডিংয়ের খরচ এবং ক্ষতির সম্ভাবনা বাড়তে পারে।

  2. যদিও স্টপ লস মেকানিজম রয়েছে, তবে অস্থির পরিস্থিতিতে মূল্য ফাঁকগুলি স্টপ লস পয়েন্টটি সরাসরি প্রবেশ করতে পারে এবং বিশাল ক্ষতির কারণ হতে পারে।

  3. এটিআর গণনা শুধুমাত্র ঐতিহাসিক তথ্যের উপর ভিত্তি করে এবং ভবিষ্যতে মূল্য আন্দোলন এবং অস্থিরতা সঠিকভাবে পূর্বাভাস দিতে পারে না। প্রকৃত স্টপ দূরত্ব খুব প্রশস্ত বা খুব সংকীর্ণ হতে পারে।

  4. স্টপ লস অর্ডার সবসময় লাইভ ট্রেডিংয়ে পূরণ হতে পারে না। তারা চরম অস্থির অবস্থার কারণে ক্ষতির কারণ হতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

  1. প্রবণতা সনাক্তকরণ কর্মক্ষমতা অপ্টিমাইজ করার জন্য Donchian চ্যানেল পরামিতি সামঞ্জস্য করুন.

  2. ট্রেডিং সিগন্যাল নিশ্চিত করতে এবং কৌশল স্থিতিশীলতা উন্নত করতে এমএসিডি, কেডিজে এর মতো অন্যান্য সূচক অন্তর্ভুক্ত করুন।

  3. দামের সাথে স্টপ লস পয়েন্টটি সরানোর জন্য ট্রেলিং স্টপ লস যুক্ত করুন, ক্ষতি আরও সীমাবদ্ধ করে।

  4. অপ্টিমাম সামগ্রিক ফলাফলের জন্য বিভিন্ন হোল্ডিং সময়ের প্রভাব পরীক্ষা করুন।

  5. গতিশীলভাবে অবস্থান আকারের সমন্বয় বিবেচনা করুন, ট্রেন্ডিং অবস্থার মধ্যে অবস্থান বৃদ্ধি।

সংক্ষিপ্তসার

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Donchian", overlay=true, calc_on_every_tick=true)

// =============================================================================
// VARIABLES
// =============================================================================

donch_string = input.string(title="Lenght", options = ['20/10','50/20', '50/50', '20/20', '100/100'], defval='20/10')
permit_long  = input.bool(title = 'Permit long', defval = true)
permit_short  = input.bool(title = 'Permit short', defval = true)
risk_percent = input.float(title="Position Risk %", defval=0.5, step=0.25)
stopOffset = input.float(title="ATR mult", defval=2.0, step=0.5)
atrLen = input.int(title="ATR Length", defval=20)
close_in_end  = input.bool(title = 'Close in end', defval = true)
permit_stop  = input.bool(title = 'Permit stop', defval = true)


// =============================================================================
// CALCULATIONS
// =============================================================================

donch_len_big = 
 donch_string == '50/20' ? 50 : 
 donch_string == '50/50' ? 50 : 
 donch_string == '20/20' ? 20 : 
 donch_string == '20/10' ? 20 : 
 donch_string == '100/100' ? 100 : 
 na
donch_len_small = 
 donch_string == '50/20' ? 20 : 
 donch_string == '50/50' ? 50 : 
 donch_string == '20/20' ? 20 : 
 donch_string == '20/10' ? 10 : 
 donch_string == '100/100' ? 100 : 
 na

big_maxclose = ta.highest(close, donch_len_big)
big_minclose = ta.lowest(close, donch_len_big)

small_maxclose = ta.highest(close, donch_len_small)
small_minclose = ta.lowest(close, donch_len_small)

atrValue = ta.atr(atrLen)[1]

tradeWindow  = true

// =============================================================================
// NOTOPEN QTY
// =============================================================================

risk_usd     = (risk_percent / 100) * strategy.equity
atr_currency = (atrValue * syminfo.pointvalue)
notopen_qty  = risk_usd / (stopOffset * atr_currency)

// =============================================================================
// LONG STOP
// =============================================================================

long_stop_price = 0.0
long_stop_price := 
 strategy.position_size > 0 and na(long_stop_price[1]) ? strategy.position_avg_price - stopOffset * atrValue : 
 strategy.position_size > 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price:
 strategy.position_size > 0 ? long_stop_price[1] : 
 na

// =============================================================================
// SHORT STOP
// =============================================================================

short_stop_price = 0.0
short_stop_price := 
 strategy.position_size < 0 and na(short_stop_price[1]) ? strategy.position_avg_price + stopOffset * atrValue : 
 strategy.position_size < 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price :
 strategy.position_size < 0 ? short_stop_price[1] : 
 na

// =============================================================================
// PLOT BG VERTICAL COLOR
// =============================================================================

cross_up = strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long
cross_dn =  strategy.position_size >= 0 and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short
bg_color = cross_up ? color.green : cross_dn ? color.red : na
bg_color := color.new(bg_color, 70)
bgcolor(bg_color)

// =============================================================================
// PLOT HORIZONTAL LINES
// =============================================================================

s1 = cross_up ? na : cross_dn ? na : strategy.position_size != 0 ? strategy.position_avg_price : na
s2 = cross_up ? na : cross_dn ? na : strategy.position_size > 0 ? small_minclose : strategy.position_size < 0 ? small_maxclose : na
s3 = cross_up ? na : cross_dn ? na : not permit_stop ? na : 
 strategy.position_size > 0 ? long_stop_price : strategy.position_size < 0 ? short_stop_price : na

plot(series=big_maxclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Maxclose Black")
plot(series=big_minclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Minclose Black")

plot(series=s1, style=plot.style_linebr, color=color.yellow, linewidth=2, title="Entry Yellow")
plot(series=s2, style=plot.style_linebr, color=color.red, linewidth=1, title="Donch Small Red")
plot(series=s3, style=plot.style_linebr, color=color.fuchsia, linewidth=2, title="Stop Fuchsia")

// =============================================================================
// ENTRY ORDERS
// =============================================================================

if strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long
    strategy.entry("Long", strategy.long, qty=notopen_qty)

if (strategy.position_size >= 0) and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short
    strategy.entry("Short", strategy.short, qty=notopen_qty)

// =============================================================================
// EXIT ORDERS
// =============================================================================

if strategy.position_size > 0 and permit_stop
    strategy.exit(id="Stop", from_entry="Long", stop=long_stop_price)

if strategy.position_size < 0 and permit_stop
    strategy.exit(id="Stop", from_entry="Short", stop=short_stop_price)

// ==========

if strategy.position_size > 0 and close == small_minclose and not barstate.islast
    strategy.close(id="Long", comment='Donch')

if strategy.position_size < 0 and close == small_maxclose and not barstate.islast
    strategy.close(id="Short", comment='Donch')

// ==========

if close_in_end
    if not tradeWindow
        strategy.close_all(comment='In end')

// =============================================================================
// END
// =============================================================================

আরো