MACD histogram trading
MACD histogram trading
Beste Eric, zover ik weet is deze code nog niet beschikbaar op deze website. Kan jij hem maken svp? (zie link)
The MACD Histogram bar must have fallen 4 days in a row.
The fourth latest bar must have been below zero.
The current close of the ETF/index must be lower than the day before.
Entry is on the close. The exit is on the first day when the close is higher than the day before
(en optie van stapelbare aankopen als MACD nog een extra dag/dagen daalt)
(met als toevoeging graag een optie voor niet verkopen op 'close higher', maar verkoop op een instelbare takeprofit in 0,1% gradaties)
https://www.quantifiedstrategies.com/macd-histogram/
Dank en met groet, Vincent
The MACD Histogram bar must have fallen 4 days in a row.
The fourth latest bar must have been below zero.
The current close of the ETF/index must be lower than the day before.
Entry is on the close. The exit is on the first day when the close is higher than the day before
(en optie van stapelbare aankopen als MACD nog een extra dag/dagen daalt)
(met als toevoeging graag een optie voor niet verkopen op 'close higher', maar verkoop op een instelbare takeprofit in 0,1% gradaties)
https://www.quantifiedstrategies.com/macd-histogram/
Dank en met groet, Vincent
Re: MACD histogram trading
Ik maak er twee systemen van - verschillende handelsregels in hetzelfde script is nooit erg overzichtelijk.
Eerste (verkoop op hogere slot):
---
Eric
Eerste (verkoop op hogere slot):
Code: Selecteer alles
{- Filename: MACD system 1 -}
var
nMA1, nMA2, nMA3, i, DownCount, MP: integer;
sMACD, sMA, sMACDH, sZero: TSeries;
bStack: boolean;
begin
nMA1 := CreateParameterInteger('MACD 1', 1, 999, 12, true);
nMA2 := CreateParameterInteger('MACD 2', 1, 999, 26, true);
nMA3 := CreateParameterInteger('MACD 3', 1, 999, 9, true);
bStack := CreateParameterBoolean('Stapel trades', true, true);
with Indicator do
begin
RequiredBars := 5*(nMA2+nMA3);
StackedSignals := true;
end;
sMACD := MACD(Close, nMA1, nMA2);
sMA := MA(sMACD, maExponential, nMA3);
sMACDH := SubtractSeries(sMACD, sMA);
sZero := FillSeries(CreateSeries(BarCount), 0);
for i:=FirstValidIndex(sMACDH)+1 to BarCount-1 do
begin
if MP > 0 then
begin
if Close[i] > Close[i-1] then
begin
SetOrderSize(MP);
ExitLong(i);
MP := 0;
DownCount := 0;
end;
end;
if sMACDH[i] < sMACDH[i-1] then DownCount := DownCount+1 else DownCount := 0;
if bStack and (DownCount >= 4) then
begin
if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then
begin
EnterLong(i);
MP := MP+1;
end;
end else
if (MP = 0) and (DownCount >= 4) then
begin
if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then
begin
EnterLong(i);
MP := 1;
end;
end;
end;
with CreateLine(sMACDH) do
begin
Name := 'MACDH';
Color := clNavy;
LineType := ltBar;
end;
with CreateLine(sZero) do
begin
Color := clSilver;
LineContent := lcConstant;
end;
end.
Eric
Re: MACD histogram trading
En voor de variant met de take profit graag nog aangeven wat het profit niveau is bij gestapelde entries. Het onthouden van de individuele trade niveaus zou het wel erg ingewikkeld maken, en in een tegenzittende markt tot een oneindige stapeling van entries kunnen leiden.
---
Eric
---
Eric
Re: MACD histogram trading
Ik heb onthouden dat jij programmeren met 'stapelingen' erg onhandig/omslachtig vindt.
Is het mogelijk om de stapeling tot maximaal 4 signalen in het totaal te beperken?
En dan over die maximaal 4 stuks de gemiddeld prijs te gebruiken en daar dan de 'takeprofit' over grens over te berekeken?
Indien dit te omslachtig is om te maken, dan enkel een takeprofit over het eerste signaal in 0,1% gradaties;.
Het gevolg van het stapeling-deel (dat dan nog wel getoond wordt) bereken ik dan zelf wel met de hand.
Dank en met groet, Vincent
Is het mogelijk om de stapeling tot maximaal 4 signalen in het totaal te beperken?
En dan over die maximaal 4 stuks de gemiddeld prijs te gebruiken en daar dan de 'takeprofit' over grens over te berekeken?
Indien dit te omslachtig is om te maken, dan enkel een takeprofit over het eerste signaal in 0,1% gradaties;.
Het gevolg van het stapeling-deel (dat dan nog wel getoond wordt) bereken ik dan zelf wel met de hand.
Dank en met groet, Vincent
Re: MACD histogram trading
Ziet er mooi uit. Zoals verwacht een relatief laag aantal signalen per jaar (op daggrafiek), maar het lijkt een goed hitratio te hebben.
Ik ga ermee stoeien
Ik ga ermee stoeien

Eric schreef: ↑vr jan 27, 2023 12:24 pm Ik maak er twee systemen van - verschillende handelsregels in hetzelfde script is nooit erg overzichtelijk.
Eerste (verkoop op hogere slot):
---Code: Selecteer alles
{- Filename: MACD system 1 -} var nMA1, nMA2, nMA3, i, DownCount, MP: integer; sMACD, sMA, sMACDH, sZero: TSeries; bStack: boolean; begin nMA1 := CreateParameterInteger('MACD 1', 1, 999, 12, true); nMA2 := CreateParameterInteger('MACD 2', 1, 999, 26, true); nMA3 := CreateParameterInteger('MACD 3', 1, 999, 9, true); bStack := CreateParameterBoolean('Stapel trades', true, true); with Indicator do begin RequiredBars := 5*(nMA2+nMA3); StackedSignals := true; end; sMACD := MACD(Close, nMA1, nMA2); sMA := MA(sMACD, maExponential, nMA3); sMACDH := SubtractSeries(sMACD, sMA); sZero := FillSeries(CreateSeries(BarCount), 0); for i:=FirstValidIndex(sMACDH)+1 to BarCount-1 do begin if MP > 0 then begin if Close[i] > Close[i-1] then begin SetOrderSize(MP); ExitLong(i); MP := 0; DownCount := 0; end; end; if sMACDH[i] < sMACDH[i-1] then DownCount := DownCount+1 else DownCount := 0; if bStack and (DownCount >= 4) then begin if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then begin EnterLong(i); MP := MP+1; end; end else if (MP = 0) and (DownCount >= 4) then begin if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then begin EnterLong(i); MP := 1; end; end; end; with CreateLine(sMACDH) do begin Name := 'MACDH'; Color := clNavy; LineType := ltBar; end; with CreateLine(sZero) do begin Color := clSilver; LineContent := lcConstant; end; end.
Eric
Laatst gewijzigd door vincent op vr jan 27, 2023 4:54 pm, 2 keer totaal gewijzigd.
Re: MACD histogram trading
Het is niet zozeer dat stapelingen onhandig zijn, maar zoals ik al schetste is het onthouden van (in theorie) een onbeperkt aantal entry-prijzen en het vervolgens telkens aflopen van al de entry-prijzen om te kijken welke trades aan de take profit voldoen erg omslachtig.vincent schreef: ↑vr jan 27, 2023 4:14 pm Ik heb onthouden dat jij programmeren met 'stapelingen' erg onhandig/omslachtig vindt.
Is het mogelijk om de stapeling tot maximaal 4 signalen in het totaal te beperken?
En dan over die maximaal 4 stuks de gemiddeld prijs te gebruiken en daar dan de 'takeprofit' over grens over te berekeken?
Wanneer je je beperkt tot het gemiddelde van de entryprijzen en er dus maar 1 stoploss hoeft te worden bewaakt wordt het al een stuk overzichtelijker, en is er wat mij betreft geen reden om het aantal gestapelde trades te beperken tot 4 (sterker nog, liever geen beperking tot 4).
Zeg het maar of dat ok is.
---
Eric
Re: MACD histogram trading
Deze graag en dan zonder de beperkingen
"Wanneer je je beperkt tot het gemiddelde van de entryprijzen en er dus maar 1 stoploss hoeft te worden bewaakt wordt het al een stuk overzichtelijker"...

Re: MACD histogram trading
Beste Eric,
Als ik naar de tradingsimulatie kijk dan gebeurt er iets wat ik nog niet snap.
(Plaatje is de Dow dag-grafiek aug/sep '12. Tradingsimulatie long, gestapeld)

Er worden een dubbel signaal geopend op de 27ste.
Één wordt er verkocht op de witte pijl van 28-8 (dat lijkt te kloppen)
De ander blijft doorlopen en wordt verkocht op het einde van de getoonde grafiek (17 sep in dit geval).
Ook het koopsignaal van de 28ste wordt niet op de witte pijl verkocht maar op 17 sep..
Kan het zijn at de code nog niet goed werkt?
Met groet, Vincent
Als ik naar de tradingsimulatie kijk dan gebeurt er iets wat ik nog niet snap.
(Plaatje is de Dow dag-grafiek aug/sep '12. Tradingsimulatie long, gestapeld)

Er worden een dubbel signaal geopend op de 27ste.
Één wordt er verkocht op de witte pijl van 28-8 (dat lijkt te kloppen)
De ander blijft doorlopen en wordt verkocht op het einde van de getoonde grafiek (17 sep in dit geval).
Ook het koopsignaal van de 28ste wordt niet op de witte pijl verkocht maar op 17 sep..
Kan het zijn at de code nog niet goed werkt?
Met groet, Vincent
Eric schreef: ↑vr jan 27, 2023 12:24 pm Ik maak er twee systemen van - verschillende handelsregels in hetzelfde script is nooit erg overzichtelijk.
Eerste (verkoop op hogere slot):
---Code: Selecteer alles
{- Filename: MACD system 1 -} var nMA1, nMA2, nMA3, i, DownCount, MP: integer; sMACD, sMA, sMACDH, sZero: TSeries; bStack: boolean; begin nMA1 := CreateParameterInteger('MACD 1', 1, 999, 12, true); nMA2 := CreateParameterInteger('MACD 2', 1, 999, 26, true); nMA3 := CreateParameterInteger('MACD 3', 1, 999, 9, true); bStack := CreateParameterBoolean('Stapel trades', true, true); with Indicator do begin RequiredBars := 5*(nMA2+nMA3); StackedSignals := true; end; sMACD := MACD(Close, nMA1, nMA2); sMA := MA(sMACD, maExponential, nMA3); sMACDH := SubtractSeries(sMACD, sMA); sZero := FillSeries(CreateSeries(BarCount), 0); for i:=FirstValidIndex(sMACDH)+1 to BarCount-1 do begin if MP > 0 then begin if Close[i] > Close[i-1] then begin SetOrderSize(MP); ExitLong(i); MP := 0; DownCount := 0; end; end; if sMACDH[i] < sMACDH[i-1] then DownCount := DownCount+1 else DownCount := 0; if bStack and (DownCount >= 4) then begin if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then begin EnterLong(i); MP := MP+1; end; end else if (MP = 0) and (DownCount >= 4) then begin if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then begin EnterLong(i); MP := 1; end; end; end; with CreateLine(sMACDH) do begin Name := 'MACDH'; Color := clNavy; LineType := ltBar; end; with CreateLine(sZero) do begin Color := clSilver; LineContent := lcConstant; end; end.
Eric
Re: MACD histogram trading
Er zat inderdaad nog iets fout, probeer het eens met deze:
---
Eric
Code: Selecteer alles
{- Filename: MACD system 1 -}
var
nMA1, nMA2, nMA3, i, DownCount, MP: integer;
sMACD, sMA, sMACDH, sZero: TSeries;
bStack: boolean;
begin
nMA1 := CreateParameterInteger('MACD 1', 1, 999, 12, true);
nMA2 := CreateParameterInteger('MACD 2', 1, 999, 26, true);
nMA3 := CreateParameterInteger('MACD 3', 1, 999, 9, true);
bStack := CreateParameterBoolean('Stapel trades', true, true);
with Indicator do
begin
RequiredBars := 5*(nMA2+nMA3);
StackedSignals := true;
end;
sMACD := MACD(Close, nMA1, nMA2);
sMA := MA(sMACD, maExponential, nMA3);
sMACDH := SubtractSeries(sMACD, sMA);
sZero := FillSeries(CreateSeries(BarCount), 0);
for i:=FirstValidIndex(sMACDH)+1 to BarCount-1 do
begin
if sMACDH[i] < sMACDH[i-1] then DownCount := DownCount+1 else DownCount := 0;
if (MP > 0) and (Close[i] > Close[i-1]) then
begin
SetOrderSize(MP);
ExitLong(i);
MP := 0;
DownCount := 0;
end else
if (MP = 0) and (DownCount >= 4) then
begin
if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then
begin
SetOrderSize(1);
EnterLong(i);
MP := 1;
end;
end else
if bStack and (DownCount >= 4) then
begin
if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then
begin
SetOrderSize(1);
EnterLong(i);
MP := MP+1;
end;
end;
end;
with CreateLine(sMACDH) do
begin
Name := 'MACDH';
Color := clNavy;
LineType := ltBar;
end;
with CreateLine(sZero) do
begin
Color := clSilver;
LineContent := lcConstant;
end;
end.
Eric
Re: MACD histogram trading
En de variant met de exit bij takeprofit (berekend bij slotkoers):
---
Eric
Code: Selecteer alles
{- Filename: MACD system 2 -}
var
nMA1, nMA2, nMA3, i, DownCount, MP: integer;
Entry, nTP, TPLevel, TPCount: real;
sMACD, sMA, sMACDH, sZero, sTP: TSeries;
bStack: boolean;
begin
nMA1 := CreateParameterInteger('MACD 1', 1, 999, 12, true);
nMA2 := CreateParameterInteger('MACD 2', 1, 999, 26, true);
nMA3 := CreateParameterInteger('MACD 3', 1, 999, 9, true);
bStack := CreateParameterBoolean('Stapel trades', true, true);
nTP := CreateParameterReal('Take profit %', 0, 99, 1, true);
with Indicator do
begin
RequiredBars := 5*(nMA2+nMA3);
StackedSignals := true;
end;
sMACD := MACD(Close, nMA1, nMA2);
sMA := MA(sMACD, maExponential, nMA3);
sMACDH := SubtractSeries(sMACD, sMA);
sZero := FillSeries(CreateSeries(BarCount), 0);
sTP := CreateSeries(BarCount);
for i:=FirstValidIndex(sMACDH)+1 to BarCount-1 do
begin
if sMACDH[i] < sMACDH[i-1] then DownCount := DownCount+1 else DownCount := 0;
if (MP > 0) and (Close[i] > TPLevel) then
begin
SetOrderSize(MP);
ExitLong(i);
MP := 0;
DownCount := 0;
end else
if (MP = 0) and (DownCount >= 4) then
begin
if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then
begin
SetOrderSize(1);
EnterLong(i);
MP := 1;
TPLevel := Close[i]*(100+nTP)/100;
TPCount := 1;
sTP[i] := TPLevel;
end;
end else
if bStack and (DownCount > 4) then
begin
if (sMACDH[i-3] < 0) and (Close[i] < Close[i-1]) then
begin
SetOrderSize(1);
EnterLong(i);
MP := MP+1;
TPLevel := TPLevel*TPCount/(TPCount+1) + Close[i]*(100+nTP)/100/(TPCount+1);
TPCount := TPCount+1;
sTP[i] := TPLevel;
end;
end;
end;
with CreateLine(sMACDH) do
begin
Name := 'MACDH';
Color := clNavy;
LineType := ltBar;
end;
with CreateLine(sZero) do
begin
Color := clSilver;
LineContent := lcConstant;
end;
with CreateLine(sTP) do
begin
Color := clYellow;
LineType := ltDot;
Visible := false;
end;
end.
Eric
Re: MACD histogram trading
Dank Eric, volgens mij gaat dit helemaal goed komen
.
Echter er lijkt nog 'iets een extra rondje te lopen'.
Er komt (soms) een 2de signaal in de TVS te staan die er volgens mij niet in hoort?

(Nasdaq-dag, standaard instelling)

Echter er lijkt nog 'iets een extra rondje te lopen'.
Er komt (soms) een 2de signaal in de TVS te staan die er volgens mij niet in hoort?

(Nasdaq-dag, standaard instelling)
Re: MACD histogram trading
Ik zie het, ik heb hem hierboven verbeterd.
---
Eric
---
Eric
Re: MACD histogram trading
Mijn dank is weer groot Eric 
