Bli medlem idag
Indikatorer/probuilder · probacktest · proorder · proscreener

MACD

MACD i ProBuilder returnerar MACD-histogrammet, skillnaden mellan MACD-linjen och dess signallinje, med standardinställningarna 12/26/9. Syntax och exempel.

Syntax

probuilder
MACD[S, L, Si](price)

Parametrar

NamnTypStandardBeskrivning
Sheltal12Period för det korta exponentiella glidande medelvärdet.
Lheltal26Period för det långa exponentiella glidande medelvärdet. Måste vara större än S.
Siheltal9Period för det exponentiella glidande medelvärdet som tillämpas på MACD för att bilda signallinjen.
pricepriskällaclosePrisserien som beräkningen körs på. Vanligtvis close, accepterar även open, high, low, typicalprice, eller en egen variabel.

Formel

kod
MACD line = EMA[S](price) - EMA[L](price)
Signal    = EMA[Si](MACD line)
MACD[S, L, Si](price) = MACD line - Signal   // the histogram

Resultatet är obegränsat och uttrycks i instrumentets prisenheter. När MACD-linjen ligger över sin signallinje är värdet positivt; när den ligger under är värdet negativt.

Så fungerar det

På varje bar beräknar ProBuilder MACD-linjen, den korta EMA:n för price minus den långa EMA:n, utjämnar sedan den linjen med en Si-periods EMA för att bilda signallinjen. Den MACD -instruktionen returnerar skillnaden mellan de två, den serie som diagramprogram ritar som histogrammet. En korsning genom noll markerar därför en korsning av signallinjen, inte en EMA-korsning.

De två komponentserierna finns som separata instruktioner: MACDLine returnerar den råa linjen och MACDsignal returnerar signallinjen. MACDLine - MACDsignal återskapar värdet som returneras av MACD.

MACD utformades av Gerald Appel som en trendföljande momentumindikator. Den kombinerar två frågor i en serie: vilken sida av trenden det korta medelvärdet befinner sig på, och hur snabbt skillnaden mellan medelvärdena förändras.

Exempel

Exempel 1, Stigande MACD medan priset rekylerar (Indikator)

probuilder
// MACD with the standard 12, 26, 9 settings on closing prices
i1 = MACD[12,26,9](close)
FOR i = 20 DOWNTO 0 DO
    IF(close[i] < close[i+1] AND i1 > i1[1]) THEN
        result = 100
    ELSE
        result = 0
    ENDIF
NEXT
RETURN result

Bevarad från källsidan. Villkoret kombinerar en fallande stängning med ett stigande MACD. Observera att varje varv i loopen skriver över result, så det returnerade värdet speglar endast den sista iterationen (i = 0), den aktuella baren.

Exempel 2, Strategi för korsning av signallinjen (ProOrder)

probuilder
// Go long when the histogram turns positive, exit when it turns negative
DEFPARAM CumulateOrders = false
m = MACD[12,26,9](close)

IF NOT LongOnMarket AND m CROSSES OVER 0 THEN
  BUY 1 CONTRACT AT MARKET
ENDIF
IF LongOnMarket AND m CROSSES UNDER 0 THEN
  SELL AT MARKET
ENDIF

Eftersom MACD returnerar histogrammet, en nollkorsning betyder att MACD-linjen har korsat sin signallinje, den klassiska MACD-entryutlösaren uttryckt i ett enda villkor.

Exempel 3, Förbättrat momentum under noll (ProScreener)

probuilder
// Instruments where a negative histogram has risen two bars in a row
hist = MACD[12,26,9](close)
improving = hist < 0 AND hist > hist[1] AND hist[1] > hist[2]
SCREENER[improving](hist AS "MACD hist")

Returnerar instrument som fortfarande ligger under signallinjen men med krympande skillnad, en skanning efter förbättrat momentum som utlöses före den faktiska korsningen.

Tolkning

SignalAvläsning
Histogram över nollMACD-linjen över sin signallinje, momentum uppåt.
Histogram under nollMACD-linjen under sin signallinje, momentum nedåt.
Histogram korsar över nollBullish korsning av signallinjen, ett vanligt triggervillkor.
Histogram krymper mot nollMomentum avtar inför en möjlig korsning.

För MACD-linjens egna korsningar av nollinjen, EMA-korsningsvärdet, testa MACDLine mot noll i stället.

Divergenser. En bullish divergens uppstår när priset sätter en lägre lägsta medan MACD formar en högre lägsta. En bearish divergens uppstår när priset sätter en högre högsta medan MACD formar en lägre högsta. Båda läses som tidiga tecken på en möjlig vändning, och DivergenceMACD instruktionen identifierar dem direkt.

Vanliga fel och fallgropar

  • Histogram, inte linje. MACD returnerar histogrammet. Kod som flyttats från plattformar där MACD() returnerar kommer linjen att slå fel. Använd MACDLine för linjen och MACDsignal för signalen.
  • Alla tre perioder är obligatoriska. MACD[12,26](close) ger ett syntaxfel. Perioderna står i hakparenteser, priskällan i parenteser: MACD[12,26,9](close).
  • Överskrivning i loop. I källmönstret från Exempel 1 tilldelar FOR-loopen result vid varje iteration, så tidigare barer kastas. För att räkna träffar över 21 barer, ackumulera i en räknare i stället för att skriva över.
  • Inte jämförbart mellan instrument. MACD är obegränsad och skalar med priset. Ett värde på 2.5 på ett index och 0.002 på ett forexpar har ingen relativ innebörd. Screeners som rangordnar efter rå MACD blandar skalor.
  • Eftersläpning på långsamma marknader. Två nästlade EMA:er gör MACD till ett eftersläpande mått. Korsningar kommer långt efter vändningen vid högre inställningar, och att korta perioderna byter eftersläpning mot whipsaws.