Thanks a lot Ed. I'll will try the code and see if this will bring the famous 'Of course...' experience ...
Regards, Ton. ----- Original Message ----- From: ed2000nl To: [email protected] Sent: Thursday, August 30, 2007 11:24 AM Subject: [amibroker] Re: How do I backtest placing a restricted number of limit orders each night? if this is the problem then I posted an example on this (#112783) here: http://finance.groups.yahoo.com/group/amibroker/message/112783 --- In [email protected], "Tomasz Janeczko" <[EMAIL PROTECTED]> wrote: > > Ton, > > Please read this: > http://www.amibroker.com/f?setbacktestmode > > There are 4 different backtest modes and what you are trying to do requires backtestRegularRaw, instead of backtestRegular (the default one). > > Best regards, > Tomasz Janeczko > amibroker.com > ----- Original Message ----- > From: Ton Sieverding > To: [email protected] > Sent: Thursday, August 30, 2007 10:20 AM > Subject: Re: [amibroker] Re: How do I backtest placing a restricted number of limit orders each night? > > > Yes Skynet is a PITA. But as you know they are not the only one in Belgium giving email problems. Anyway I see we have some misunderstanding about my 'You dont know which signal will be used by the Backtester'. No I am not talking about Intraday signals and am of course using with EOD prices, the yesterday's signal. An yes I therefore also use the settradedelays(0,0,0,0) Backtester setting. So that is not my problem. The problem is that due to the portfolio constraint the Backtester only takes a small part of the 'based upon my rules' available signals. It's more or less the same as with the Exrem() command. Only there I know what's happening. With the Backtester not ... > > I am getting more and more the feeling that I am trying to solve something that by definition can't be solved. So I will do some extra testing to find out if there is some clou that explains everything or let the thing what it is. Thanks anyway for following up ... > > Regards, Ton. > > ----- Original Message ----- > From: ed2000nl > To: [email protected] > Sent: Thursday, August 30, 2007 9:25 AM > Subject: [amibroker] Re: How do I backtest placing a restricted number of limit orders each night? > > > again Emails not getting through, $%@&[EMAIL PROTECTED] Belgacom ... > > I wrote: > > maybe I am missing some deeper thought on portfolio type systems and > backtesting but my system performs as I would expect in the practice > so I assume I understand how it works. > > You say: "You just do not know which signal will be used by the > Backtester." This could be true if you allow your EOD system to add > stocks using intraday signals. However in my case I calculate my > signal for today using yesterdays EOD data. Then you know exactly what > you need to do and it makes no sense to analyse the other signals > because you don't use them in the practice. > > So to create a backtest that can exactly be performed in the practice > (excluding slippage and stocks that are not allowed to short) I use: > > settradedelays(0,0,0,0); > > and then define my signals as: > > Buy = ref(Buy,-1); > Short = ref(Short,-1); > > also my cover and sell signals are delayed by one bar but for the > exits you can also allow for an intraday exit at a target price. > > If you like I can give you an example system that exactly calculates > what you need to do the next day, > > rgds, Ed > > > --- In [email protected], "Ton Sieverding" > <ton.sieverding@> wrote: > > > > That's correct. But using rotational trading will give me a > completely different approach. I want to Backtest trading rules on > portfolio level. See if these rules give me in a real world > environment with let's say 20 stocks in portfolio a profitable system > yes or no. For me the only way to find out if these rules are > profitable is using the Explore function and exporting the result to a > spreadsheet for further analysis. Only then you will get all the > signals. And in most cases the result I get is different than the one > from the Backtester. Simply because of the portfolio constraint. The > Backtester is only using a small part of all created signals. And I > have the feeling that the occurrence of these signals have a random > character. You just do not know which signal will be used by the > Backtester. But your right, with rotational trading you will get a > systematic rebalancing of the portfolio ... > > > > Now my problem is that I just do not know if I am missing something > in the Backtester approach or that I am just trying to do something > that by definition is impossible ... > > > > Regards, Ton. > > > > > > ----- Original Message ----- > > From: vlanschot > > To: [email protected] > > Sent: Wednesday, August 29, 2007 11:35 AM > > Subject: [amibroker] Re: How do I backtest placing a restricted > number of limit orders each night? > > > > > > Hi Ton, > > > > Perhaps looking at the rotational trading version can help to clarify > > things (I hope). > > > > In line with your argument, new signals have no effect UNLESS some > > condition is met which rebalances the portfolio. This is easiest > > perceived in rotational mode, since it forces the portfolio > > to "rebalance" at each bar. I hope we can agree that one has to have > > some conviction as to the explanatory power for excess returns of > > the "factors" (or think "indicators") which are used to define the > > condition. In other words, any score on a factor (momentum, > > valuation, etc.) implies its relative expected return, i.e. a higher > > score is preferable. If we agree on that then, based on your > > condition, unless an existing holding meets this condition (i.e. has > > the minimum score) it is replaced by another security (assuming at > > least one meets this condition). In case of the condition being met, > > any new signals are legitimately "superfluous" in that they are not > > better signals. Otherwise our previous agreement falls apart. The > > only way, in my view, in which new (or rather confirming) signals are > > put into practise in the portfolio is by adding/deducting to the > > weights of existing holdings (particularly if you're judged against a > > benchmark) which is where scalein/out comes in. > > > > Now, first, any rotational system can (often more flexibly) be > > implemented via ordinary BSSC-rules. Second, I do agree that there > > are limitations to backtesters, even AB's CBT. The main one > > is "custom cash management": the inability to allocate cash from > > individual sells (which should be completed first) to individual > > buys. An extension of this is the inability to use cash from shorts > > to enter additional longs, i.e. create 130/30 portfolios (although TJ > > has promised to look into this functionality). > > > > May be too much OT, but hope it helps. > > > > PS > > --- In [email protected], "Ton Sieverding" > > <ton.sieverding@> wrote: > > > > > > Thanks Mike. I know all this. Please read my answers to Ed and you > > will find the real problem I have with the Backtester and whatever > > Backtester. Because it has nothing to do with the AB Backtester. It's > > just the portfolio constraint that every investor in the real world > > has creating mentioned problem. I just don't know how to solve it ... > > > > > > Regards, Ton. > > > > > > ----- Original Message ----- > > > From: sfclimbers > > > To: [email protected] > > > Sent: Tuesday, August 28, 2007 9:19 PM > > > Subject: [amibroker] Re: How do I backtest placing a restricted > > number of limit orders each night? > > > > > > > > > Ton, > > > > > > Once your portfolio is full, yes, PositionScore will have no > > effect > > > until a slot becomes available after a Sell. > > > > > > However, a PositionScore is only good for the life of the bar > > (single > > > day when using EOD data). So if it can not be acted upon *in that > > > bar*, then it is worthless from that point on. The markets will > > have > > > changed by the next bar and the score will no longer apply. > > > > > > Once one or more slots become open (after a Sell), then the > > *current* > > > PositionScore(s) will be considered, and the best will be used to > > > fill the open slot(s). So no, the process is not random. The > > > *current* PositionScore is used to fill any open slots of a > > > portfolio. "Expired" PositionScore(s) are of no use. > > > > > > If you have a restriction in your strategy that prevent entering > > > multiple positions for a single symbol (i.e. prvents "scale-in", > > > which is the default case), then entering a position for that > > symbol > > > will be rejected, even if it has the highest PositionScore. But > > that > > > is based on your strategy, not luck. > > > > > > The next highest will be evaluated until one is found that can be > > > traded in accordance with the rules of your strategy. The process > > is > > > predictable. > > > > > > Hope that helps, > > > > > > Mike > > > > > > --- In [email protected], "Ton Sieverding" > > > <ton.sieverding@> wrote: > > > > > > > > As far as I understand Ed and assuming EOD trading, > > PositionScore > > > is selecting the best signals coming from the same day. So when > > at > > > Day1 there are 10 different signals where only one is needed then > > > PositionScore is selecting the 'best' signal. But what if the > > next > > > day all stocks in portfolio are filled and the system generates > > > another 10 signals? They are lost ... until the system gives a > > SELL. > > > Therefore the next BUY is based upon the next SELL. Put the 500 > > > stocks of the SP500 in a WatchList, take whatever AFL rules for > > the > > > BUY and the SELL and a portfolio with say max. 10 stocks. Do a > > > Backtest and what you see is that only a small part of the > > signals > > > were used to fill the portfolio. Simply because you have this > > > portfolio constraint. If all signals would give you the same > > > Winner/Looser characteristics than there should be no problem. > > But > > > that's not true. Therefore the portfolio filling proces for me > > has a > > > random character and the result is based upon luck ... Unless I > > am > > > missing something ... And that's my question. > > > > > > > > Regards, Ton. > > > > > > > > > > > > ----- Original Message ----- > > > > From: ed2000nl > > > > To: [email protected] > > > > Sent: Monday, August 27, 2007 12:58 PM > > > > Subject: [amibroker] Re: How do I backtest placing a restricted > > > number of limit orders each night? > > > > > > > > > > > > hi Ton, > > > > > > > > I'm not sure if I understand what you mean. There are often more > > > > signals then you can use but the backtester is instructed to > > pick > > > the > > > > best signals using PositionScore. I can exactly perform my > > > backtest in > > > > the real world, excluding the shorts I am not allowed to enter > > by > > > my > > > > broker. The signals the backtester chooses are not pure luck but > > > > chosen using positionscore. But I guess I do not understand > > your > > > question, > > > > > > > > rgds, Ed > > > > > > > > --- In [email protected], "Ton Sieverding" > > > > <ton.sieverding@> wrote: > > > > > > > > > > Morning Ed, > > > > > > > > > > My problem when using the Backtester and in general a > > Backtester > > > > based upon portfolio result is the fact that in the real world > > an > > > > investor will have a portfolio with > > > > > let's day 20 stocks. Therefore when the portfolio has been > > > filled, > > > > all other BUY signals > > > > > will be lost until you've a SELL signal. For this reason when > > > doing > > > > a Backtest > > > > > I always do an Explore analysis of all signals. In general > > what > > > I > > > > get is something like > > > > > 200 Transactions from the Backtester and 1.000 Transactions > > > from the > > > > Explore analysis. > > > > > What makes things worse, I often get a RAR from the backtest > > of > > > > let's say 25% with > > > > > 75% of the signals being winners. When looking to the Explore > > > > analysis of all the > > > > > signals I only get something like 35% of winners. Therefore > > the > > > > result coming from > > > > > the Backtester must be pure luck. The backtester 'randomly' > > > chooses > > > > the signals to > > > > > fill the portfolio. I have no idea how to solve this > > problem ... > > > > > > > > > > Regards, Ton. > > > > > > > > > > > > > > > > > > > > ----- Original Message ----- > > > > > From: Edward Pottasch > > > > > To: [email protected] > > > > > Sent: Sunday, August 26, 2007 8:45 PM > > > > > Subject: Re: [amibroker] How do I backtest placing a > > restricted > > > > number of limit orders each night? > > > > > > > > > > > > > > > > > > > > hi, > > > > > > > > > > the way you set it up it shoudl not be possible. However, > > what > > > can > > > > happen is that the backtester finds exits for the next day and > > > > immediatelly fills them with new positions. So you need to make > > > sure > > > > that you first exit your positions and tell the backtester to > > > enter > > > > only on the next bar. This is usually the problem. There are > > > several > > > > ways to achieve this. Maybe you will get a more satisfactory > > > result > > > > when you set settradedelays(1,1,1,1). > > > > > > > > > > I use setttradedelays(0,0,0,0) but I make sure that the trade > > is > > > > entered 1 bar after the signal (same with the exits), > > > > > > > > > > Ed > > > > > > > > > > > > > > > > > > > > > > > > > ----- Original Message ----- > > > > > From: Michael White > > > > > To: [email protected] > > > > > Sent: Friday, August 24, 2007 11:37 AM > > > > > Subject: [amibroker] How do I backtest placing a restricted > > > > number of limit orders each night? > > > > > > > > > > > > > > > Can anyone help me model the following scenario? > > > > > > > > > > - Assume a portfolio is allowed to consist of some fixed > > number > > > > > of "slots" with equity equally divided among them (e.g. 10 > > > slots at > > > > > 10% of equity). > > > > > - Check for setup criteria at close of each day. > > > > > - Place next day limit buy orders for as many unfilled slots > > as > > > are > > > > > currently available (e.g. if already have 2 fills after day > > 1, > > > then > > > > > there are only 10 - 2 = 8 slots remaining for day 2, etc.). > > > > > - Buy orders are prioritized by a calculated value. > > > > > > > > > > My problem is that if I receive a setup for more symbols than > > I > > > > have > > > > > available slots (e.g. receive 20 setups but only have 8 > > > available > > > > > slots), my script will try to fill all 8 slots from the 20 > > > > > candidates, and the portfolio manager will correctly prevent > > me > > > > from > > > > > having more positions than allowed (e.g. no more than 10). > > > > > > > > > > However, in reality, I will only have placed as many limit > > > > orders as > > > > > I have available slots (e.g. 8 limit orders when 8 available > > > slots, > > > > > not limit orders for all 20 candidates, since I only have > > funds > > > to > > > > > cover placing 8 orders). > > > > > > > > > > What is happening is that my script is filling orders that I > > > would > > > > > not have placed! I need a way to indicate that despite 20 > > > setups, > > > > > only 8 limit orders were placed. > > > > > > > > > > Following is some script snippets. > > > > > > > > > > /* > > > > > * Assume an initial purse and brokerage fees ($0.01/share) > > > > > */ > > > > > SetOption("InitialEquity", 50000); > > > > > SetOption("CommissionMode", 3); > > > > > SetOption("CommissionAmount", 0.01); > > > > > > > > > > /* > > > > > * Carry fixed number of positions, dividing 100% of Equity > > > between > > > > > * them (based on previous bar's closing). > > > > > */ > > > > > PositionSize = -100/10; // Each position is 10% of equity > > > > > > > > > > SetOption("MaxOpenPositions", 10); // No more than 10 > > positions > > > > > SetOption("UsePrevBarEquityForPosSizing", True); > > > > > > > > > > /* > > > > > * We recognize the sale signal at the close of a bar and > > > execute the > > > > > * sale at the open of the next one, delay sale by 1 day. > > > > > */ > > > > > SetTradeDelays(0, 1, 0, 0); > > > > > > > > > > /* > > > > > * Trigger a Buy signal when previous bar meets the setup > > > > > * requirements AND this bar's Low has dropped to less than a > > > fixed > > > > > * percentage below the previous bar's close. This emulates > > > having > > > > > * placed a limit order the night before after having seen the > > > signal > > > > > * on that day's close. > > > > > */ > > > > > setup = ... // Some position entry logic. > > > > > PositionScore = ... // Some prioritization logic. > > > > > > > > > > BuyPrice = Ref(Close, -1) * 0.95; > > > > > Buy = Ref(setup, -1) AND Low <= BuyPrice; // Problem here!!! > > > > > > > > > > Sell = ... // Some sell logic. > > > > > > > > > > As indicated in my earlier comments. The problem is that in > > > > reality I > > > > > will not actually have placed orders for all candidates, but > > > rather > > > > > only for as many as there are available slots (e.g. 8). > > However, > > > > the > > > > > script will attempt to fill the available slots based on all > > > > > candidates (e.g. 20). > > > > > > > > > > How can I restrict the Buy assignment to only apply to the > > top X > > > > of Y > > > > > candidates based on priority (e.g. top 8 of 20 in example > > > above). > > > > > > > > > > Thanks in advance. > > > > > > > > > > > > > > >
