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