এই কৌশলটি এমএসিডি সূচক এবং এর সংকেত লাইনের চলমান গড়ের মধ্যে ক্রসওভার গণনা করে প্রবণতা দিক নির্ধারণ করে এবং প্রবণতাটি ট্র্যাক করার জন্য ইএমএ সূচক দিয়ে বর্তমান প্রবণতার শক্তি বিচার করে। যখন এমএসিডি লাইন সংকেত লাইনটি উপরে ভাঙবে তখন এটি দীর্ঘ হয় এবং নেমে যাওয়ার সময় এটি সংক্ষিপ্ত হয়। ইএমএ লাইনটি মিথ্যা ব্রেকআউটগুলি ফিল্টার করতে প্রবণতার শক্তিও বিচার করতে পারে।
এই কৌশলটির মূল বিষয় হল এমএসিডি সূচকের উপর ভিত্তি করে প্রবণতা দিক এবং প্রবেশের সময় নির্ধারণ করা। এমএসিডি লাইন এবং সিগন্যাল লাইনের মধ্যে ক্রসওভার দামের প্রবণতার বিপরীতমুখী নির্দেশ করে। অতএব, লং এবং শর্ট পজিশনগুলি ব্রেকআউট দিক অনুযায়ী নির্ধারিত হয়। বিশেষত, যখন বন্ধের মূল্য ইএমএ লাইনের উপরে থাকে এবং এমএসিডি লাইন নীচের থেকে সিগন্যাল লাইনের মধ্য দিয়ে ভেঙে যায়, তখন দীর্ঘ যান; যখন বন্ধের মূল্য ইএমএ লাইনের নীচে থাকে এবং এমএসিডি লাইন উপরে থেকে সিগন্যাল লাইনের মধ্য দিয়ে ভেঙে যায়, তখন শর্ট যান।
ইএমএ লাইন প্রবণতা বিচার করতে সহায়তা করে। যদি মূল্য ইএমএ লাইনের উপরে থাকে তবে এটি একটি আপগ্রেড প্রবণতা নির্দেশ করে। এই সময়ে, নীচের এমএসিডি থেকে একটি অগ্রগতি একটি সোনার ক্রস সংকেত গঠন করার সম্ভাবনা রয়েছে। যদি মূল্য ইএমএ লাইনের নীচে থাকে তবে এটি একটি নেমে যাওয়ার প্রবণতা নির্দেশ করে। এই সময়ে, এমএসিডি এর উপরে থেকে একটি অগ্রগতি একটি মৃত্যুর ক্রস সংকেত গঠন করার সম্ভাবনা রয়েছে। ইএমএর দৈর্ঘ্য প্রবণতা রায়ের মাঝারি থেকে দীর্ঘমেয়াদী ডিগ্রিও নির্ধারণ করে।
এই ভাবে, যখন দাম নতুন প্রবণতা গঠনের জন্য বিপরীতমুখী হতে শুরু করে, আমরা সময়মত বাজারে প্রবেশ করতে পারি, প্রবণতা ট্র্যাকিং প্রভাব অর্জন করতে পারি।
এই কৌশলটি দ্বৈত বিচার শর্তকে একত্রিত করে, দামের প্রবণতা দিক বিবেচনা করে এবং নির্দিষ্ট প্রবেশের সময় নির্ধারণের জন্য সূচকগুলি ব্যবহার করে, মিথ্যা ব্রেকআউটের ঝুঁকি এড়ানো এবং কৌশলটির নির্ভরযোগ্যতা বৃদ্ধি করে। একা এমএসিডি সূচক ব্যবহারের তুলনায়, এই কৌশলটি একটি নতুন প্রবণতার শুরু আরও সঠিকভাবে নির্ধারণ করতে পারে।
ইএমএ রেখা প্রয়োগ করা কৌশলকে স্বল্পমেয়াদী ওঠানামা প্রভাবগুলি ফিল্টার করতে এবং মাঝারি ও দীর্ঘমেয়াদী প্রবণতা কিছুটা অবরুদ্ধ করতে সক্ষম করে। বিপরীতমুখী মূল্যায়নের ক্ষেত্রে এমএসিডি সূচকের কার্যকারিতা বিকাশে এটি খুব সহায়ক।
এছাড়া, কৌশলটি লং এবং শর্ট উভয় ক্ষেত্রেই শর্তাবলী নির্ধারণ করে, যা ষাঁড় এবং ভালুকের উড়োজাহাজের বাজারে প্রয়োগ করা যেতে পারে, যার ফলে কৌশলটির অভিযোজনযোগ্যতা বৃদ্ধি পায়।
এই কৌশলটির প্রধান ঝুঁকি হল যে MACD সূচক নিজেই ফেকআউট সংকেতগুলি ভুলভাবে মূল্যায়ন করার উচ্চ সম্ভাবনা রয়েছে। এই মুহুর্তে, EMA লাইনের সহায়ক ফাংশন প্রয়োজন, তবে বিশেষ বাজারের অবস্থার মধ্যে ব্যর্থতা এখনও ঘটতে পারে।
উপরন্তু, কৌশলটি স্টপ লস এবং লাভের শর্তাবলী সেট করার জন্য একটি মুনাফা ফ্যাক্টর গ্রহণ করে, যা কিছু বিষয়বস্তু জড়িত। অনুপযুক্ত সেটিংস কৌশল কর্মক্ষমতা প্রভাবিত করতে পারে।
অবশেষে, কৌশলটি অ্যাকাউন্টের মূলধনের ১০০% পর্যন্ত পজিশনের আকার নির্ধারণ করে, ফান্ড ম্যানেজমেন্টের বিষয়টি বিবেচনা না করে, যা লাইভ ট্রেডিংয়েও কিছু ঝুঁকি সৃষ্টি করে।
এই কৌশলটির মূল অপ্টিমাইজেশান দিকগুলির মধ্যে রয়েছেঃ
ম্যাকডির ভুল সংকেত তৈরির সম্ভাবনা আরও এড়ানোর জন্য একাধিক সূচক সংমিশ্রণ গঠনের জন্য বিচার করার জন্য অন্যান্য সূচকগুলি বাড়ান। উদাহরণস্বরূপ, কেডিজে এবং বিওএলএল বিবেচনা করা যেতে পারে।
প্রবণতার দিকনির্দেশনা নির্ধারণের জন্য সর্বোত্তম পরামিতিগুলি খুঁজে পেতে EMA লাইন দৈর্ঘ্যটি মাল্টি-প্যারামিটার অপ্টিমাইজ করা যেতে পারে।
বিপরীতমুখী সময় নির্ধারণের জন্য সবচেয়ে সঠিক মান খুঁজে পেতে MACD পরামিতিগুলিকে আরও অনুকূলিত করা যেতে পারে।
একটি মূলধন ব্যবস্থাপনা মডিউল যোগ করুন। উদাহরণস্বরূপ, মুনাফা ফ্যাক্টর একটি গতিশীল ইনপুট হিসাবে ব্যবহার করা যেতে পারে, এবং স্লিপ স্টপগুলিও সেট করা যেতে পারে।
বিভিন্ন ধরণের চুক্তির উপর প্রভাব পরীক্ষা করুন, যেমন ক্রিপ্টোকারেন্সি, ইনডেক্স ফিউচার ইত্যাদি সবচেয়ে উপযুক্ত ট্রেডিং বৈচিত্র খুঁজে পেতে।
সামগ্রিকভাবে, এই এমএসিডি ইএমএ ক্রসওভার ট্রেন্ড ট্র্যাকিং কৌশলটি তুলনামূলকভাবে সহজ এবং ব্যবহারিক। এটি দ্বৈত সূচক শর্তের মাধ্যমে সংকেত নির্ভরযোগ্যতা এবং যুক্তিসঙ্গত স্টপ লস এবং লাভ গ্রহণের পদ্ধতিগুলির মাধ্যমে লাভের লকগুলি নিশ্চিত করে। মূল অপ্টিমাইজেশান স্পেসটি প্যারামিটার নির্বাচন, সূচক সংমিশ্রণ, মূলধন পরিচালনা ইত্যাদিতে রয়েছে। আরও অপ্টিমাইজেশন এবং পরীক্ষার সাথে, এটি বিশ্বাস করা হয় যে এই কৌশলটি সবচেয়ে দক্ষ প্রবণতা ট্র্যাকিং কৌশলগুলির মধ্যে একটি হয়ে উঠতে পারে।
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="MACD EMA Strategy", shorttitle="MACD EMA STRAT", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type = strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=5000, currency=currency.USD) // Time Range FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12) FromDay=input(defval=1,title="FromDay",minval=1,maxval=31) FromYear=input(defval=2020,title="FromYear",minval=2016) ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12) ToDay=input(defval=1,title="ToDay",minval=1,maxval=31) ToYear=input(defval=9999,title="ToYear",minval=2017) start=timestamp(FromYear,FromMonth,FromDay,00,00) finish=timestamp(ToYear,ToMonth,ToDay,23,59) window()=>true // STEP 2: // See if this bar's time happened on/after start date afterStartDate = true //EMA emasrc = close res = input(title="EMA Timeframe", type=input.resolution, defval="15") len1 = input(title="EMA Length", type=input.integer, defval=206) col1 = color.yellow // Calculate EMA ema1 = ema(emasrc, len1) emaSmooth = security(syminfo.tickerid, res, ema1, barmerge.gaps_on, barmerge.lookahead_off) // Draw EMA plot(emaSmooth, title="EMA", linewidth=1, color=col1) //MACD fast_length = input(title="Fast Length", type=input.integer, defval=15) slow_length = input(title="Slow Length", type=input.integer, defval=24) src = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=true) sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true) zeroline = 0 // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal //plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) //plot(macd, title="MACD", color=col_macd, transp=0) //plot(signal, title="Signal", color=col_signal, transp=0) //plot(zeroline, title="Zero Line", color=color.black, transp=0) ///////////////////////////LONG//////////////////////////////////////////////////////////////////// enablelong = input(true, title="Enable long?") //Long Signal upcondition = close > emaSmooth and close[1] > emaSmooth[1] macdunderhis = macd < zeroline macdcrossup = crossover(macd, signal) longcondition = upcondition and macdunderhis and macdcrossup //strategy buy long if (longcondition) and (afterStartDate) and strategy.opentrades < 1 and (enablelong == true) strategy.entry("long", strategy.long) //////////////////////////////////////SHORT////////////////////////////////////////////////////////////////////////////////// enableshort = input(true, title="Enable short?") //Short Signal downcondition = close < emaSmooth and close[1] < emaSmooth[1] macdoverhis = macd > zeroline macdcrosunder = crossunder(macd, signal) shortcondition = downcondition and macdoverhis and macdcrosunder //strategy buy short if (shortcondition) and (afterStartDate) and strategy.opentrades < 1 and (enableshort == true) strategy.entry("short", strategy.short) //////////////////////////////////////EXIT CONDITION////////////////////////////////////////////////////////////////////////////////// bought = strategy.position_size[1] < strategy.position_size sold = strategy.position_size[1] > strategy.position_size barsbought = barssince(bought) barssold = barssince(sold) //////LOWEST LOW////// //Lowest Low LONG profitfactorlong = input(title="ProfitfactorLong", type=input.float, step=0.1, defval=1.9) loLen = input(title="Lowest Low Lookback", type=input.integer, defval=46, minval=2) stop_level_long = lowest(low, loLen)[1] if strategy.position_size>0 profit_level_long = strategy.position_avg_price + ((strategy.position_avg_price - stop_level_long[barsbought])*profitfactorlong) strategy.exit(id="TP/ SL", stop=stop_level_long[barsbought], limit=profit_level_long) //Lowest Low SHORT profitfactorshort = input(title="ProfitfactorShort", type=input.float, step=0.1, defval=2.1) highLen = input(title="highest high lookback", type=input.integer, defval=25, minval=2) stop_level_short = highest(high, highLen)[1] if strategy.position_size<0 profit_level_short = strategy.position_avg_price - ((stop_level_short[barssold] - strategy.position_avg_price)*profitfactorshort) strategy.exit(id="TP/ SL", stop=stop_level_short[barssold], limit=profit_level_short) //PLOTT TP SL plot(stop_level_long, title="SL Long", linewidth=1, color=color.red) plot(stop_level_short, title="SL Short", linewidth=1, color=color.red)