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

[amibroker] Monte Carlo analysis for trading systems



PureBytes Links

Trading Reference Links

Greetings all --

The posting was originally made by me to Aussie Stock Forums on
February 2, 2009.  But in light of recent discussions, I'll cross post
it here.

Some of my thoughts on using Monte Carlo techniques with trading systems.

First, some background.

Monte Carlo analysis is the application of repeated random sampling
done in order to learn the characteristics of the process being studied.

Monte Carlo analysis is particularly useful when closed form solutions
to the process are not available, or are too expensive to carry out.
Even in cases when a formula or algorithm can supply the information
desired, using Monte Carlo analysis can often be used.

Here is an example of Monte Carlo analysis. Assume that a student is
unaware of the formula that relates the area of a circle to its
diameter. A Monte Carlo solution is to conceptually draw a square with
sides each one unit in length on a graph, with the origin at the lower
left corner. The horizontal side goes from 0.0 to 1.0 along the x-axis
and the vertical side goes from 0.0 to 1.0 along the y-axis. Draw a
circle with a diameter of one unit inside the square. The center of
the circle will be at coordinates 0.5, 0.5. The Monte Carlo process to
compute the area of the circle is to generate many random points
inside the square (each point a pair of number with the values of the
x-coordinate and y-coordinate being drawn from a uniform distribution
between 0.0 and 0.999999), then count the number of those points that
are also inside the circle. The ratio between the number of points
inside the circle to the number of points drawn gives an estimate of
the constant pi. Running this experiment several times, each using
many random points, allows application of statistical analysis
techniques to estimate the value of pi to within some probable
uncertainty. The process being studied in that example is stationary.
The relationship between the area of the circle and the area of the
square is always the same.

When we are developing trading systems, the ultimate question we are
most often asking is "What is the future performance of this trading
system?" Recall that the measure of goodness of a trading system is
your own personal (or corporate) choice. Some people want highest
compounded annual return with little regard for drawdown. Others value
systems that have low drawdown, or infrequent trading, or whatever
else may be important. But, in all cases, the goal is to have the
trading system be profitable. Assume that many of us are trading a
single issue over a period of several years, and that the price per
share at the end of that period is the same as it was at the beginning
of the period, with significant price variations in between. If we
ignore frictional costs -- the bid - ask spread of the market maker
and the commission of the broker -- we are playing a zero-sum game.
Those of us who make money are taking it from those who lose money.
If, instead of the final price being the same as the beginning price,
the final price is higher, then the price has an upward bias and more
money is made than lost. This is when we all get to claim it was our
cleverness that made us money. If the final price is lower, the price
has a downward bias and more money is lost than made.

The price data for the period we are trading has two components. One
is the information contained in the data that represents the reason
the price changes -- the signal component. The other is everything we
cannot identify profitably -- the noise component. Note that there may
be two (or more) signal components. Say one is a long term trend in
profitability of the company, and the price follows profitability. Say
the other is cyclic price behavior that goes through two complete
cycles every month for some unknown but persistent reason. In every
financial price series, there is always the random price variation
that is noise. The historical price data that we see consists, in this
case, of trend plus cycle plus noise. Each component has a strength
that can be measured. If the signal is strong enough, relative to the
noise, our trading system can identify the signal and issue buy and
sell signals to us. If our trading system has coded into it logic that
only recognizes changes in trend, the cycle component is noise as seen
by that system. That is -- anything that a trading system does not
identify itself, even though it may have strong signal characteristics
when analyzed in other ways, is noise.

Over the recent decades, analysis of financial data has progressed
from simple techniques applied by a few people in a few markets using
proprietary tools to sophisticated techniques applied by many people
in many markets using tools that are widely available at low cost. The
techniques used successfully by Richard Donchian from the 1930s, and
Richard Dennis and William Eckhart in the 1980s, were simple. To the
extent that the markets they traded did not have strong trends, every
profitable trade they made was at the expense of another trader.
Today, every person hoping to have a profitable career in trading
learns about techniques that did work at one time. They are well
documented and are often included in the trading system examples when
a trading system development platform is installed.

Assume that a data series is studied over a given date range. Using
hindsight, we can determine the beginning price and the ending price.
Continuing with hindsight, we can develop a trading system that
recognizes the signal component -- some characteristic about the data
series that anticipates and signals profitable trades. By trying many
combinations of logic and parameter values, we will eventually find a
system that is profitable for the date range analyzed. If we are lucky
or clever, the system recognizes the signal portion of the data. Or,
the system may have simply been fit to the noise. The data that was
used to develop the system is called the in-sample data. If the system
does recognize the signal and a few of us trade that system, while all
the rest of the traders make random trades, those of us who trade the
system will make a profit. On average, the rest lose. As more and more
people join us trading the system, each of us earns a lower profit. In
order to continue trading profitably, we must be earlier to recognize
the signal, or develop better signal recognition logic and trade
different signals or lower strength signals. By the time the date
range we have studied has passed, most of the profit that could have
been taken out of that price series using that system has been taken.
Perhaps the future data will continue to carry the same signal in the
same strength and some traders will make profitable trades using their
techniques, or perhaps that signal changes, or perhaps so many traders
are watching that system that the per-trade profit does not cover
frictional costs.

Data that was not used during the development of the system is called
out-of-sample data. But -- important point -- testing the
profitability of a trading system that was developed using recent data
on older data is guaranteed to over-estimate the profitability of the
trading system.

Financial data is not only time-series data, but it is also
non-stationary. There are many reasons related to profitability of
companies and cyclic behavior of economies to explain why the data is
non-stationary. But -- another important point -- every profitable
trade made increases the degree to which the data is non-stationary.
There is very little reason to expect that future behavior and
profitability of well known trading systems will be the same as past
behavior.

Which brings me to several key points in trading systems development.

1. Use whatever data you want to to develop your systems. All of the
data that is used to make decisions about the logic and operation of
the system is in-sample data. When the system developer -- that is you
and me -- is satisfied that the system might be profitable, that
conclusion was reached after thorough and extensive manipulation of
the trading logic until it fits the data. The in-sample results are
good -- they are Always good -- we do not stop fooling with the system
until they are good. In-sample results have no value in predicting the
future performance of a trading system. None! It does not matter
whether the in-sample run results in three trades, or 30, or 30,000.
In-sample results have no value in predicting the future performance
of a trading system. Statistics gathered from in-sample results have
no relationship to statistics that will be gathered from trading. None!

The follow-on point, which relates to Monte Carlo analysis, is that
rearranging the in-sample trades gives no insight into the future
characteristics of the system. Yes, you can see the effect of taking
the trades in different orders. But why bother? They are still
in-sample results and still have no value.

The Only way to determine the future performance of a trading system
is to use it on data that it has never seen before. Data that has not
been used to develop the system is out-of-sample data.

2. As a corollary to my comments above, that out-of-sample data Must
be more recent that the in-sample data. The results of using earlier
out-of-sample data are almost guaranteed to be better than the results
of using more recent out-of-sample data. Consequently, techniques
known as boot-strap or jack-knife out-of-sample testing are
inappropriate for testing financial trading systems.

So, when is Monte Carlo analysis useful in trading system development?

1. During trading system development. It may be possible to test the
robustness of the system by making small changes in the values of
parameters. This can be done by making a series of in-sample test
runs, each run using the central value of the parameter (such as the
length of a moving average) adjusted by a random amount. The values of
the parameters can be chosen using Monte Carlo methods. Note that this
does not guarantee that the system that works with a wide range of
values over the in-sample period will be profitable out-of-sample, but
it does help discard candidate systems that are unstable due to
selection of specific parameter values.

Note that this technique is not appropriate for all parameters. For
example, a parameter may take on a limited set of values, each of
which selects a specific logic. Such parameters, associated with what
are sometimes called state variables, are only meaningful for a
limited set of values.

2. During trading system development. It may be possible to test the
robustness of the system by making small changes in the data. Adding a
known amount of noise may help quantify the signal to noise ratio.
When done over many runs, it may reduce (smooth out) the individual
noise components and help isolate the signal components.

3. During trading system development. It may be possible to
investigate the effect of having more opportunities to trade than
resources to trade. If the trading system has all of the following
conditions:
A. A large number of signals are generated at exactly the same time.
For example, using end-of-day data, 15 issues appear on the Buy list.
B. The entry conditions are identical. For example, all the issues are
to be purchased at the market on the open. If, instead, the entries
are made off limit or stop orders, these can and should be resolved
using intra-day data -- as they would be in real time trading.
C. The number of Buys is greater than can be taken with the available
funds. For example, you only have enough money to buy 5 of the 15.

If your trading system development platform provides a method for
breaking ties, use it. For example, you may be able to calculate a
reward-to-risk value for each of the potential trades. Take those
trades that offer the best ratio. AmiBroker, for example, allows the
developer to include logic to compute what is known as PositionScore.
Trades that are otherwise tied will be taken in order of PositionScore
for as long as there are sufficient funds.

Alternatively, Monte Carlo methods allow you to test random selection
of issues to trade. My feeling is that very few traders will make a
truly random selection of which issue to buy from the long list. I
recommend quantifying the selection process and incorporating it into
the trading system logic.

4. During trading system validation. After the trading system has been
developed using the in-sample data, it is tested on out-of-sample
data. Preferably there is exactly one test, followed by a decision to
either trade the system or start over. Every time the out-of-sample
results are examined and any modification is made to the trading
system based on those results, that previously out-of-sample data has
become in-sample data. It takes very few (often just one will do it)
peeks at the out-of-sample results followed by trading system
modification to contaminate the out-of-sampleness and destroy the
predictive value of the out-of-sample analysis.

One possibly valuable technique that will help you decide whether to
trade a system or start over is a Monte Carlo analysis of the
Out-of-sample results. The technique is a reordering of trades,
followed by generation of trade statistics and equity curves that
would have resulted from each trade sequence. What this provides is a
range of results that might have been achieved. Note that this
technique cannot be applied to all trading systems without knowledge
of how the system works. If the logic of the system makes use of
earlier results, such as equity curve analysis or sequence of winning
or losing trades, then rearranging the trades will result in trade
sequences that could never have happened and the analysis is
misleading and not useful. Also note that most of the results produced
by the Monte Carol analysis could also be developed from techniques of
probability and statistics without using Monte Carlo techniques --
runs of wins and losses, distribution of drawdown, and so forth.

In summary --

Monte Carlo analysis can be useful in trading system development. But
only in those cases described in items 1, 2, 3, and 4 above.

Rearranging in-sample trades has no value.

Obtaining meaningful results from Monte Carlo techniques requires
large numbers -- thousands -- of additional test runs.

If you decide to apply Monte Carlo techniques, I recommend that they
be applied sparingly, primarily to test robustness of a likely trading
system as in numbers 1 and 2 above, not in the early development stages.

On the other hand -----

What is tremendously useful in trading system development is automated
walk-forward testing. I believe that is the Only way to answer the
question "How can I gain confidence that my trading system will be
profitable when traded?" But that is the subject of another posting.

Thanks for listening,
Howard



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

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

*********************
TO GET TECHNICAL 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/