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

Re: [amibroker] Re: Passing array to Backtester



PureBytes Links

Trading Reference Links



Sure Mike, whenever you're in Denver, let me know!

One more question, can I control the number of digits to display after the decimal in this statement?

trade.AddCustomMetric("Risk(ticks)", Risk * 10^Digits ); 

Right now I have to convert it to integer to see the number.  There's 4 digits after the decimal.

Thx
Nick

On Jul 16, 2009, at 12:18 PM, Mike wrote:

Molson Export please ;)

Mike

--- In amibroker@xxxxxxxxxps.com, Nick Willemse <nick.willemse@...> wrote:
>
> Thanks Mike! I owe you a beer!
> 
> That was the problem trying to send that array with only numTrades 
> values across to the backtester section. After sending the full array 
> of MaxStopLoss points, then using your entryBar code to get the entry 
> bar, I was able to extract the risk per trade properly.
> 
> Thanks for the help!!
> 
> Nick
> 
> 
> On Jul 16, 2009, at 11:25 AM, Nick Willemse wrote:
> 
> > Thanks Mike,
> >
> > I understand. I saw your code to get the entryBar, so that will 
> > help. I'm going to give it a try...
> >
> > nick
> >
> > On Jul 16, 2009, at 10:54 AM, Mike wrote:
> >
> >> Nick,
> >>
> >> I have not studied your code in depth, nor tested it out yet. But, 
> >> assuming everything else is correct, two things stand out.
> >>
> >> 1. In your initialization loop for MSL, you should really be 
> >> iterating from bar=0 to bar<BarCount, not bar=1. As it stands, if 
> >> you get a signal on bar=0, you will not store the risk for it. When 
> >> iterating through your trades later, all trades would be using the 
> >> wrong risk, offset by one position in the array.
> >>
> >> That being said, there's no need for this loop at all. I believe 
> >> that the entire loop can be replaced with the following:
> >>
> >> MSL = IFF(Buy OR Short, Risk, 0);
> >>
> >> 2. It appears that you are trying to create MSL as a non sparse 
> >> array (i.e. values all at consecutive indices) rather than a sparse 
> >> array (i.e. values of interest whose indices may be widely spaced 
> >> apart). This is likely the root of your problem.
> >>
> >> For example, you are populating the array per signal, but then 
> >> querying the values per trade. Due to portfolio restrictions, not 
> >> all signals will necessarily have become trades (e.g. lack of 
> >> funds, max open positions, etc). As soon as any signal did not 
> >> result in a trade, your algorithm falls apart and you will be 
> >> referencing the wrong risk index for all subsequent trades.
> >>
> >> Using the sparse array assignment for MSL given above, and the bar 
> >> indexing of the trade as suggested in my earlier notes, you would 
> >> not suffer this problem.
> >>
> >> You might also run into alignment problems if the array size of 
> >> ~~~Equity is different than ~MSL. Again, using bar index of trade 
> >> would avoid that.
> >>
> >> Mike
> >>
> >> --- In amibroker@xxxxxxxxxps.com, Nick Willemse <nick.willemse@> 
> >> wrote:
> >> >
> >> > Hi,
> >> >
> >> > Attached is the afl. This runs on EC 5min database. If you want me
> >> > to upload this db to the files section, i'll be happy to do it. 
> >> I've
> >> > tried everything. For some reason I just cannot pass the risk per
> >> > trade to the backtester just to output the values and calc r-
> >> > multiples. I can't believe how difficult and cumbersome this 
> >> process
> >> > is. The values are in the ~MSL before the backtester.
> >> >
> >> > Mike, if will be much harder to recalc the ATR array in the 
> >> bactester
> >> > and trying to figure out which bar the trade happened and take that
> >> > value from the array as the original risk. That's why i'm trying to
> >> > pass it. Also, if the trade object had a method getEntryBarNum it
> >> > would have been easier.
> >> >
> >> > Any help appreciated!
> >> > Nick
> >> >
> >> >
> >> >
> >> > On Jul 15, 2009, at 9:04 PM, Mike wrote:
> >> >
> >> > > Nick,
> >> > >
> >> > > Since ATR uses OHLC I'm assuming that it will use the OHLC of the
> >> > > foreign symbol once bracketed by SetForeign/RestorePriceArrays.
> >> > >
> >> > > The point that I was trying to stress was that once you've called
> >> > > SetForeign, you can do all kinds of array manipulations on that
> >> > > symbol, then reference the value you want for the bar in 
> >> question.
> >> > >
> >> > > In other words, instead of trying to reference your external 
> >> array
> >> > > FROM the backtester code, calculate the array IN the backtester 
> >> code.
> >> > >
> >> > > Look again at the earlier post and try using ATR between 
> >> SetForeign/
> >> > > RestorePriceArrrays.
> >> > >
> >> > > That being said, when looking again at your original code example
> >> > > and taking a cue from Bruce's reply; try using "X" in both the
> >> > > AddToComposite and Foreign, and use atcFlagEnableInPortfolio 
> >> instead
> >> > > of atcFlagEnableInBacktest.
> >> > >
> >> > > Mike
> >> > >
> >> > > --- In amibroker@xxxxxxxxxps.com, Nick Willemse <nick.willemse@>
> >> > > wrote:
> >> > > >
> >> > > > Thanks Mike,
> >> > > >
> >> > > > Yea, van tharp's stuff makes a lot of sense to me :)
> >> > > >
> >> > > > The example you've posted still uses only price data, which is
> >> > > kind of
> >> > > > straight forward referring back to price. I am using that 
> >> value of
> >> > > > the ATR of price. The problem is trying to make this 
> >> value(array)
> >> > > > available in the backtester part of the code.
> >> > > >
> >> > > >
> >> > > > Nick
> >> > > >
> >> > > > On Jul 15, 2009, at 1:32 PM, Mike wrote:
> >> > > >
> >> > > > >
> >> > > > >
> >> > > > > This is a popular topic lately. Van Tharp must be doing 
> >> well with
> >> > > > > his new book ;)
> >> > > > >
> >> > > > > See my earlier post on the subject for how to calculate the 
> >> risk
> >> > > > > anyway you see fit. Note that the expectancy shown in that 
> >> post
> >> > > was
> >> > > > > the formula provided by the original poster, it is not the 
> >> formula
> >> > > > > used by Van Tharp, so refer to the methodology, but not the
> >> > > formula:
> >> > > > >
> >> > > > > http://finance.groups.yahoo.com/group/amibroker/message/ 
> >> 139969
> >> > > > >
> >> > > > > Mike
> >> > > > >
> >> > > > > --- In amibroker@xxxxxxxxxps.com, Nick Willemse 
> >> <nick.willemse@>
> >> > > > > wrote:
> >> > > > > >
> >> > > > > > Hi Everyone,
> >> > > > > >
> >> > > > > > I'm trying to add Risk and R-Multiples to the TradeList. 
> >> I've
> >> > > looked
> >> > > > > > at the example using MaxLossPercent to add r-multiples and
> >> > > that is
> >> > > > > > pretty straight forward. However, my risk per trade is 
> >> based
> >> > > on some
> >> > > > > > multiple of the ATR. So I put the risk points per trade 
> >> in an
> >> > > array,
> >> > > > > > then I tried using the addtocomposite and Foreign 
> >> functions to
> >> > > get
> >> > > > > > this array to the backtester section, but it seems that all
> >> > > the data
> >> > > > > > is zero when it gets to the backtester. Is there any 
> >> other way
> >> > > to
> >> > > > > > make this array holding the risks per trade available to 
> >> the
> >> > > > > > backtester to output this for each trade?
> >> > > > > >
> >> > > > > > Here's some of the code:-
> >> > > > > >
> >> > > > > >
> >> > > > > > Risk = 2.5 * ATR(14);
> >> > > > > > i = 0;
> >> > > > > > MSL = 0;
> >> > > > > > for( bar=1; bar < BarCount; bar++)
> >> > > > > > {
> >> > > > > > if (Buy[bar] == 1 OR Short[bar] == 1)
> >> > > > > > {
> >> > > > > > MSL[i] = Risk[bar];
> >> > > > > > // _TRACE("MSL = " + MSL[i]); //this outputs correct 
> >> values
> >> > > > > > i++;
> >> > > > > > }
> >> > > > > > }
> >> > > > > > AddToComposite( MSL,"~MSL","V", atcFlagDeleteValues |
> >> > > > > > atcFlagEnableInBacktest); // if i plot this it looks fine
> >> > > > > >
> >> > > > > > ...
> >> > > > > >
> >> > > > > > if(AAAction == actionPortfolio)
> >> > > > > > {
> >> > > > > > MSL = Foreign("~MSL", "X",0);
> >> > > > > > _TRACE("MSL=" + MSL[0]); // this output 0 for every index 
> >> in the
> >> > > > > > array
> >> > > > > > ...
> >> > > > > >
> >> > > > > > }
> >> > > > > >
> >> > > > > >
> >> > > > > >
> >> > > > > > Nick
> >> > > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > >
> >> > >
> >> > >
> >> > >
> >> >
> >>
> >>
> >> 
> >
>




__._,_.___


**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

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





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___