Een leuke oefening voor TransTrader: de Monest ChartMill Trend Indicator.

2 posts / 0 new
Last post
Ton
Een leuke oefening voor TransTrader: de Monest ChartMill Trend Indicator.

Monest heeft een indicator waarmee zij de trend bepalen. Daarbij wordt gekeken of de trend stijgend, dalend dan wel neutraal is. Op de website van Monest is hiervan het logisch ontwerp te vinden. Onderstaand hun tekst

http://www.chartmill.com/documentation.php?a=378&title=Chartmill%20Trend%20Indicator

The standalone indicator has a value 1 for a positive trend, -1 for a negative trend or 0 for a neutral trend. The same color code is used in the standalone indicator. The indicator is meant to be used on a weekly time frame and measures the long term trend. It can also be used in the daily time frame to indicate shorter term trends. The distinction between positive, negative or neutral is made by comparing the price to the  position of the 30 week exponential moving average (30 EMA):

A. The trend is positive if the low of the week is above a rising 30 EMA and the 30 EMA has been rising for at least 3 weeks.
B. The trend is negative if the high of the week is below a declining 30 EMA and the 30 EMA has been declining for at least 3 weeks.
C. Otherwise the trend is neutral.

Dit is vrij eenvoudig in code om te zetten zodat we de kwaliteit van de indicator kunnen Backtesten. In tegenstelling tot hetgeen Monest heeft gedaan, heb ik de indicator over de tijdreeks geplot zodat ik precies kan zien tegen welke koers gekocht en verkocht wordt. Indien de trend opwaarts is dan is de indicator groen. Is de trend neerwaarts dan is de indicator rood. En indien we neutraal zitten is deze blauw. Aldus krijgen we bij de omslag twee mogelijkheden. Of gaan we onmiddellijk op rood en dienen we alles af te dekken dan wel gaan we eerst op blauw en kunnen we de “kat uit te boom kijken”.

Voor de SP500 ( ^GSPC ) levert me dat volgend plaatje. Hierbij heb ik zoals Monest als periode 30 weken genomen.

Hierin is prachtig de mooie rally van einde 2012 tot einde 2014 te zien. Bovendien zie je hier de uiterst negatieve ontwikkeling van de beurs per begin 2016. Kortom het lijkt erop dat we met deze indicator moeten kunnen handelen. Daarom onderstaand het Backtest resultaat van 1950 t/m heden. Hierbij heb ik als transaktiekosten 0,15% per Trade genomen. Zijnde de klassieke 0,10% bij Interactive Brokers plus 0,05% voor de Bid/Ask Spread.

Over dik 65 jaar dus 83 Trades of iets meer dan 1 Trade per jaar. Een rendement op CAR basis van een magere 4,82%. Maar wel met een Exposure van slechts een kleine 65%. Zodat daar nog het rendement van de kortetermijn rente bij opgeteld dient te worden. En tenslotte een risiko van maximaal 23,79%. Of minder dan mijn maximum van 25% ( MDD ). De vraag is natuurlijk of dat rendement niet wat hoger kan ?

Het antwoord is dat er geen “Free lunch on WallStreet” bestaat. Hetgeen betekent dat bij een hoger rendement een hoger risiko hoort. Laten we daarom de periode van 30 weken eens verdubbelen en er 60 weken van maken. Wat krijgen we dan ?

Indien je beide plaatjes met elkaar vergelijkt dan zie je onmiddellijk wat er is gebeurd. Indien we op 60 weken overstappen dan wordt het aantal Trades een stuk lager. Hiermee besparen we niet alleen transaktiekosten maar voorkomen we tevens dat we bij de tijdelijke uitstappen verlies maken omdat we tegen een hogere prijs terug aankopen dan waarvoor we zijn uitgestapt. Maar het gevolg van minder kort op de bal spelen is natuurlijk een grotere DrawDown. Kortom een hoger risiko. Klopt dit als we de Backtest bekijken ?

Zoals gewenst is ons rendement met 6,07% een stuk hoger dan hierboven. Maar het risiko is zoals verwacht tevens opgelopen naar 33,24%. En zoals tevens verwacht is het aantal Trades drastisch afgenomen tot 47. Een stuk minder dan een Trade per jaar ...

Onderstaand de code in Amibroker. Lijkt me redelijk eenvoudig om te zetten in TransTrader. Iets voor de demonstratie die Mark komt geven ?

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// AFL Name            : ChartMill Trend Indicator

// Author                  : AMS

// Date                     : 2016, february 25

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// User param selection

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Period                     = StrToNum(ParamList("Period","60|30"));

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// Calculation area

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// Compress daily in weekly ...

WeeklyCls               = TimeFrameCompress( Close, inWeekly );

WeeklyLow              = TimeFrameCompress( Low, inWeekly );

WeeklyHigh             = TimeFrameCompress( High, inWeekly );

 

// Is the 3 week EMA rising ?                                               

WeeklyEMA            = EMA(WeeklyCls, Period);

RisingEMA              = IIf(WeeklyEMA > Ref(WeeklyEMA,-1) AND

                                                                              Ref(WeeklyEMA,-1) > Ref(WeeklyEMA,-2) AND

                                                                                              Ref(WeeklyEMA,-2) > Ref(WeeklyEMA,-3),1,0);

// Do we have a positive trend ?                                                                         

LowAboveEMA      = WeeklyLow > WeeklyEMA;                                                               

WeekUp                  = IIf(RisingEMA AND LowAboveEMA, 1, 0);

// Do we have a negative trend ?

HighBelowEMA= WeeklyHigh < WeeklyEMA;                                                                      

WeekDown             = IIf(!RisingEMA AND HighBelowEMA, 1, 0);

// Calculate ChartMill Trend Indicator

CTI           = IIf(WeekUp, 1, IIf(WeekDown, -1, 0));

// Expand back in daily ...

CTI           = TimeFrameExpand( CTI, inWeekly );

CTICol      = IIf(CTI==1,colorGreen,IIf(CTI==-1,colorRed,colorBlue));

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// Trade rules

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Buy         = CTI == 1;

Sell          = CTI == -1;

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// Plot and Report area

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Plot(Close,"",colorBlack,styleCandle);

Plot(CTI,"",CTICol, styleLine|styleOwnScale, 0, 0, 0, 0, 2);

Title = "ChartMill Trend Indicator - weeks(" + NumToStr(Period,1.0) + ")";

Yves Jongbeis
monest

Bedankt voor de uitdaging

Log in or register to post comments