[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Dynamic trailing stop - ploting vs backtesting giving different values


  • To: amibroker@xxxxxxxxxxxxxxx
  • Subject: Re: [amibroker] Re: Dynamic trailing stop - ploting vs backtesting giving different values
  • From: Flávio Veloso <flavso@xxxxxxxxx>
  • Date: Wed, 16 Jul 2008 14:04:52 -0300

PureBytes Links

Trading Reference Links

Hi Graham.

Thanks for replying.

Notice that a simple chandelier 4xATR trailing stop does not vary 
depending where the trade was started. In other words, the trailing stop 
has fixed value no matter when you bought the security. The 
"InTrade/HighestSince()" thing is being used just to pretty plot the 
stop (only if you're in a trade / plot only highest value since trade 
start).

I theory you could do simply:

TS = 4 * ATR(20);
ApplyStop(stopTypeTrailing, stopModePoint, TS, 1, TRUE);
Plot(High - TS, "Traling stop", colorRed);

And then handle yourself the 
only-if-in-trade-and-always-increasing-trailing-stop issue. That's how I 
do this in my discretionary trades, and that's why I tried to do on my 
first try.

However when you backtest the code above and plot it, you get different 
values for trailing stops. This makes IMPOSSIBLE to apply the system in 
realtime, because you don't know how the right values to place your 
stops at in your broker.

Perhaps I should make myself more clear: I don't want to know how to 
pretty plot trailing stops. All I need to know is how to determine the 
ARRAY values being used by the backtester.

Also I don't want to change how ApplyStop() apply the stops because the 
backtester results are so nice... <g>

BTW, I think this a serious issue. I wonder how people are doing with 
their systems that use dynamic stops (such as the similar ATR trailing 
stop example on the ApplyStop() help). Are they blindly doing the math 
outside AB and setting their stops with manually obtained results?

Graham escreveu:
> 
> 
> These apply I believe, I have included allowance for trade delays (see
> also Amibroker Knowledge Base website for a description of applystop)
> 
> SetTradeDelays (1,1,1,1);
> Budl = Status("buydelay");
> Sedl = Status("selldelay");
> 
> ApplyStop(stopTypeTrailing, stopModePoint, TS, 1, TRUE);
> stopline = IIf( InTrade, HighestSince( Ref(Buy,-budl), High ) - TS, Null );
> 
> ApplyStop(stopTypeTrailing, stopModePoint, TS, 1, False);
> stopline = IIf( InTrade, HighestSince( Ref(Buy,-budl), High ) -
> valuewhen(Buy,TS) , Null );
> I cannot recall if this should be this instead, needs to be checked
> stopline = IIf( InTrade, HighestSince( Ref(Buy,-budl), High ) -
> valuewhen(Ref(Buy,-budl),TS) , Null );
> 
> I do not believe there is applystop for this
> stopline = IIf( InTrade, HighestSince( Ref(Buy,-budl), High - TS ), Null );
> 
> -- 
> Cheers
> Graham Kav
> AFL Writing Service
> http://www.aflwriting.com <http://www.aflwriting.com>
> 
> 2008/7/16 Flávio Veloso <flavso@xxxxxxxxx <mailto:flavso%40gmail.com>>:
>  > Hi Tomasz.
>  >
>  > Thanks for replying. I already read that article. I applied the ideas
>  > presented there but unfortunately they did not solve the issue.
>  >
>  > Problem is: the example provided in the article shows how a
>  > stopModePercent trailing stop can be ploted. Just to be more clear: the
>  > issue is that it's not clear how one know the *values* to set the stops
>  > at (or plot in the charts) when using a *variable stopModePoints
>  > trailing stop*.
>  >
>  > I updated my sample AFL with to use the technique presented in that
>  > article. Here's the updated system:
>  >
>  > ------------snip-------------
>  > SetOption("InitialEquity", 100000);
>  >
>  > BuyPrice = SellPrice = Open;
>  > SetTradeDelays(1, 1, 1, 1);
>  >
>  > Buy = Cross(Signal(), MACD());
>  > Sell = Cross(MA(C, 200), C);
>  >
>  > TS = 4 * ATR(20);
>  > ApplyStop(stopTypeTrailing, stopModePoint, TS, 1, TRUE);
>  >
>  > Equity( 1, 0 ); // evaluate stops, all quotes
>  >
>  > InTrade = Flip( Buy, Sell );
>  >
>  > SetOption("EveryBarNullCheck", True );
>  > stopline = IIf( InTrade, HighestSince( Buy, High ) - TS, Null );
>  >
>  > PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
>  > PlotShapes(Sell*shapeDownArrow,colorRed,0,High);
>  >
>  > #include "Formulas/Basic Charts/Price.afl"
>  > Plot( stopline, "trailing stop line", colorRed, styleDots | styleNoLine);
>  > ------------snip-------------
>  >
>  > It seems that the problem is in this statement:
>  >
>  > stopline = IIf( InTrade, HighestSince( Buy, High ) - TS, Null );
>  >
>  > When using a stopModePercent trailing stop, calculating stopline is
>  > obvious: just multiply the highest high value by the stop percent factor
>  > and you're done. That's what the code in the article does.
>  >
>  > However, when dealing with dynamic stopModePoints trailing stops, the
>  > math is a bit different: the stop value should be *subtracted* from the
>  > highest high. Well, at least that's what I thought how it should be done
>  > until I tried to plot it and saw different numbers.
>  >
>  > Try it for yourself backtesting the DJI using the example above, which
>  > is basically the code in the article updated to use a pretty basic 4 x
>  > ATR(20) chandelier trailing stop.
>  >
>  > If I did cut'n'paste correctly, you will get a trade started in
>  > 2004-09-21 @ 10204.5 that is stopped out on 2005-03-29 @ 10373.5 in the
>  > backtester. However, the "trailing stop line" plot never reached that
>  > exit value. Actually, if the ts-line was used to trail the stop, the
>  > trade would be stopped much earlier in 2004-10-24 @ 9732.29, which is
>  > almost five months before!
>  >
>  > NB: you may want to change the stopline formula to the following:
>  >
>  > stopline = IIf( InTrade, HighestSince( Buy, High - TS ), Null );
>  >
>  > I think that the form above is much more appropriate for a dynamic
>  > trailing stop (TS changes on every bar). It also makes the plot much
>  > more easy to follow as the line always go up (note: this changes does
>  > not alter backtester results).
>  >
>  > So the question is: what math one should use to match the values used by
>  > ApplyStop(stopTypeTrailing, stopModePoints, ARRAY, 1, TRUE) in AB? Is it
>  > possible? Or maybe that's not how dynamic ApplyStop() works?
>  >
>  > Thanks in advance.
>  >
>  > Tomasz Janeczko escreveu:
>  >>
>  >>
>  >> Knowledge Base:
>  >>
>  >> 
> http://www.amibroker.com/kb/2007/03/24/how-to-plot-a-trailing-stop-in-the-price-chart/ 
> <http://www.amibroker.com/kb/2007/03/24/how-to-plot-a-trailing-stop-in-the-price-chart/>
>  >> 
> <http://www.amibroker.com/kb/2007/03/24/how-to-plot-a-trailing-stop-in-the-price-chart/ 
> <http://www.amibroker.com/kb/2007/03/24/how-to-plot-a-trailing-stop-in-the-price-chart/>>
>  >>
>  >> Best regards,
>  >> Tomasz Janeczko
>  >> amibroker.com
>  >> ----- Original Message -----
>  >> From: "Flávio Veloso" <flavso@xxxxxxxxx <mailto:flavso%40gmail.com> 
> <mailto:flavso%40gmail.com>>
>  >> To: <amibroker@xxxxxxxxxxxxxxx <mailto:amibroker%40yahoogroups.com> 
> <mailto:amibroker%40yahoogroups.com>>
>  >> Sent: Monday, July 14, 2008 3:17 PM
>  >> Subject: [amibroker] Re: Dynamic trailing stop - ploting vs backtesting
>  >> giving different values
>  >>
>  >> > Hi all.
>  >> >
>  >> > Anybody cared to test this???
>  >> >
>  >> > Is anyone trailing stops manually on the broker
>  >> > matchingApplyStop(stopModeTrailing...) behavior?
>  >> >
>  >> > If so, how are you doing it? I.e. how do you know the exact value 
> to set
>  >> > your stops at?
>  >> >
>  >> > Flávio Veloso escreveu:
>  >> >> Hi all.
>  >> >>
>  >> >> I'm trying to plot the trailing stop used by the ApplyStop() function
>  >> >> but had no success so far. Consider this simple system:
>  >> >>
>  >> >> ---------------------snip-------------------
>  >> >>
>  >> >> SetOption("InitialEquity", 100000);
>  >> >>
>  >> >> BuyPrice = SellPrice = Open;
>  >> >> SetTradeDelays(1, 1, 1, 1);
>  >> >>
>  >> >> Buy = Cross(Signal(), MACD());
>  >> >> Sell = Cross(MA(C, 200), C);
>  >> >>
>  >> >> TS = 4 * ATR(20);
>  >> >> ApplyStop(stopTypeTrailing, stopModePoint, TS, 1, TRUE);
>  >> >>
>  >> >> #include "Formulas/Basic Charts/Price.afl";
>  >> >>
>  >> >> Plot(High - TS, "Trailing Stop", colorRed, styleDots | styleNoLine);
>  >> >>
>  >> >> ---------------------snip-------------------
>  >> >>
>  >> >> For example, when I run this system on DJI from 2003 to 2007, I get a
>  >> >> trade started on 2006-08-14 with entry price equals to 11089.10. This
>  >> >> trade ends by triggering the backtester trailing stop in 
> 2007-02-27 with
>  >> >> exit price at 12148.50.
>  >> >>
>  >> >> However, the trailing stop plot never reach the 12148.50 value 
> exactly.
>  >> >> Actually, the highest value of the trailing stop plot since trade 
> start
>  >> >> is 12237.11 (at 2007-02-20), which is higher than backtester exit 
> price!
>  >> >>
>  >> >> Another example:
>  >> >>
>  >> >> Entry: 2004-09-21 @ 10204.50
>  >> >> Exit (trail): 2005-03-29 @ 10373.50
>  >> >> If following plot: trailing stop reached 9732.29 in 2004-10-04, which
>  >> >> would cause the trade to be stopped much earlier in 2004-10-25.
>  >> >>
>  >> >> (Note: I'm using Yahoo free EOD data -- if you use another feed then
>  >> >> your numbers may be different.)
>  >> >>
>  >> >> This is frustating because I developed and optimized a system that
>  >> >> perform somewhat well in the backtester, but I can't apply it in real
>  >> >> life because I don't know how to move the stops in my broker to match
>  >> >> the values used by AB.
>  >> >>
>  >> >> So... what's wrong in my code? How to plot the ACTUAL price that
>  >> >> ApplyStop(stotTypeTrailing, stopModePoint...) consider when exiting
>  >> trades?
>  >> >>
>  >> >> Thanks in advance.
>  >> >>
>  >> >
>  >> >
>  >> > --
>  >> > Flávio
>  >> >
> 
> 


-- 
Flávio

------------------------------------

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/