
এই কৌশলটির মূল ধারণাটি হ’ল প্রবণতার দিক নির্ধারণের জন্য দ্বি-মোডাল লাইন এবং এমএসিডি সূচকের সংমিশ্রণ, ট্রেন্ড ট্র্যাকিংয়ের জন্য। যখন স্বল্পমেয়াদী গড় লাইনটি দীর্ঘমেয়াদী গড় লাইনটি অতিক্রম করে, তখন এটি একটি বিউটি সুযোগ হিসাবে বিবেচিত হয়; যখন স্বল্পমেয়াদী গড় লাইনটি দীর্ঘমেয়াদী গড় লাইনটি অতিক্রম করে, তখন এটি একটি বিউটি সুযোগ হিসাবে বিবেচিত হয়। এমএসিডি সূচকটি ক্রয়-বিক্রয় পয়েন্ট নির্ধারণের জন্য ব্যবহৃত হয়, যখন এমএসিডি স্তম্ভটি 0 অক্ষটি অতিক্রম করে তখন বিউটি, যখন বিউটি হয়।
দ্রুত লাইন EMA ((12 তম লাইন), ধীর লাইন EMA ((26 তম লাইন) এবং সংকেত লাইন EMA ((9 তম লাইন) গণনা করুন।
MACD স্তম্ভরেখা গণনা করুন ((দ্রুতরেখা-ধীররেখা) এবং MACD সংকেতরেখা ((MACD এর 9 তম রেখা) ।
৫০-দিনের লাইন এবং ২০০-দিনের লাইনকে গণনা করুন।
MACD স্তম্ভের উপর 0 অক্ষটি একটি bullish সংকেত হিসাবে এবং 0 অক্ষটি একটি bearish সংকেত হিসাবে।
দ্রুত লাইনে ধীর লাইন এবং স্বল্পমেয়াদী গড় লাইনে দীর্ঘমেয়াদী গড় লাইন ব্যবহার করুন।
দ্রুত লাইনটি ধীর লাইনের নিচে এবং স্বল্পমেয়াদী গড় লাইনটি দীর্ঘমেয়াদী গড় লাইনের নিচে বিপরীতমুখী সংকেত হিসাবে।
প্রতিবার গড়রেখার দিক পরিবর্তন হওয়ার পর, মাএ ট্রেডের পর ইএমএ ক্রস প্যারামিটার নিয়ন্ত্রণের মাধ্যমে কয়েকবার ট্রেডিং করার অনুমতি দেওয়া হয়।
প্রবেশের পর স্টপ লস দিয়ে পজিশন সমতল করা।
বিপরীতমুখী ট্রেডিং এড়িয়ে চলুন।
MACD ট্রেডিং পয়েন্ট নির্ধারণ করে এবং ট্রেডিং ট্রান্সফারকে সময়মতো ধরতে পারে।
ডাবল মিডল লাইন এবং MACD সূচকগুলির সাথে মিলিত, ট্রেন্ডের মধ্যে একটি ভাল প্রবেশের সময় ক্যাপচার করা যায়।
ট্রেডিং এড়াতে সর্বোচ্চ ট্রেডিং সেট করুন।
থামানো ক্ষতি প্রতিরোধ ব্যবস্থা নিয়ন্ত্রণ ঝুঁকি
প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে আরও ভাল প্যারামিটার সংমিশ্রণ পাওয়া যায়।
বড় প্রবণতা ভুল বিচার, বিপরীত ট্রেডিং ক্ষতির কারণ। গড় লাইন ব্যবধানের প্রয়োজনীয়তা যথাযথভাবে শিথিল করা যেতে পারে, যাতে বড় প্রবণতা ধরা যায়।
MACD-এর ক্রয়-বিক্রয় সংকেত বিলম্বিত থাকে, যার ফলে খুব তাড়াতাড়ি বা খুব দেরিতে প্রবেশ করা যায়। MACD প্যারামিটারগুলি সামঞ্জস্য করা যেতে পারে, বা অন্যান্য সূচক ফিল্টার সংকেতগুলির সাথেও মিলিত হতে পারে।
ক্ষতি প্রতিরোধকটি ভুলভাবে সেট করা হয়েছে, এটি খুব বেশি শিথিল বা খুব শক্ত হতে পারে, যার ফলে অতিরিক্ত ক্ষতি বা অপর্যাপ্ত প্রতিরোধক হয়। বিভিন্ন জাতের জন্য পরামিতি অপ্টিমাইজেশন পরীক্ষা করা দরকার।
প্যারামিটার অপ্টিমাইজেশনের অসুবিধা, বিভিন্ন জাত এবং সময়কালের জন্য বিভিন্ন প্যারামিটার সমন্বয় প্রয়োজন, প্রচুর প্রাক-পরীক্ষার কাজ প্রয়োজন।
অন্যান্য সমান্তরাল সূচক ব্যবহার করে বড় প্রবণতা নির্ণয় করুন, যেমন কেডি সূচক।
অন্যান্য সূচক সহযোগে MACD ফিল্টারিং সিগন্যাল যেমন ব্রিন ব্যান্ড, ATR স্টপ ইত্যাদি চেষ্টা করুন।
বিভিন্ন জাতের জন্য পৃথক পরীক্ষার জন্য সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে বের করার জন্য স্টপ-ড্যামেজ-স্টপ প্যারামিটারগুলি অপ্টিমাইজ করুন।
ধাপে ধাপে অপ্টিমাইজেশান এবং র্যান্ডম অপ্টিমাইজেশান পদ্ধতি ব্যবহার করে আরও ভাল প্যারামিটার সমন্বয় খুঁজে বের করুন।
ট্রেডিং ফ্রিকোয়েন্সি কমানোর জন্য যন্ত্রপাতি যোগ করা, যেমন MACD শূন্য অক্ষের কাছাকাছি নিষিদ্ধ অঞ্চল স্থাপন করা।
প্যারামিটার অপ্টিমাইজেশান এবং সমন্বয় অপ্টিমাইজেশান স্বয়ংক্রিয়ভাবে একাধিক জাতের জন্য।
এই কৌশলটি একটি শক্তিশালী ট্রেন্ড ট্র্যাকিং কৌশল তৈরি করার জন্য বড় প্রবণতা এবং MACD কেনা-বেচা পয়েন্টের জন্য দ্বি-সমান্তরিত লাইন ব্যবহার করে। প্যারামিটার অপ্টিমাইজেশন এবং সূচক সমন্বয় দ্বারা কৌশলটির কার্যকারিতা আরও বাড়ানো যেতে পারে। সামগ্রিকভাবে, কৌশলটির শক্তিশালী ঝুঁকি প্রতিরোধ ক্ষমতা এবং মুনাফা স্থান রয়েছে, যা রিয়েল-স্টোরে প্রয়োগের জন্য বিবেচনা করা উচিত। তবে কৌশলটির স্থায়িত্ব নিশ্চিত করার জন্য বিভিন্ন জাতের জন্য পৃথক পৃথক প্যারামিটার অপ্টিমাইজেশন পরীক্ষা করা দরকার।
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="ComiCo - Joel on Crypto - MACD Scalping", shorttitle="ComiCo - Joel on Crypto - MACD Scalping")
// Getting inputs
slow_length1 = input(title="EMA Trend 1", defval=50)
slow_length2 = input(title="EMA Trend 2 ", defval=200)
fast_length = input(title="MACD Fast Length", defval=12)
slow_length = input(title="MACD Slow Length", defval=26)
signal_length = input.int(title="MACD Signal Smoothing", minval = 1, maxval = 50, defval = 9)
src = input(title="MACD Source", defval=close)
i_switch = input.string(title="Tick Highlight", defval="Moving average" ,options=["Moving average","Fixed value" ])
i_switch2 = input.string(title="Tick Source", defval="Highest bar" ,options=["Highest bar","Average","Last bar"])
signal_lengthup = input.int(title="Upticks Avg. Length", minval = 1, maxval = 5000, defval = 72)
signal_lengthdown = input.int(title="Downticks Avg. Length", minval = 1, maxval = 5000, defval = 72)
signal_lengthMA = input.float(title="Ticks Avg. Multiplier", minval = 0, maxval = 5000, defval = 2, step = 0.1)
sma_source = "EMA"
sma_signal = "EMA"
// Plot colors
col_grow_above = #26A69A
col_fall_above =#B2DFDB
col_grow_below = #FFCDD2
col_fall_below = #FF5252
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
time_macd=timeframe.period=="1"?"1": timeframe.period=="3"?"1": timeframe.period=="5"?"1": timeframe.period=="15"?"3":timeframe.period=="30"?"5":timeframe.period=="60"?"15":timeframe.period=="120"?"30":timeframe.period=="240"?"60":timeframe.period=="D"?"240":timeframe.period=="W"?"D":timeframe.period=="M"?"W":timeframe.period=="12M"?"M":timeframe.period
macd = fast_ma - slow_ma
macd1=request.security(syminfo.tickerid, time_macd, macd)
signal = sma_signal == "SMA" ? ta.sma(macd1, signal_length) : ta.ema(macd1, signal_length)
ema50=ta.ema(close,slow_length1)
ema200=ta.ema(close ,slow_length2)
var TradeCounter = 0
MaxCount = input.int(title = "Max trades after EMA cross", minval = 0, maxval = 1000, defval = 3)
bull = ema50>ema200
if bull != bull[1]
TradeCounter := 0
hist = request.security(syminfo.tickerid, time_macd, macd1 - signal)
f() => [hist[4],hist[3],hist[2],hist[1], hist]
ss=request.security(syminfo.tickerid, time_macd, hist, barmerge.gaps_on,barmerge.lookahead_off)
[ss5,ss4,ss3,ss2,ss1]=request.security(syminfo.tickerid, time_macd, f(), barmerge.gaps_on,barmerge.lookahead_off)
a = array.from(ss5,ss4,ss3,ss2,ss1)
s3=i_switch2=="Highest bar"?(ss>0? array.max(a, 0) : array.min(a, 0)):i_switch2=="Average"?array.avg(a):i_switch2=="Last bar"?ss1:0
saa=timeframe.period == '1'? ss:s3
saa2=timeframe.period == '1'? ss:s3*signal_lengthMA
colorss=(s3>=0 ? (s3[1] < s3 ? col_grow_above : col_fall_above) : (s3[1] < s3 ? col_grow_below : col_fall_below))
saadown = saa2
saaup = saa2
saadown:=saa>=0? saa2:saadown[1]
saaup:=saa<0? saa2:saaup[1]
verr=ta.ema(saadown,signal_lengthup)
dowww=ta.ema(saaup,signal_lengthdown)
ss22=plot(verr, title="Avg. Cloud Upper 1", color=color.new(color.white, 100))
ss33=plot(dowww, title="Avg. Cloud Lower 1", color=color.new(color.white, 100))
fill(ss22, ss33, color.new(color.white, 93), title="Avg. Cloud Background")
fixeduptick = input(title="Fixed Uptick Value", defval=30)
fixeddowntick = input(title="Fixed Downtick Value", defval=-30)
minl = i_switch=="Fixed value"? fixeduptick : verr
maxl = i_switch=="Fixed value"? fixeddowntick : dowww
plot(minl, title="Avg. Cloud Upper 2", color=color.new(color.white, 81))
plot(maxl, title="Avg. Cloud Lower 2", color=color.new(color.white, 81))
colors2= s3<=minl and s3>=maxl ? #2a2e39 : colorss
coro2=s3>0? ema50>ema200 ? #2a2e39 : colors2 : ema50<ema200 ? #2a2e39: colors2
plot(saa, title="Histogram", style=plot.style_columns, color=coro2)
LimitDiff = input.float(title="Limit Price Difference", minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
TP = input.float(title="Take Profit", minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
SL = input.float(title="Stop Loss", minval = 0, maxval = 0.1, defval = 0.004, step = 0.0005)
minEMAdiff = input.float(title = "Min EMA difference", defval = 100, step = 10)
if #2a2e39 != coro2
a22 = 0
if ema50<ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
LimitPrice = close * (1 + LimitDiff)
strategy.entry("enter short", strategy.short, limit = LimitPrice)
strategy.exit("exit short", "enter short", limit = LimitPrice * (1 - TP), stop = LimitPrice * (1 + SL))
TradeCounter := TradeCounter + 1
if ema50>ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
LimitPrice = close * (1 - LimitDiff)
strategy.entry("enter long", strategy.long, limit = LimitPrice)
strategy.exit("exit long", "enter long", limit = LimitPrice * (1 + TP), stop = LimitPrice * (1 - SL))
TradeCounter := TradeCounter + 1
//alertcondition(#2a2e39 != coro2 , title='MACD Tick Alert', message='Joel on Crypto - MACD Tick Alert')