ডাবল ইয়ারলাইন ব্রেকআউট কৌশলটি একটি ট্রেন্ড ট্র্যাকিং কৌশল যা দুটি ভিন্ন পিরিয়ডের উপর ভিত্তি করে একটি চলমান গড় ক্রস হিসাবে একটি ক্রয়-বিক্রয় সংকেত হিসাবে কাজ করে। এই কৌশলটি একটি দ্রুত গড় এবং একটি ধীর গড় ক্রস পয়েন্টকে ট্রেডিং এন্ট্রি পয়েন্ট হিসাবে ব্যবহার করে, ক্রস করার পরে ট্রেন্ডের দিকনির্দেশনা নির্ধারণ করে এবং সংশ্লিষ্ট ওভারহেড বা ফাঁকা অবস্থান স্থাপন করে। এটি মাঝারি স্তরের প্রবণতা ধরে এবং অপ্রয়োজনীয় ঝাঁকুনি দ্বারা সৃষ্ট অত্যধিক লেনদেনের সমস্যা হ্রাস করতে পারে।
এই কৌশলটি দুটি মুভিং এভারেজ ব্যবহার করেঃ একটি দ্রুত এমএ এবং একটি ধীর এমএ। দ্রুত এমএ চক্রটি সাধারণত স্বল্পমেয়াদী সময়ের জন্য সেট করা হয় (যেমন 15 পিরিয়ড), যা স্বল্পমেয়াদী মূল্য পরিবর্তনের জন্য ব্যবহৃত হয়; ধীর এমএ চক্রটি সাধারণত দীর্ঘ সময়ের জন্য সেট করা হয় (যেমন 21 পিরিয়ড), যা মূল প্রবণতার দিকনির্দেশের জন্য ব্যবহৃত হয়। কৌশলটির ট্রেডিং সিগন্যাল দুটি এমএ এর ক্রস থেকে আসেঃ যখন দ্রুত এমএ ধীর এমএ অতিক্রম করে তখন একটি কেনার সংকেত; যখন দ্রুত এমএ ধীর এমএ অতিক্রম করে তখন একটি বিক্রয় সংকেত।
বিভিন্ন এমএ চক্রের পোর্টফোলিও সেট করে, কৌশলটি ট্রেন্ড ক্যাপচার করার সময়কালের দৈর্ঘ্যকে সামঞ্জস্য করতে পারে। সংক্ষিপ্ত এমএ পোর্টফোলিওগুলি স্বল্পমেয়াদী ছোট চক্রের জন্য মূল্য পরিবর্তনের সুযোগগুলি ধরতে পারে; দীর্ঘ এমএ পোর্টফোলিওগুলি কেবলমাত্র দীর্ঘতর লাইন স্তরের প্রবণতা ধরার জন্য ঝড়কে ফিল্টার করতে পারে।
এই কৌশলটিতে ঝুঁকি ব্যবস্থাপনা মডিউলও অন্তর্ভুক্ত রয়েছেঃ স্টপ, স্টপ লস, মুভিং স্টপ লস। এটি একক লেনদেনের সর্বোচ্চ ক্ষতির সীমা নির্ধারণ করে এবং সামগ্রিক লাভ রক্ষা করতে সহায়তা করে।
দ্বি-মিলনের কৌশল নিম্নলিখিত সুবিধাগুলি নিয়ে আসেঃ
ডাবল ইউনিভার্সাল স্ট্র্যাটেজিতে কিছু ঝুঁকিও রয়েছে, যা নিম্নলিখিত দিকগুলিতে কেন্দ্রীভূতঃ
এই ঝুঁকিগুলি সংশোধন এবং অপ্টিমাইজ করা যেতে পারে, যেমন MA প্যারামিটারগুলিকে সামঞ্জস্য করা, ফিল্টারিং শর্তগুলি যুক্ত করা এবং স্টপ লজিকটি অপ্টিমাইজ করা।
ডাবল ওয়ানলাইন কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ
এই অপ্টিমাইজেশান এবং উন্নতিগুলি কৌশলগুলির সাফল্য, লাভের হার, ঝুঁকি এবং রিটার্নের হারকে উল্লেখযোগ্যভাবে উন্নত করতে পারে।
ডাবল ইক্যুইলিটি ব্রেকথ্রু কৌশলটি সামগ্রিকভাবে একটি প্রবণতা ট্র্যাকিং কৌশল যা সহজেই বাস্তবায়ন এবং অনুকূলিতকরণ করা যায়। এটি সহজ অপারেশন, নমনীয়তা এবং ঝুঁকি নিয়ন্ত্রণের মতো সুবিধাগুলির সাথে কাজ করে, যা পরিমাণগত ব্যবসায়ের প্রবেশের কৌশল হিসাবে উপযুক্ত। ক্রমাগত পরীক্ষা এবং অপ্টিমাইজেশনের মাধ্যমে, এই কৌশলটি ক্রমাগত উন্নতি করতে পারে এবং এটি একটি গুণগত কৌশল হওয়ার সম্ভাবনা রয়েছে।
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)
maFastSource = input(defval = ohlc4, title = "Fast MA Source")
maFastLength = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1)
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
useTimeLimit = input(defval = true, title = "Use Start Time Limiter?")
startYear = input(defval = 2018, title = "Start From Year", minval = 0, step = 1)
startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1)
startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
startTimeOk() =>
inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
timeOk = time > inputTime ? true : false
r = (useTimeLimit and timeOk) or not useTimeLimit
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)
aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
if( startTimeOk() )
enterLong = not tradeDirection[1] and tradeDirection
exitLong = tradeDirection[1] and not tradeDirection
strategy.entry( id = "Long", long = true, when = enterLong )
//strategy.close( id = "Long", when = exitLong )
enterShort = tradeDirection[1] and not tradeDirection
exitShort = not tradeDirection[1] and tradeDirection
strategy.entry( id = "Short", long = false, when = enterShort )
//strategy.close( id = "Short", when = exitShort )
strategy.exit("Exit Long", from_entry = "Long", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)