I don't see PositionSize being set. If not, then it
trades 100% of your account on one stock. You did set MaxOpenPositions, but
that is not enough. Since you have 10 MaxOpenPositions you would need to at
least set this to -10 (or 1000). Further, I think if you get, for example, 100
possible trades with 10 open positions, it's always going to trade from the top
unless you have some priority set via PositionScore. It appears you do not.
Question: How can these two statements both be True?
"The net profit just goes downhill like a truck"
"I am not running out of money, it shows about 600K
net profit…"
From HELP on PositionSize and partial on PositionScore. I have
highlighted a couple of things in red.
SETTING
UP POSITION SIZE
IMPORTANT: to enable
more than one symbol to be traded you have to add PositionSize
variable to your formula, so less than 100% of funds are invested in single
security:
PositionSize
= -25; // invest 25% of portfolio
equity in single trade
or
PositionSize
= 5000; // invest $5000 into
single trade
There is
a quite common way of setting both position size and maximum number
of open positions so equity is spread equally among trades:
PosQty
= 5; // You can define here how many open positions you want
SetOption("MaxOpenPositions", PosQty
);
PositionSize
= -100/PosQty; // invest 100% of portfolio equity divided
b
y max. position count
You can
also use more sophisticated position sizing methods. For example volatility-based
position sizing (Van Tharp-style):
PositionSize
= -2 * BuyPrice/(2*ATR(10));
That way
you are investing investing 2% of PORTFOLIO equity in the trade adjusted by
BuyPrice/2*ATR factor.
USING
POSITION SCORE
You can
use new PositionScore variable to decide which trades should be
entered if there are more entry signals on different securities than maximum
allowable number of open positions or available funds. In such case AmiBroker will use the absolute value of PositionScore variable to decide which trades are preferred. See
the code below. It implements simple MA crossover system, but with additional flavour
of preferring entering trades on symbols that have low RSI value. If more buy
signals occur than available cash/max. positions then the stock with lower RSI
will be preferred. You can watch selection process if you backtest with
"Detailed log" report mode turned on.
The code below
includes also the example how to find optimum number of simultaneously open
positions using new Optimization in Porfolio mode.
/*****
** REGULAR PORTFOLIO mode
** This sample optimization
** finds what is optimum num
b
er of positions open
simultaneously
**
****/
SetOption("InitialEquity",
20000 );
SetTradeDelays(1,1,1,1);
RoundLotSize = 1;
posqty
= Optimize("PosQty", 4, 1, 20, 1 );
SetOption("MaxOpenPositions", posqty);
//
desired position size is 100% portfolio equity
// divided
b
y PosQty positions
PositionSize
= -100/posqty;
// The
system is very simple...
// MA parameters could
b
e optimized too...
p1 = 10;
p2 = 22;
// simple MA crossover
Short=Cross( MA(C,p1) , MA(C,p2) );
Buy=Cross( MA(C,p2) , MA(C,p1) );
// always in the market
Sell=Short;
Cover=Buy;
// now
additional score
// that is used to rank equities
// when there are more ENTRY signals that availa
b
le
// positions/cash
PositionScore = 100-RSI(); // prefer stocks that
have low RSI;
--
Terry
-----Original Message-----
From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of
Roy Ewing
Sent: Wednesday, December 07, 2005 18:43
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: How to use "positionscore" in this formula??
Terry,
Thanks for the tips.
To clarify, I do get an "occasional" "B",
"C", and even a rare "E".
But it is clear when looking at the list that it keeps going back to
the beginning of the list at the "A's".
When I use POSITIONSCORE, the scoreing is working, ie I see a truly
"mixed" group of stocks. The net profit just goes
downhill like a truck.
Here are my settings:
SetOption("InitialEquity", 10000 );
SetOption("MaxopenPositions", 10);
SetOption("AllowPositionShrinking", True ); //No real impact
SetPositionSize(85,spsPercentOfEquity);
SetTradeDelays(1,1,0,0);//Do not use Short/Cover
ApplyStop(0,1,5,0,False,0);//Stop Loss at 5%
ApplyStop(2,2,3,0,False,0);//Trailing Stop at 3 Points
In AA I have all STOP SETTINGS DISABLED.
The effect of POSITIONSCORE on this is still puzzling.
No, I am not running out of money, it shows about 600K net profit
over the 5 years. Throw in positionscore = 100 + mfi() and I get
$458.00 net profit over 5 years. (12/06/2000 - 12/06/2005)
Does not make sense unless I am simply missing something simple...just
why I asked the group!!
Thanks for the tips.
Roy
--- In amibroker@xxxxxxxxxxxxxxx, "Terry"
<MagicTH@xxxx> wrote:
>
> I haven't followed your question closely so my advice may be off
base,
> but it seems PositionSize may be your problem. If there are many
> possible trades the backtester will take the trades until you've
spent
> all your money. Sounds like this is happening before you get out
of the
> A's
>
> Try tightening your PositionScore rules to create less (hopefully
> better) opportunities and set PositionSize to some smaller fixed
value
> like 1000 on a 100,000 portfolio (or -1 for 1% of portfolio) or
similar
> ideas to see if you get trades farther down the alphabet. If you
do, I
> was right :-)
>
> If you don't, well I can try harder.
> --
> Terry
> -----Original Message-----
> From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx]
On
> Behalf Of sebastiandanconia
> Sent: Wednesday, December 07, 2005 11:48
> To: amibroker@xxxxxxxxxxxxxxx
> Subject: [amibroker] Re: How to use "positionscore" in
this formula??
>
> A little more information, please.:) Does the system test
all
> the "A"s and then stop right before the
"B"s? Or is there a limit to
> the number of "A"s it tests, also? When you use
PositionScore, do
> you know that you're getting a full test on all the stocks, or
does
> the system still stop testing additional stocks at a certain
point,
> just farther into the alphabet?
>
> Not knowing all the details of what you're doing, here's a
trouble-
> shooting idea. Have you got a position-limit set in
Automatic
> Analysis or in the system code itself? Without PositionScore,
there
> would be no ranking of the stocks, they'd simply be bought in
> alphabetical order from your watchlist as the "buy"
signals click
> off. If there's a position limit set, the system would just
buy
> stocks up to the position limit and stop. After those stocks
got
> sold and a new "buy" signal comes up, the system will do
the same
> thing over again, starting with the "A"s. If there
are enough stocks
> meeting the criteria to fill the portfolio from within the
"A"s, your
> system would never get to the "B"s. Anyway, that's
just a place to
> start looking.
>
> Also, in my (our) experience, if a free system looks really great
> there's something wrong in the testing process, LOL! In
"Backtester
> Settings" under the "Trades" tab, see what the
settings are. My
> advice is to set them at "Open" with a 1-day trade
delay, otherwise
> your system is taking trades on the day of the signal and not the
> NEXT day when you'd actually make the trade. That will make
your
> system returns artificially (and unrealistically) high.
>
> Sorry if I've gone over stuff that you already know. Most of
my
> mistakes are simple ones that I just didn't think of.:)
>
>
> Luck,
>
> Sebastian
>
> --- In amibroker@xxxxxxxxxxxxxxx, "Roy Ewing"
<slickums76@xxxx> wrote:
> >
> > I found a very good "system" in the AFL Library
that produces very
> > good results for what I am trying to backtest. Here it
is, stripped
> > to the essentials:
> >
> > ---------------------------------------------------------------
> > // Formula Name: STD_STK Multi
> > // Author/Uploader: Willem Jan
> >
> > STK=Optimize ("StK" , 14, 2, 18, 2);
> > STD=Optimize ("StD" ,16, 2, 18, 2);
> > pds =Optimize("pds", 10,2,18,2);
> >
> > Sell= Cross (EMA (StochD (STD),pds),EMA( StochK (STK),pds));
> > Buy= Cross (EMA(StochK (STK),pds),EMA( StochD (STD),pds));
> >
> > Filter=Buy OR Sell;
> >
> > Buy=ExRem(Buy,Sell);
> > Sell=ExRem(Sell,Buy);
> >
> > /* My Added POSITIONSCORE */
> > PositionScore = 100 + MFI(); //Also many others tried!
> >
> >
----------------------------------------------------------------
> >
> > The problem is that w/o "POSITIONSCORE", I never
get out of
> the "A's"
> > during backtesting.
> >
> > I have had good results using "positionscore" with
other formulas,
> but
> > I have tried over 30 combinations of different indicators
here and
> the
> > results are MUCH WORSE. Not only a little, but a lot
worse.
> >
> > I can't believe the formula is so good that nothing will help
it,
> and
> > the fact that I can't get out of the "A's" in my
watchlist mean
> there
> > should be "better" trades.
> >
> > My watchlist is a list of "Optionable" stocks from
TC2005,
> backtesting
> > for 5 years (about 600 stocks).
> >
> > Any ideas?
> >
> > I have emailed the author, but his email bounced.
> >
> > Thanks.
> >
> > Roy
> >
>
>
>
>
>
>
>
>
> 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 other support material please check also:
> http://www.amibroker.com/support.html
>
>
> Yahoo! Groups Links
>
------------------------ Yahoo! Groups Sponsor
--------------------~-->
Try Online Currency Trading with GFT. Free 50K Demo. Trade
24 Hours. Commission-Free.
http://us.click.yahoo.com/RvFikB/9M2KAA/U1CZAA/GHeqlB/TM
--------------------------------------------------------------------~->
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 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/
<*> 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/