এই কৌশলটির মূল ধারণা হ'ল ট্রেডিংয়ের পরে ট্রেন্ডের জন্য প্রবণতা দিক নির্ধারণের জন্য দ্বৈত চলমান গড় এবং এমএসিডি সূচককে একত্রিত করা। যখন দ্রুত এমএ ধীর এমএ এর উপরে অতিক্রম করে, এটি একটি আপট্রেন্ড সুযোগের সংকেত দেয়। যখন দ্রুত এমএ ধীর এমএ এর নীচে অতিক্রম করে, এটি একটি ডাউনট্রেন্ড সুযোগের সংকেত দেয়। এমএসিডি হিস্টোগ্রামটি নির্দিষ্ট প্রবেশ এবং প্রস্থান পয়েন্টগুলি নির্ধারণ করতে ব্যবহৃত হয় যখন এটি 0 এর উপরে অতিক্রম করে এবং 0 এর নীচে অতিক্রম করার সময় শর্ট করে।
MACD এর দ্রুত EMA (12 দিন), ধীর EMA (26 দিন) এবং সংকেত EMA (9 দিন) গণনা করুন।
MACD হিস্টোগ্রাম (দ্রুত EMA - ধীর EMA) এবং MACD সিগন্যাল লাইন (MACD হিস্টোগ্রামের 9 দিনের EMA) গণনা করুন।
50 দিনের এবং 200 দিনের এমএগুলিকে প্রবণতা হিসাবে গণনা করুন।
এমএসিডি হিস্টোগ্রামের ০ এর ঊর্ধ্বে ক্রসিং হ'ল উত্থান সংকেত এবং ০ এর নিচে ক্রসিং হ'ল হ্রাস সংকেত।
ধীর EMA এর উপরে দ্রুত EMA ক্রসিং এবং দীর্ঘ MA এর উপরে সংক্ষিপ্ত MA ক্রসিং এর সাথে মিলিত হয়ে bullish সংকেত দেয়।
ধীর EMA এর নিচে দ্রুত EMA অতিক্রম করা এবং দীর্ঘ MA এর নিচে সংক্ষিপ্ত MA অতিক্রম করা হ্রাসের সংকেত দেয়।
EMA ক্রস প্যারামিটারের পরে সর্বাধিক ট্রেড ব্যবহার করে প্রতিটি MA ক্রসওভারের পরে লেনদেনের সীমা সংখ্যা।
স্টপ লস ব্যবহার করুন এবং ট্রেড থেকে বেরিয়ে আসার জন্য মুনাফা নিন।
ডাবল এমএগুলি সামগ্রিক প্রবণতা নির্ধারণ করে যাতে বিপরীত প্রবণতা ট্রেডিং এড়ানো যায়।
ম্যাকডি ট্রেন্ড শিফটগুলি ধরার জন্য প্রবেশ এবং প্রস্থান পয়েন্টগুলি চিহ্নিত করে।
সংমিশ্রণটি প্রবণতার দিকে প্রবেশের জন্য ভাল সময় সরবরাহ করে।
ক্রসওভারের পর ট্রেডের সংখ্যা সীমাবদ্ধ করে ট্রেন্ডের পিছনে না চলার জন্য।
হ্রাস বন্ধ করুন এবং লাভ নিয়ন্ত্রণের ঝুঁকি নিন।
আরও ভাল পারফরম্যান্সের জন্য পরামিতিগুলি অপ্টিমাইজ করা যেতে পারে।
ভুল প্রবণতা নির্ধারণের ফলে বিপরীত প্রবণতা ক্ষতি হয়। দৃঢ়ভাবে প্রবণতা প্রতিষ্ঠার জন্য এমএ পার্থক্যের প্রয়োজনীয়তা প্রসারিত করুন।
ম্যাকডি সিগন্যালগুলি মূল্যের ক্রিয়াকলাপ বিলম্বিত করে যার ফলে অকাল বা দেরী এন্ট্রি হয়। ম্যাকডি পরামিতিগুলি সামঞ্জস্য করুন বা ফিল্টার যুক্ত করুন।
অপ্রয়োজনীয় স্টপ লস এবং লাভের স্তরগুলি অত্যধিক স্টপ বা অপর্যাপ্ত লাভের দিকে পরিচালিত করে। প্রতিটি যন্ত্রের জন্য পরামিতি অপ্টিমাইজেশান প্রয়োজন।
প্যারামিটার অপ্টিমাইজেশান কঠিন। বিভিন্ন পণ্য এবং সময়সীমার জন্য বিভিন্ন প্যারামিটার সমন্বয় প্রয়োজন। ব্যাপক প্রাথমিক পরীক্ষার প্রয়োজন।
প্রবণতা নির্ধারণের জন্য কেডি-র মতো অন্যান্য সূচক পরীক্ষা করুন।
ম্যাকডি সিগন্যাল ফিল্টার করার জন্য অন্যান্য সূচক যোগ করুন, যেমন বোলিংজার ব্যান্ড, এটিআর স্টপ।
স্টপ লস অপ্টিমাইজ করুন এবং প্রতিটি পণ্যের জন্য মুনাফা নিন।
আরও ভাল পরামিতি খুঁজে পেতে ওয়াকফরওয়ার্ড এবং র্যান্ডম অপ্টিমাইজেশান ব্যবহার করুন।
ট্রেডিং ফ্রিকোয়েন্সি হ্রাস করার জন্য মেশিন যোগ করুন, যেমন ম্যাকড জোন 0 এর কাছাকাছি
একাধিক পণ্য জুড়ে স্বয়ংক্রিয় পরামিতি এবং সমন্বয় অপ্টিমাইজেশান।
এই কৌশলটি প্রবণতা দিক এবং এন্ট্রি টাইমিংয়ের জন্য ডুয়াল এমএগুলির শক্তিকে একত্রিত করে একটি শক্তিশালী প্রবণতা অনুসরণকারী সিস্টেম তৈরি করে। প্যারামিটার অপ্টিমাইজেশন এবং সূচকগুলির সংমিশ্রণের মাধ্যমে অতিরিক্ত পারফরম্যান্স লাভ সম্ভব। সামগ্রিকভাবে, লাইভ ট্রেডিংয়ের জন্য বিবেচনা করার জন্য এটির শক্তিশালী ঝুঁকি ব্যবস্থাপনা এবং মুনাফা সম্ভাবনা রয়েছে। তবে দৃust়তা নিশ্চিত করতে প্রতিটি পণ্যের জন্য এখনও প্যারামিটার পরীক্ষার প্রয়োজন।
/*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')