EMA 7 over de MACD - Wel in grafiek, maar hoe in systeem?

Vragen en suggesties over handelssystemen en indicatoren

Moderator: Perry

EMA 7 over de MACD - Wel in grafiek, maar hoe in systeem?

Berichtdoor GerardB » vr 23 mei 2003, 16:12

Hallo,

In de grafiek heb met succes een EMA 7 over een MACD "gesleept". Later wou ik dit in een systeem zetten na wat afkijken van bestaande systemen. Dat lukte niet. En toen ik het later nog eens wou slepen in de grafiek, lukte dit helaas ook niet meer.
Wat ik dus eigenlijk graag zou willen is:

Een 7 daags EMA over een standaard MACD ( 12,26,9 ) . Op basis hiervan ?buy? en ?sell? signalen laten genereren en testen op diverse fondsen. Eventueel met een grafiekje.

Wat heb ik zelf al geprobeerd?
-Op het forum gezocht
-Alle handboeken via dit forum van yahoo.vestics gedownload ( net iets teveel leesvoer voor een dag )
-De MACD en de EMA afzonderlijk als indicator ingevoegd en diverse waarden veranderd
Toch heb ik het gevoel dat ik te moeilijk denk en dat het makkelijker kan.

Hieronder zie je het resultaat van wat uren prutsen:

########################

value function zMacdEma ( value xEmaBars=7 ) begin

{---calculate today's position of the MA's---}
value xMACD[], xEMA[];
xEMA := vEMA(close,xMACD);
xMACD := MACD;
?value xMACD[],xSignal,xDelta;
?xMACD := MACD(Close,xFastBars,xSlowBars);
?xSignal := vEMA(xMACD,xSignalBars);
?xDelta := xMACD-xSignal;

{---check for any crossing---}
value xAbove, xBelow;
xAbove := vcrossesBelow(xEMA,xMACD);
xBelow := vcrossesAbove(xMACD,xMACD[1]);

{---buy or sell depending on the crossings---}
if xAbove then sell on close else
if xBelow then buy on close;

{--- plot the MA values and the current position ---}
Plot1(xDelta,'');
end;

########################

Inmiddels heb ik al zo vaak iets veranderd dat het vast niet meer bruikbaar is. :confused:

Alvast bedankt voor de moeite,

Met vriendelijke groet, ?:)
Gerard
GerardB
 
Berichten: 14
Geregistreerd op: ma 17 feb 2003, 22:08

EMA 7 over de MACD

Berichtdoor walter » vr 23 mei 2003, 18:16

als ik de code letterlijk overneem dan krijg ik foutmeldingen wanneer ik de code controleer in de designer
walter
 
Berichten: 135
Geregistreerd op: do 15 mei 2003, 15:26
Woonplaats: delft

EMA 7 over de MACD

Berichtdoor RobvZ » za 24 mei 2003, 1:08

GerardB

Tjonge, wat een spaghetti is dat :-)

Ik neem aan dat je de EMA over de snelle MACD lijn wilt hebben. Probeer volgende code eens:

value function zMacdEma ( value xEmaBars=7,value xFastBars=12,value xSlowBars=26) begin

?value xMACD[],xEMA[];
?xMACD := XAverage(Close,xFastBars)-XAverage(Close,xSlowBars);
?xEMA := vEMA(xMACD,xEmaBars);

?{--- check for any crossing ---}
?value xAbove, xBelow;
?xAbove := vCrossesAbove(xMACD,xEMA);
?xBelow := vCrossesBelow(xMACD,xEMA);

?{---- check for signals ----}
?if xAbove then Buy else
?if xBelow then Sell;

?Plot1(xMACD,'MACD');
?Plot2(xEMA,'EMA'+NumToStr(xEmaBars));

?end;
RobvZ
 
Berichten: 17
Geregistreerd op: di 31 dec 2002, 18:06
Woonplaats: Veghel

EMA 7 over de MACD

Berichtdoor GerardB » za 24 mei 2003, 11:08

Hallo RobvZ,

Dankjewel voor je reactie. De code heb ik erin geplakt en het begint te lijken op wat ik wil. In ieder geval ben ik door je code al zover dat ik alweer lijnen zie en geen foutmeldingen =)
Het verschil tussen de functie's is me nog niet helemaal duidelijke volgens mij. Ik ben steeds van mening dat je een b.v. vestics functie telkens opnieuw in je "systeemcode" moet plakken. Maar je kunt het ook gewoon aanroepen als ik het goed begrijp.

Hieronder vindt je alle aangesproken module's die ik uit het sjabloon heb gehaald ( die ik toen gelukkig heb opgeslagen ). Nog meer spaghetti :)

########

value function MACD (value xFastBars=12,value xSlowBars=26,value xSignalBars=9) begin
?value xMACD[],xSignal,xDelta;
?xMACD := MACD(Close,xFastBars,xSlowBars);
?xSignal := vEMA(xMACD,xSignalBars);
?xDelta := xMACD-xSignal;
?Plot1(xDelta,'');
?Plot2(xSignal,'Signalline');
?Plot3(xMACD,'MACD');
?end;

value function MACD (value xSeries[]=Close,value xFastBars=12,value xSlowBars=26) begin
?MACD := XAverage(xSeries,xFastBars)-XAverage(xSeries,xSlowBars);
?end;

value function vEMA (value xSeries[],value xNumberOfBars) begin
?value xEMA=0,xFactor,xI;
?if xEMA=0 or xEMA=_NA then xEMA := Average(xSeries,xNumberOfBars)
?else begin
? ?xFactor := 2/(xNumberOfBars+1);
? ?xEMA := xFactor*xSeries+(1-xFactor)*xEMA;
? ?end;
?vEMA := xEMA;
?end;

value function EMA (value xSeries[]=Close,value xNumberOfDays=20) begin
?value xEMA;
?xEMA := vEMA(xSeries,xNumberOfDays);
?Plot1(xEMA,'EMA'+NumToStr(xNumberOfDays));
?end;

string function NumToStr (value xValue,value xDecimals) begin
?NumToStr := BuiltinString(186,xValue,xDecimals);
?end;

{---Dit is een marker---}
if vcrossesBelow(EMA,EMA[1]) then ?
? ? ? ?Plot1(Close,'MACD-EMA VerkoopSignaal');

{---Dit is een arker---}
if vcrossesAbove(EMA,EMA[1]) then ?
? ? ? Plot1(Close,'MACD-EMA KoopSignaal');


########

Dit sjabloon werkt bij mij, alleen zou ik dit dus graag als een systeem willen. Jou code ziet er een stuk netter en duidelijker uit. Alleen krijg ik nog andere getallen. Over welke ( Fast of Slow ) ik de EMA precies wil hebben is mezelf nog niet duidelijk. Wel heb ik een voorbeeld voor je: http://www.vanarkel.nl/beursinfo/column ... umn_id=150

Hier gaat het dus om :)

Ik hoop dat deze informatie duidelijker is.
Alvast bedankt voor de reactie.
Mvg,
Gerard
GerardB
 
Berichten: 14
Geregistreerd op: ma 17 feb 2003, 22:08

EMA 7 over de MACD

Berichtdoor RobvZ » za 24 mei 2003, 16:04

Hoi Gerard,

Oke, ik snap je vraag. Eerst even iets over de MACD.
Deze bestaat uit een paar onderdelen.
1. Snelle MACD lijn = 12 daags xMA - 26 daags xMA
2. Langzame signaal lijn = 9 daags xMA van de snelle MACD lijn
3. MACD histogram = MACD lijn - signaal lijn

1. en 2. samen vormen de oorspronkelijke MACD indicator van Gerard Appel. Het MACD histogram is een uitbreiding hierop. Deze geeft een beter beeld van het machtsevenwicht tussen bulls en bears.
Wat jij wil is een EMA over dit histogram.
Hieronder de code van het systeem. Meer heb je niet nodig.

value function zMacdEma ( value xEmaBars=7,value xFastBars=12,value xSlowBars=26, value xSignalBars=9) begin

?value xMACD[],xSignal,xDelta,xEMA[];
{ ?xMACD := MACD(Close,xFastBars,xSlowBars);} {functie geeft foutmelding (???), alternatief is volgende regel}
?xMACD := XAverage(Close,xFastBars)-XAverage(Close,xSlowBars); {snelle MACD lijn}
?xSignal := vEMA(xMACD,xSignalBars); {signaal lijn}
?xDelta := xMACD-xSignal; ?{MACD Histogram = MACD lijn - signaallijn}
?
xEMA := vEMA(xDelta,xEmaBars); {EMA over MACD histogram}

?{--- check for any crossing ---}
?value xAbove, xBelow;
?xAbove := vCrossesAbove(xMACD,xEMA);
?xBelow := vCrossesBelow(xMACD,xEMA);

?{---- check for signals ----}
?if xAbove then Buy else
?if xBelow then Sell;

?Plot1(xDelta,'MACD'); ?{instellen als histogram }
?Plot2(xEMA,'EMA'+NumToStr(xEmaBars));

?end;

Groeten,
Rob


(Edited by RobvZ at 8:23 pm op 24,mei 2003)
RobvZ
 
Berichten: 17
Geregistreerd op: di 31 dec 2002, 18:06
Woonplaats: Veghel

EMA 7 over de MACD

Berichtdoor GerardB » za 24 mei 2003, 19:49

Hallo Rob,

Perfect! ?Hartelijk bedankt! ?:biggrin:
Na wat proberen is het me gelukt om de signalering bij de crossing zo in te stellen dat het koop en verkoopsignaal gegeven wordt bij draaien van de EMA.
Het ziet er nu zo uit:

########

value function zTestMacdEma3 ( value xEmaBars=7,value xFastBars=12,value xSlowBars=26, value xSignalBars=9) begin

?value xMACD[],xSignal,xDelta,xEMA[];
{ ?xMACD := MACD(Close,xFastBars,xSlowBars);} {functie geeft foutmelding (???), alternatief is volgende regel}
?xMACD := XAverage(Close,xFastBars)-XAverage(Close,xSlowBars); {snelle MACD lijn}
?xSignal := vEMA(xMACD,xSignalBars); {signaal lijn}
?xDelta := xMACD-xSignal; ?{MACD Histogram = MACD lijn - signaallijn}
?
xEMA := vEMA(xDelta,xEmaBars); {EMA over MACD histogram}

?{--- check for any crossing ---}
?value xAbove, xBelow;
?{xAbove := vCrossesAbove(xMACD,xEMA);
?xBelow := vCrossesBelow(xMACD,xEMA);}
xAbove := xEMA>xEMA[1];
xBelow := xEMA<xEMA[1];

?{---- check for signals ----}
?if xAbove then Buy else
?if xBelow then Sell;

?Plot1(xDelta,'MACD'); ?{instellen als histogram }
?Plot2(xEMA,'EMA'+NumToStr(xEmaBars));

?end;

########

Wat ik nu eigenlijk wil proberen is om een koop en verkoopsignaal te laten genereren op basis van de optieserie. Voorbeeldje:
Op 19-11-2001 geeft de AEX bij 509.10 een koopsignaal. We zouden een Put 500 schrijven volgens het MACD EMA systeem.
Op 20-11-2001 geeft de AEX bij 501.73 een verkoopsignaal. Dus we maken winst. Echter, omdat er op de slotkoers wordt afgerekend, is deze trade in het systeem toch een ?verliezer?. Zo zijn er nog meer. Van de 57 trades zijn er 28 verliezers en 29 winners. Zouden we echter handelen met de daadwerkelijke optieseries hadden we 36 winners en 21 verliezers gehad.
Ook moet het volgens mij mogelijk zijn een trade te laten expireren. Tjah, ideeen heb ik genoeg :) .
Het volgende had ik al opgezocht:

De functie:
?DaysToExpiration? kan de expiratiedatum berekenen.

xDay := DaysToExpiration ( 06,0103 ); {---06 is de maand, 0103 is het jaar 2003---}
Plot5 (xday," Expiration " ) ; {---geeft als uitkomst 28. dat klopt dus precies---}

En om de optieserie te laten kiezen had ik het volgende in gedachten:
Als we de huidige koers nu delen door 10. Deze vervolgens laten afronden met ?ceiling? of ?floor? ( call of put ). En daarna weer vermenigvuldigen met 10. Dan krijgen we de dichtstbijzijnde optieserie, toch? Dit geldt dan alleen voor de AEX. Voor de overige fondsen volstaat alleen het afronden naar boven of naar beneden met ?ceiling? en ?floor?. ?
Voorbeeld: Koers 498.03 / 10 = 49.803. Met ceiling wordt dit 50. Dat maal 10 = 500. Dit is dan de optieserie bij een short put. In het systeem is dit dan de koers waarmee moet worden gerekend bij buy en sell om zo juiste rapporten te krijgen.

Nog mooier is het om te handelen met de theoretische waarde van de optiepremie d.m.v. Black & Scholes. Voor wat betreft deze functie?s heb ik het volgende gevonden op het internet:

######

Here's 3 volatilities that I often use in my Black-Scholes model.
These can be calculated from price data. ?The implied volatility is
the most accurate for the model because it's back calculated using the
model as you know. ?As a trader, I'm looking for something that's
close enough to allow me to enter a limit order and not feel like I'm
getting screwed by the floor (especially in NY markets). ?These
volatilities work just fine for that and are close enough for my real
life trading. ?This may make those purists out there flinch but it
works for me:

This is the "EasyLanguage" format C[1] means Close 1 day ago. ?C means
todays close - everything else should be pretty straightforward

Historical Volatility

StdDev(Log(C/C[1]),X-days)*SquareRoot(250) - X-days should be 10 or
less - I use 6

Statistical Volatility

Xaverage(0.627*SquareRoot(250)*log(H/L),X-days) - X-days same as above

William Gallacher "Market Volatility" Approximation

22*Average(AbsValue(C-C[1])/c,X-days)*100 - X-days same as above


Good Trading,

######
Hoe dit nu om te bouwen in vestics? ?:).
Maar ik zag dat vestics zelf ook al vol zit met een heleboel functie?s die met optie?s te maken hebben b.v:
?Delta;Calculate option Delta value.vvc ?. En dan heb ik nog niet eens kaas van de instrumenten gegeten die ook voor optie?s en futures zijn dacht ik.
Ik had niet gedacht dat je zoveel met Vestics kon. Het is echt helemaal naar smaak aan te passen. Ik vind het een geweldig pakket, en ga me zeer zeker in de code verdiepen. :)

Als je nog tips en truuks hebt zijn ze van harte welkom. Er zijn een hoop experts op dit forum waar veel van te leren is merk ik wel.

In ieder geval nogmaals bedankt. Heb ik het met je hulp toch voor elkaar gekregen :cheesy:

Mvg,
Gerard
GerardB
 
Berichten: 14
Geregistreerd op: ma 17 feb 2003, 22:08

EMA 7 over de MACD

Berichtdoor RobvZ » za 24 mei 2003, 21:58

Hoi Gerard,

Oops, ik zie dat in mijn code een slordigheid is geslopen.

De code:
xAbove := vCrossesAbove(xMACD,xEMA);
xBelow := vCrossesBelow(xMACD,xEMA);

Was ?van de vorige keer. Moet zijn:

xAbove := vCrossesAbove(xDelta,xEMA);
xBelow := vCrossesBelow(xDelta,xEMA);

Het verbaast me dat:
xAbove := xEMA>xEMA[1];
xBelow := xEMA

naar tevredenheid werkt. Bv. als de xEMA stijgende is en groter dan nul, dan wordt bij jou zowel de xAbove als de xBelow postief en dus tegelijkertijd trigger voor een Sell en een Buy aktie. Zo zijn er nog een paar vraagtekens bij deze oplossing.

Jou idee om met opties in een handelsysteem te werken, is al lang een grote wens van mij. Mede daarvoor kent Vestics het concept instrument. Ik begreep van Pierre dat deze functionaliteit binnenkort binnen Vestics operationeel wordt (o.a. prijsberekening mbv Black-Scholes). Nu ik dit zeg, riep Pierre dat niet al maanden geleden?! Helaas heb ik te weinig tijd om ?er zelf in te duiken en wacht dus geduldig af.


Gr. Rob
RobvZ
 
Berichten: 17
Geregistreerd op: di 31 dec 2002, 18:06
Woonplaats: Veghel

EMA 7 over de MACD

Berichtdoor Paul M » za 24 mei 2003, 22:10

Hoi Gerard,

Drie indicatoren, afzonderlijk invoeren.
Value function zeHistoricalVol (value XDays=6)begin
value xHistVol[];
xHistVol :=StdDev(Log(Close/Close[1]),Xdays)*SquareRoot(250) - Xdays;
Plot1(xHistVol,'Historische volatiliteit');
end;

Value function zStatisticalVol (value XDays=6)begin
value xStatVol[];
xStatVol :=Xaverage(0.627*SquareRoot(250)*log(High/Low),Xdays) - Xdays;
Plot1(xStatVol,'Statistical volatility');
end;

Value function zMarketVol (value XDays=6)begin
value xMarketVol[];
xMarketVol :=22*Average(AbsValue(Close-Close[1])/close,Xdays)*100 - Xdays;
Plot1(xMarketVol,'Market volatility');
end;

Groetjes Paul
Paul M
 
Berichten: 263
Geregistreerd op: vr 13 dec 2002, 23:21

EMA 7 over de MACD

Berichtdoor GerardB » zo 25 mei 2003, 20:03

Dag Rob en Paul,

Rob,
De tekst is niet goed overgekomen, maar als je mijn bericht met ?edit? bekijkt ( tip van Paul ) staat het er wel allemaal. Zo als het nu op het forum staat werkt het niet :).
Ik heb de code aangepast met je laatste update, en het werkt inderdaad prima!

Paul,
Ook de code van de volatiliteit is weer exact wat ik zocht. Dankjewel voor het omzetten. Ik gebruik de historische volatiliteit. De waarde laat ik nog met 100 vermenigvuldigen en tel er dan 30 bij op. Op deze manier : Plot1((xHistVol+30)*100,'Historische volatiliteit'); ?Dit doe ik alleen maar omdat het iets makkelijker rekent. Ik reken met een waarde van 30 i.p.v. 6.

Oja,
Op het internet vond ik nog dit v.w.b. Black & Scholes:
http://home.online.no/~espehaug/SayBlackScholes.html
De formule in vrijwel alle programmeertalen waaronder Pascal. Is vesticode geen afgeleide van Pascal?

########

function BlackScholes(CallPutFlag : string; S, X, T, r, v : Double) :

Double;

var

?d1, d2 : Double;

begin

?Result := 0;

?d1 := (LN(S / X) + (r + Power(v, 2) / 2) * T) / (v * SqRt(T));

?d2 := d1 - v * SqRt(T);

?if CallPutFlag = 'c' then

? ?Result := S * CND(d1) - X * Exp(-r * T) * CND(d2)

?else

? ?if CallPutFlag = 'p' then

? ? ?Result := X * Exp(-r * T) * CND(-d2) - S * CND(-d1);

end;
{The cumulative normal distribution function}

function CND(X : Double) : Double;

var

?L, K : Double;

const

?a1 = 0.31938153; ? a2 = -0.356563782; ?a3 = 1.781477937;

?a4 = -1.821255978; a5 = 1.330274429;

begin

?L := Abs(X);

?K := 1 / (1 + 0.2316419 * L);

?Result := 1 - 1 / SqRt(2 * Pi) * Exp(-Power(L, 2) / 2)

? ? ? ? ? ?* (a1 * K + a2 * Power(K, 2) + a3 * Power(K, 3)

? ? ? ? ? ?+ a4 * Power(K, 4) + a5 * Power(K, 5));

?if X < 0 then

? ?Result := (1 - Result)

end;


########

Ik dacht dat jullie dit misschien wel interessant vonden. Natuurlijk heb ik er ook al naar gekeken, maar het is nog teveel ?spaghetti? voor me :confused: ?. Wat ik al wel heb kunnen ontdekken is dat ?v * SqRt(T));? SQRT SquareRoot is. Maar dat kwam terug in de formule die Paul heeft omgezet: xStatVol :=Xaverage(0.627*SquareRoot(250)* :)

Nogmaals bedankt voor de hulp! :cheesy:

Met vriendelijke groeten,
Gerard
GerardB
 
Berichten: 14
Geregistreerd op: ma 17 feb 2003, 22:08

EMA 7 over de MACD

Berichtdoor walter » zo 25 mei 2003, 21:17

grappig! :shocked:
er zijn twee verschillende formules voor de historische en de statistische volatiliteit, terwijl deze hetzelfde zijn :confused:

wanneer men spreekt van de volatiliteit over een bepaalde afgelopen periode dan bedoeld men de historische volatiliteit, en sommige noemen dit de statistische volatiliteit (omdat dit eenvoudig is te berekenen)

de formule voor het uitrekenen van de historische volatiliteit op basis van dagkoersen is:
?StdDev( Log(C(today)/C(yesterday)), period) * SquareRoot( 252)

waarbij de periode afhankelijk is van de toepassing en kan bijvoorbeeld 22 zijn (bij 22 handelsdagen per maand)
omdat de koersen dagkoersen zijn moet worden vermenigvuldigt met de wortel uit 252 (het aantal handelsdagen per jaar), voor weekkoersen moet dit 52 zijn
walter
 
Berichten: 135
Geregistreerd op: do 15 mei 2003, 15:26
Woonplaats: delft


Keer terug naar Handelssystemen + Indicatoren

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 10 gasten