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

লেখক:চাওঝাং, তারিখঃ 2024-01-31 16:53:31
ট্যাগঃ

img

সারসংক্ষেপ

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

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

কৌশলটি প্রবণতা দিক বিচার করতে ডনচিয়ান চ্যানেল সূচকের উপর ভিত্তি করে। ডনচিয়ান চ্যানেল একটি দীর্ঘ সময়ের চ্যানেল এবং একটি স্বল্প সময়ের চ্যানেল নিয়ে গঠিত। যখন দাম দীর্ঘ সময়ের চ্যানেলটি ভেঙে যায়, এটি একটি প্রবণতার সূচনাকে নির্দেশ করে। যখন দাম স্বল্প সময়ের চ্যানেলটি ভেঙে যায়, এটি প্রবণতার সমাপ্তিকে নির্দেশ করে।

বিশেষত, দীর্ঘ সময়ের চ্যানেল দৈর্ঘ্য 50 দিন বা 20 দিন, এবং স্বল্প সময়ের চ্যানেল দৈর্ঘ্য 50 দিন, 20 দিন বা 10 দিন। যদি দাম 50 দিনের মধ্যে সর্বোচ্চ দামের সমান হয় তবে একটি দীর্ঘ অবস্থান খোলা হয়। যদি দাম 50 দিনের মধ্যে সর্বনিম্ন দামের সমান হয় তবে একটি শর্ট অবস্থান খোলা হয়। যদি দাম 20 বা 10 দিনের মধ্যে সর্বনিম্ন দামের সমান হয় তবে দীর্ঘ অবস্থানগুলি বন্ধ হয়ে যায়। যদি দাম 20 বা 10 দিনের মধ্যে সর্বোচ্চ দামের সমান হয় তবে শর্ট অবস্থানগুলি বন্ধ হয়ে যায়।

বিভিন্ন সময়ের দুটি ডনচিয়ান চ্যানেলকে একত্রিত করে, এটি একটি প্রবণতা শুরু হলে অবস্থান স্থাপন করার দিক নির্ধারণ করতে পারে এবং প্রবণতা শেষ হলে সময়মত স্টপ লস উপলব্ধি করতে পারে।

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

এই কৌশলটির প্রধান সুবিধাগুলো হল:

  1. প্রবণতা ক্যাপচার করার শক্তিশালী ক্ষমতা। এটি ডনচিয়ান চ্যানেলের ব্রেকআউট ব্যবহার করে প্রবণতার শুরু এবং শেষ সনাক্ত করে প্রবণতা কার্যকরভাবে ট্র্যাক করতে পারে।

  2. সঠিক ঝুঁকি নিয়ন্ত্রণ. এটি একক বাণিজ্য ক্ষতি নিয়ন্ত্রণ করতে একটি চলমান স্টপ লস ব্যবহার করে।

  3. নমনীয় পরামিতি সমন্বয়. বিভিন্ন পণ্য এবং বাজার পরিবেশের সাথে মানিয়ে নিতে চ্যানেলের সময়কালের সমন্বয় অবাধে নির্বাচন করা যেতে পারে।

  4. সহজ এবং পরিষ্কার ট্রেডিং লজিক। এটি বোঝা এবং বাস্তবায়ন করা সহজ।

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

এই কৌশলের ঝুঁকিগুলির মধ্যে রয়েছেঃ

  1. ব্যাপ্তি সীমাবদ্ধ বাজারে মানিয়ে নিতে অক্ষমতা। প্রবণতা অস্পষ্ট হলে ধারাবাহিক ছোট স্টপ লস ভোগ করবে।

  2. ব্রেকআউট ব্যর্থতার ঝুঁকি। চ্যানেলটি ভেঙে যাওয়ার পরে দাম ফিরে আসতে পারে, স্টপ লস হতে পারে।

  3. সময়কাল নির্বাচন ঝুঁকিঃ অপ্রয়োজনীয় চ্যানেল সময়কাল সেটিংস গোলমাল ট্রেডিং হতে পারে।

  4. শার্প রেসিও হ্রাসের ঝুঁকিঃ স্টপ লস সামঞ্জস্য না করে পজিশনের আকার বৃদ্ধি শার্প রেসিও হ্রাসের কারণ হতে পারে।

সমাধানগুলো হল:

  1. উপযুক্ত চ্যানেল সময়ের সমন্বয় নির্বাচন করতে পরামিতি অপ্টিমাইজ করুন।
  2. ঝুঁকি নিয়ন্ত্রণের জন্য পজিশনের আকার এবং স্টপ লস সঠিকভাবে সামঞ্জস্য করুন।
  3. স্পষ্ট প্রবণতা সহ পণ্য এবং বাজারের জন্য এই কৌশলটি ব্যবহার করুন।

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

এই কৌশলটির অপ্টিমাইজেশান দিকঃ

  1. ফিল্টার শর্তাদি যোগ করা যাতে whipsaws এড়ানো যায়, যেমন সত্যিকারের breakouts বিচার করার জন্য ভলিউম একত্রিত করা।

  2. মুনাফা অনুপাত বাড়ানোর জন্য চ্যানেলের সময়কালের সংমিশ্রণ এবং অবস্থানের আকারকে অনুকূল করা। অভিযোজিত স্টপ লস চালু করা যেতে পারে।

  3. সর্বোত্তম প্যারামিটার সেট খুঁজতে ব্রেকপয়েন্ট অপ্টিমাইজেশান চেষ্টা করা হচ্ছে.

  4. গতিশীল অপ্টিমাইজেশান এবং পরামিতি সমন্বয় জন্য মেশিন লার্নিং অ্যালগরিদম বৃদ্ধি।

সিদ্ধান্ত

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


/*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,
     pyramiding=0, initial_capital=1000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=2, slippage=2)

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

donch_string = input.string(title="Length", options = ['20/10','50/20', '50/50', '20/20', '100/100'], defval='50/50')
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 = false)

// =============================================================================
// 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 VERTICAL COLOR BAR
// =============================================================================

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 DONCHIAN 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='Close in end')

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

আরো