آموزش اندیکاتور MACD
اندیکاتور MACD یکی از ابزارهای پرکاربرد برای تحلیلگران تکنیکال است. ویژگی بسیار مهم اندیکاتور مکدی سهولت کار با آن است. همین موضوع موجب شده است که تعداد زیادی از فعالان بازارهای مالی تمایل بالایی برای استفاده از این اندیکاتور داشته باشند.
کلمه MACD مخفف عبارت Moving Average Convergence Divergence به معنای شاخص میانگین متحرک همگرایی واگرایی است. اندیکاتور مکدی که در ردیف اسیلاتورها قرار میگیرد، در زمینه شناخت و پیشبینی روندهای حاکم بر بازار نقش کلیدی را ایفا میکند. بنابراین اگر به عنوان یک تحلیلگر تکنیکال بتوانید اطلاعاتی که اندیکاتور مکدی تولید میکند را به درستی استخراج کنید، قطعا موفق خواهید شد که شانس دستیابی به سود در معاملات خود را ارتقا دهید.
بخش های تشکیل دهنده اندیکاتور مکدی (MACD)
MACD Line – Signal Line – Histogram
MACD Line - خط مکدی
مهمترین جزء اندیکاتور MACD خط مکدی است. این خط اختلاف میانگین نمایی 12 روزه قیمت از 26 روزه آن را به نمایش میگذارد. تحلیلگران تکنیکال با تجربه به خوبی میدانند که خط مکدی دارای ویژگی تند و نوسانی است.
Signal Line - خط سیگنال
خط سیگنال نیز میانگین نمایی 9 روزه از اندیکاتور مکدی است. با مشاهده خط سیگنال در نمودار اندیکاتور MACD میتوان متوجه شد که این خط کم نوسان است و در مقایسه با خط MACD تغییرات سریعی از خود نشان نمی دهد .
Histogram - هیستوگرام
هیستوگرام MACD در قالب مجموعهای از خطوط عمودی که در کنار یکدیگر قرار میگیرند، تفاوت بین خط مکدی و خط سیگنال را به نمایش میگذارد. طبیعی است که هر زمان اختلاف بین خط مکدی و سیگنال افزایش پیدا کند، هیستوگرام بزرگ میشود و زمانی که اختلاف بین آن دو خط کم شود، هیستوگرام نیز کوچک میشود و حتی در مواقعی که این دو خط یکدیگر را قطع میکنند، به یک خط تبدیل میشود.

- فرمول محاسبه خط مک دی :
MACD line = 12d EMA – 26d EMA
در این اندیکاتور، میانگین متحرک نمایی بر اساس قیمت بسته شدن کندل یا Close آن در دوره زمانی مشخص بدست میآید. آقای اپل برای محاسبه MACD line در این اندیکاتور از دو میانگین متحرک نمایی استفاده کرده است. یک میانگین متحرک نمایی با دوره زمانی 12 روزه (سریعتر) و دیگری با دوره زمانی 26 روزه (کندتر) است. البته این دوره زمانیها قابل تغییر هستند، اما عموما تریدرها با همین اعداد کار میکنند. همانطور که گفته شد، MACD line پیرامون خط صفر یا Base line اندیکاتور مک دی نوسان میکند.
- فرمول محاسبه Signal line :
همانطور که گفته شد، خط سیگنال در اندیکاتور MACD، میانگین متحرک نمایی MACD line است. دوره زمانی مورد استفاده در این میانگین متحرک عدد 9 بوده که این عدد نیز قابل تغییر است، اما عموما تریدرها از همین عدد استفاده میکنند.
Signal line = 9d EMA of MACD line
این خط نیز در بالا و پایین خط صفر اندیکاتور مک دی نوسان میکند. از تقاطع MACD line و Signal line، سیگنالهای خرید و فروش بدست میآید که در بخش انتهایی این درس به طور کامل به بررسی آن میپردازیم.
- فرمول هیستوگرام :
هیستوگرام در اندیکاتور MACD تنها نمایش گرافیکی ارتباط بین MACD line و Signal line است. هدف از ایجاد هیستوگرام، صرفا آسان کردن قرائت این اندیکاتور است.
MACD Histogram = MACD line – Signal line
واگرایی در اندیکاتور مکدی MACD
واگرایی یا Divergence
زمانی که اندیکاتور MACD نقاط سقف و یا کفی را تشکیل میدهد که با نقاط سقف و کف نمودار متفاوت است یک واگرایی رخداده است . یک واگرایی مثبت زمانی اتفاق میافتد که اندیکاتور MACD دو کف بالارونده ساخته در حالی که قیمت دو کف پایینرونده بسازد.
زمانی که روند طولانیمدت همچنان مثبت باشد، این سیگنال یک سیگنال صعودی معتبر است. برخی از معاملهگران واگراییهای مثبت را – حتی زمانی که روند کلی منفی باشد – بررسی میکنند زیرا آنها میتوانند سیگنالی از یک تغییر روند باشند، با این وجود که این تکنیک در این حالت از اتکاپذیری کمتری برخوردار است .
زمانی که اندیکاتور MACD دو قلهٔ پایینرونده را بسازد – در حالی که قیمت دو قلهٔ بالارونده ساخته است – یک سیگنال نزولی صادرشده و از آن تحت عنوان واگرایی منفی (negative divergence) یاد میکنیم . یک واگرایی منفی که در طی یک روند نزولی بلندمدت شکل میگیرد بهعنوان تأییدیهای در نظر گرفته میشود که میگوید احتمال ادامهٔ روند وجود دارد.
برخی از معاملهگران به بررسی واگراییهای منفی در طی روند صعودی بلندمدت میپردازند زیرا آنها این واگراییها را نشانهای از تضعیف روند میدانند.
هر چند، این واگرایی نسبت به واگرایی که در یک روند نزولی شکل میگیرد از اعتبار کمتری برخوردار است.
با وجود کمتر بودن شتاب روند در جهت پایین، تا زمان باقی ماندن اندیکاتور MACD در ناحیه منفی، شتابروند به سمت پایین همچنان از شتاب روند به سمت بالا بیشتر خواهد بود. گاهی اوقات، شتاب روند به سمت پایینِ کاهنده، میتواند حاکی از معکوس شدن روند یا افزایش قابلتوجه قیمت باشد.

کدها یا اسکریپت های شخصی سازی شده برای اندیکاتور MACD در TradingView
در این قسمت برای دوستان با تجربه تر نمونه اسکریپت هایی را قرار می دهم تا بتوانند در نرم افزار یا سایت تریدینگ ویو TradingView وارد کرده و استفاده کنند .
اسکریپت نمایش خودکار واگرایی ها در چارت تریدینگ ویو
// https://wWw.Last3een.iR By AmirAhmadi
//@version=4
study(title="Divergence MACD Sign/Alert [MsF]", shorttitle = "DiverMACD_A", format=format.price, overlay=false)
//MACD setting
src = close
fast = input(12)
slow = input(26)
smooth = input(9)
osctype = input(title="Osc Type", type=input.string, defval="MACD", options=["MACD", "SIGNAL", "HISTOGRAM"])
//lbR = input(title="Pivot Lookback Right", defval=8)
//lbL = input(title="Pivot Lookback Left", defval=8)
lbR = input(title="Lookback Bars", defval=8)
lbL = lbR
//rangeUpper = input(title="Max of Lookback Range", defval=60)
//rangeLower = input(title="Min of Lookback Range", defval=5)
rangeUpper = 60
rangeLower = 5
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=true)
bearColor = color.red
bullColor = color.navy
hiddenBullColor = color.new(color.yellow,50)
hiddenBearColor = color.new(color.yellow,50)
textColor = color.white
noneColor = color.new(color.white, 100)
fast_ma = ema(src, fast)
slow_ma = ema(src, slow)
macd = fast_ma-slow_ma
signal = ema(macd, smooth)
hist = macd - signal
osc = osctype=="MACD" ? macd : (osctype=="SIGNAL" ? signal : hist)
//plot(osc, title="macd", linewidth=2, color=color.aqua)
//plot(macd, title="macd", linewidth=2, color=color.aqua)
plot(osc, color=color.aqua)
//plot(hist, style=plot.style_histogram)
plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
bars = barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low
oscHL = osc[lbR] > valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Lower Low
priceLL = low[lbR] < valuewhen(plFound, low[lbR], 1)
bullCond = plotBull and priceLL and oscHL and plFound
plot(
plFound ? osc[lbR] : na,
offset=-lbR,
title="Regular Bullish",
linewidth=2,
color=(bullCond ? bullColor : noneColor),
transp=0
)
plotshape(
bullCond ? osc[lbR] : na,
offset=-lbR,
title="Regular Bullish Label",
text="D",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound
plot(
plFound ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bullish",
linewidth=2,
color=(hiddenBullCond ? hiddenBullColor : noneColor),
transp=0
)
plotshape(
hiddenBullCond ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bullish Label",
text="H",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High
oscLH = osc[lbR] < valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Higher High
priceHH = high[lbR] > valuewhen(phFound, high[lbR], 1)
bearCond = plotBear and priceHH and oscLH and phFound
plot(
phFound ? osc[lbR] : na,
offset=-lbR,
title="Regular Bearish",
linewidth=2,
color=(bearCond ? bearColor : noneColor),
transp=0
)
plotshape(
bearCond ? osc[lbR] : na,
offset=-lbR,
title="Regular Bearish Label",
text="D",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High
oscHH = osc[lbR] > valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Lower High
priceLH = high[lbR] < valuewhen(phFound, high[lbR], 1)
hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
plot(
phFound ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bearish",
linewidth=2,
color=(hiddenBearCond ? hiddenBearColor : noneColor),
transp=0
)
plotshape(
hiddenBearCond ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bearish Label",
text="H",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// ALERT
alertcondition(bullCond or hiddenBullCond, title="bull_alert", message="↑ {{interval}} Bullish sign appered!! by MACD divergence")
alertcondition(bearCond or hiddenBearCond, title="bear_alert", message="↓ {{interval}} Bearish sign appered!! by MACD divergence")

اسکریپت اندیکاتور مکدی برای تشخیص نقاط ورود و خروج در معاملات
// https://wWw.Last3een.iR By AmirAhmadi
//@version=5
strategy("Range Strat - MACD/RSI",
overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10, precision=2, initial_capital=1000,
pyramiding=2,
commission_value=0.05)
//Backtest date range
StartDate = input.time(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input.time(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = (time >= StartDate) and (time < EndDate)
// RSI Input Settings
rsisrc = input(title="RSI Source", defval=open, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=55, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=50, group="RSI Settings" )
// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
RSIunder = (vrsi <= overSold)
RSIover = (vrsi >= overBought)
// MACD Input Settings
macdsrc = input(title="MACD Source", defval=open, group="MACD Settings")
fast_length = input(title="Fast Length", defval=12, group="MACD Settings")
slow_length = input(title="Slow Length", defval=26, group="MACD Settings")
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD Settings")
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal
MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)
// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
// Calculating Stop Loss
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)
// Strategy Entry
if (not na(vrsi))
if (inDateRange and MACDcrossover and RSIunder)
strategy.entry("LONG", strategy.long, comment="LONG")
if (inDateRange and MACDcrossunder and RSIover)
strategy.entry("SHORT", strategy.short, comment="SHORT")
// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="SHORT STOP", stop=shortStopPrice)

اسکریپت استراتژی اندیکاتور مکدی در ترکیب با SMA 200
// https://wWw.Last3een.iR By AmirAhmadi
//@version=2
strategy("MACD + SMA 200 Strategy (by ChartArt)", shorttitle="CA_-_MACD_SMA_strategy", overlay=true)
// ChartArt's MACD + SMA 200 Strategy
//
// Version 1.0
// Idea by ChartArt on November 30, 2015.
//
// Here is a combination of the MACD with the
// slow moving average SMA 200 as a strategy.
//
// This strategy goes long if the MACD histogram
// and the MACD momentum are both above zero and
// the fast MACD moving average is above the
// slow MACD moving average. As additional long filter
// the recent price has to be above the SMA 200.
// If the inverse logic is true, the strategy
// goes short. For the worst case there is a
// max intraday equity loss of 50% filter.
// Input
source = input(close)
fastLength = input(12, minval=1, title="MACD fast moving average")
slowLength=input(26,minval=1, title="MACD slow moving average")
signalLength=input(9,minval=1, title="MACD signal line moving average")
veryslowLength=input(200,minval=1, title="Very slow moving average")
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Moving Averages?")
switch3=input(true, title="Enable Background Color?")
// Calculation
fastMA = sma(source, fastLength)
slowMA = sma(source, slowLength)
veryslowMA = sma(source, veryslowLength)
macd = fastMA - slowMA
signal = sma(macd, signalLength)
hist = macd - signal
// Colors
MAtrendcolor = change(veryslowMA) > 0 ? green : red
trendcolor = fastMA > slowMA and change(veryslowMA) > 0 and close > slowMA ? green : fastMA < slowMA and change(veryslowMA) < 0 and close < slowMA ? red : blue
bartrendcolor = close > fastMA and close > slowMA and close > veryslowMA and change(slowMA) > 0 ? green : close < fastMA and close < slowMA and close < veryslowMA and change(slowMA) < 0 ? red : blue
backgroundcolor = slowMA > veryslowMA and crossover(hist, 0) and macd > 0 and fastMA > slowMA and close[slowLength] > veryslowMA ? green : slowMA < veryslowMA and crossunder(hist, 0) and macd < 0 and fastMA < slowMA and close[slowLength] < veryslowMA ? red : na
bgcolor(switch3?backgroundcolor:na,transp=80)
barcolor(switch1?bartrendcolor:na)
// Output
F=plot(switch2?fastMA:na,color=trendcolor)
S=plot(switch2?slowMA:na,color=trendcolor,linewidth=2)
V=plot(switch2?veryslowMA:na,color=MAtrendcolor,linewidth=4)
fill(F,V,color=gray)
// Strategy
buyprice = low
sellprice = high
cancelLong = slowMA < veryslowMA
cancelShort = slowMA > veryslowMA
if (cancelLong)
strategy.cancel("MACDLE")
if crossover(hist, 0) and macd > 0 and fastMA > slowMA and close[slowLength] > veryslowMA
strategy.entry("MACDLE", strategy.long, stop=buyprice, comment="Bullish")
if (cancelShort)
strategy.cancel("MACDSE")
if crossunder(hist, 0) and macd < 0 and fastMA < slowMA and close[slowLength] < veryslowMA
strategy.entry("MACDSE", strategy.short, stop=sellprice, comment="Bearish")
maxIdLossPcnt = input(50, "Max Intraday Loss(%)", type=float)
strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

هیچ دیدگاهی برای این محصول نوشته نشده است.