ডাবল মুভিং এভারেজ ক্রসওভার কৌশল একটি প্রবণতা অনুসরণকারী কৌশল যা বিভিন্ন সময়কালের দুটি চলমান গড়ের ক্রসওভারকে ট্রেডিং সংকেত হিসাবে ব্যবহার করে। এটি দ্রুত এমএ ধীর এমএ এর উপরে বা নীচে অতিক্রম করার সময় দীর্ঘ বা সংক্ষিপ্ত অবস্থানে প্রবেশ করে এবং ক্রসওভারের পরে প্রবণতার দিক নির্ধারণ করে। এটি অত্যধিক ওঠানামা থেকে অপ্রয়োজনীয় ট্রেডিং ফ্রিকোয়েন্সি হ্রাস করার সময় মধ্যমেয়াদী প্রবণতা ক্যাপচার করতে পারে।
কৌশলটি দুটি চলমান গড় ব্যবহার করেঃ স্বল্পমেয়াদী মূল্য চলাচল ক্যাপচার করার জন্য একটি দ্রুত এমএ (উদাহরণস্বরূপ 15 পিরিয়ড) এবং বড় প্রবণতা দিক চিহ্নিত করার জন্য দীর্ঘমেয়াদী এমএ (উদাহরণস্বরূপ 21 পিরিয়ড) । দুটি এমএ এর মধ্যে ক্রসওভারের মাধ্যমে ট্রেডিং সংকেত উত্পন্ন হয়ঃ ধীর এমএ এর উপরে দ্রুত এমএ ক্রসিং কেনার সংকেত দেয়, যখন নীচে দ্রুত এমএ ক্রসিং বিক্রয় সংকেত দেয়।
এমএ সময়কালের সংমিশ্রণগুলিকে সামঞ্জস্য করে, কৌশলটি প্রবণতার সময়সীমাটি ক্যাপচার করতে সামঞ্জস্য করতে পারে। স্বল্পমেয়াদী এমএ কম্বোগুলি স্বল্পমেয়াদী দোলগুলিকে লক্ষ্য করে, যখন দীর্ঘমেয়াদী এমএ কম্বোগুলি শব্দটি ফিল্টার করে এবং কেবল দীর্ঘমেয়াদী প্রবণতাগুলিতে ফোকাস করে।
এই কৌশলটিতে লাভ গ্রহণ, স্টপ লস এবং ট্রেলিং স্টপ লস সহ ঝুঁকি ব্যবস্থাপনা মডিউল অন্তর্ভুক্ত রয়েছে। এগুলি পৃথক ব্যবসায়ের সর্বাধিক লাভ / ক্ষতি সীমাবদ্ধ করতে সহায়তা করে এবং সামগ্রিক ঝুঁকি ধারণ করে।
ডাবল এমএ কৌশল নিম্নলিখিত প্রান্ত আছেঃ
এছাড়াও কিছু ঝুঁকি রয়েছে যা বিবেচনা করা উচিতঃ
এই দুর্বলতাগুলি ফিল্টারিং সংকেত, ট্রেলিং স্টপ লস ইত্যাদির মতো অপ্টিমাইজেশনের মাধ্যমে প্রশমিত করা যেতে পারে।
কৌশলটি নিম্নলিখিত দিকগুলির মধ্যে উন্নত করা যেতে পারেঃ
এই বৃদ্ধির ফলে জয়ের হার উল্লেখযোগ্যভাবে বৃদ্ধি পাবে এবং ঝুঁকি সামঞ্জস্য করে আয় হবে বলে আশা করা হচ্ছে।
সামগ্রিকভাবে, দ্বৈত চলমান গড় ক্রসওভার কৌশলটি সরলতা, নমনীয়তা এবং নিয়ন্ত্রণযোগ্য ঝুঁকি সরবরাহ করে। এর বাস্তবায়ন এবং অপ্টিমাইজেশনের সহজতা এটিকে একটি আদর্শ প্রাথমিক পরিমাণ কৌশল করে তোলে। পুনরাবৃত্তিমূলক পরীক্ষা এবং টিউনিংয়ের সাথে, এটি সময়ের সাথে একটি শক্তিশালী সিস্টেমে বিকশিত হওয়ার শংসাপত্র রয়েছে।
/*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)