Which futures markets are tradeable in a small account?
Posted: Tue Dec 14, 2010 5:04 pm
Trying to trade a portfolio of futures markets in a small account
sometimes leads to frustration, since you'll often get entry signals
whose risk is greater than the (small) account can afford. In
Trading Blox simulations these signals are "filtered out" ,
that is, they are skipped. When an entry signal is filtered, it
is also logged into the Filtered Trades Log. Blox doesn't write
"This trade's risk is too large for your account" into the log
file, instead it writes "Order Quantity is less than 1" which means
the same thing but is less insulting. See Figure 1 below.
This may lead you to ask, "WITH MY TRADING SYSTEM(S), which futures
markets generate trades with the lowest risk per 1 contract?" In
other words, which futures contracts are the least likely to have
trades that get filtered out because Order Quantity is less than 1?
One very simple way to study this is shown in Figure 2. I've modified
the Fixed Fractional Money Manager so that it prints out the BuxPerCar
at every trade entry. BuxPerCar is the particular account size that,
for this trade, causes Blox to calculate a position size of exactly 1.00000
contracts.
We can insert this MM block into some trading systems, run them, and
see which futures markets require the largest BuxPerCar (boo!) and
which futures markets require the smallest BuxPerCar (yaay!). The
markets with the smallest BuxPerCar are the ones that are least likely
to get filtered out with Order Quantity less than 1. These are the
markets whose trades you would actually take, with a small account.
The "Sample Data" that comes with Trading Blox includes about
40 futures markets. I arbitrarily chose 20 of them by alphabetizing
the list and picking every 2nd symbol, giving a 20 market portfolio
that I called "Odd20". Running a trading system on the Odd20
portfolio produces an output file with one record per trade, showing
the symbol, entry date, and BuxPerCar of that entry signal.
One (easy) way to analyze the BuxPerCar data is to calculate an average
value of BuxPerCar for each futures market. Simply average together
all the BuxPerCar values for AussieDollar trades, then average together
all the BuxPerCar values for BritishPound trades, et cetera. For each
market in the Odd20 portfolio, calculate the average value of BuxPerCar
of all trades in that market.
Another way to analyze is to calculate the median, rather than the
average, value of BuxPerCar for each market. Then you get to smile
and say "Median is a Robust Statistic!" to an admiring audience.
I bet you can think of zillions of other calculations. The worst case?
(the max)? The best case? (the min)? and so forth.
In my little example below, I choose the 90th percentile value of
BuxPerCar, i.e., not quite the max but certainly greater than the
mean or median. VERY loosely speaking, I'm willing to disregard
the top 10% of BuxPerCars, so if those trades happen to get filtered
out, I don't mind so much. If you think this is ridiculous overkill
or analysis paralysis, by all means use another calculation,
whichever you please.
I decided that what was most important to me was the RANKING of the
BuxPerCar values. In other words, which market has the lowest
BuxPerCar compared to all the other markets? Rank that market #1.
Which Market has the 2nd lowest BuxPerCar? Rank that market #2.
Which has the 3rd lowest? Rank it #3, and so forth. And so that
is what I did.
I computed the 90th pecentile BuxPerCar values, sorted the markets
by 90%_BperC, and ranked. The results are shown in Figure 3 below.
I ran the Odd20 portfolio on three different trading systems and
ranked the markets on each one. Then I gathered the rankings into
a combined table and, for each market, averaged the rankings of
that market across all 3 systems. (You can see that the rankings
do fluctuate a bit; notice that Wheat was ranked 13th smallest
BuxPerCar on system #1 but 6th smallest on system #3.)
Not surprisingly, Eurodollars finished at the top of the combined
rankings. ED is the least likely market to generate trades that
get filtered out; BuxPerCar for Eurodollars is lowest of them all.
Also not surprisingly, Natural Gas finished at the bottom. It has
the biggest BuxPerCar, and is most likely to generate trades that
get filtered out. Small account traders are much more likely to
have enough equity to take their system's entry signals in ED,
than they are to have enough money to take entry signals in NG.
(sigh)
You may enjoy performing a similar analysis on a different portfolio of
futures markets, on your own choices of systems. Maybe you are interested
in Gold, or the eMini S&P, which weren't in my Odd20 portfolio. Maybe
you are interested in markets outside the USA (the Blox sample data
has only US markets). Maybe you trade systems on 60 minute bars, so you
are interested in markets for whom you've got intraday data. Maybe you
trade weekly bars, in which case you'd want to run the MM code using
your weekly systems with weekly data, etc.
Feel free to run whichever experiments you like, on whatever instruments
you prefer, using whichever trading systems are important to you.
+SLUGGO+
Of course, there are more than one ways to skin this cat. As suggested
above, you could write the BuxPerCar values out to a file, and then post
process the file with Excel or some kind of one-off script in awk or Python
or Perl. Or you could do the entire calculation within the backtest itself:
store the BuxPerCars in memory (IPV autoindexed series in Blox) and
when the simulation has completed ("After Test" script in Blox), loop over
the instruments, calculating the average or mean or 90% point of
BuxPerCars for each instrument, and finally, sort them to get the
rankings.
sometimes leads to frustration, since you'll often get entry signals
whose risk is greater than the (small) account can afford. In
Trading Blox simulations these signals are "filtered out" ,
that is, they are skipped. When an entry signal is filtered, it
is also logged into the Filtered Trades Log. Blox doesn't write
"This trade's risk is too large for your account" into the log
file, instead it writes "Order Quantity is less than 1" which means
the same thing but is less insulting. See Figure 1 below.
This may lead you to ask, "WITH MY TRADING SYSTEM(S), which futures
markets generate trades with the lowest risk per 1 contract?" In
other words, which futures contracts are the least likely to have
trades that get filtered out because Order Quantity is less than 1?
One very simple way to study this is shown in Figure 2. I've modified
the Fixed Fractional Money Manager so that it prints out the BuxPerCar
at every trade entry. BuxPerCar is the particular account size that,
for this trade, causes Blox to calculate a position size of exactly 1.00000
contracts.
We can insert this MM block into some trading systems, run them, and
see which futures markets require the largest BuxPerCar (boo!) and
which futures markets require the smallest BuxPerCar (yaay!). The
markets with the smallest BuxPerCar are the ones that are least likely
to get filtered out with Order Quantity less than 1. These are the
markets whose trades you would actually take, with a small account.
The "Sample Data" that comes with Trading Blox includes about
40 futures markets. I arbitrarily chose 20 of them by alphabetizing
the list and picking every 2nd symbol, giving a 20 market portfolio
that I called "Odd20". Running a trading system on the Odd20
portfolio produces an output file with one record per trade, showing
the symbol, entry date, and BuxPerCar of that entry signal.
One (easy) way to analyze the BuxPerCar data is to calculate an average
value of BuxPerCar for each futures market. Simply average together
all the BuxPerCar values for AussieDollar trades, then average together
all the BuxPerCar values for BritishPound trades, et cetera. For each
market in the Odd20 portfolio, calculate the average value of BuxPerCar
of all trades in that market.
Another way to analyze is to calculate the median, rather than the
average, value of BuxPerCar for each market. Then you get to smile
and say "Median is a Robust Statistic!" to an admiring audience.
I bet you can think of zillions of other calculations. The worst case?
(the max)? The best case? (the min)? and so forth.
In my little example below, I choose the 90th percentile value of
BuxPerCar, i.e., not quite the max but certainly greater than the
mean or median. VERY loosely speaking, I'm willing to disregard
the top 10% of BuxPerCars, so if those trades happen to get filtered
out, I don't mind so much. If you think this is ridiculous overkill
or analysis paralysis, by all means use another calculation,
whichever you please.
I decided that what was most important to me was the RANKING of the
BuxPerCar values. In other words, which market has the lowest
BuxPerCar compared to all the other markets? Rank that market #1.
Which Market has the 2nd lowest BuxPerCar? Rank that market #2.
Which has the 3rd lowest? Rank it #3, and so forth. And so that
is what I did.
I computed the 90th pecentile BuxPerCar values, sorted the markets
by 90%_BperC, and ranked. The results are shown in Figure 3 below.
I ran the Odd20 portfolio on three different trading systems and
ranked the markets on each one. Then I gathered the rankings into
a combined table and, for each market, averaged the rankings of
that market across all 3 systems. (You can see that the rankings
do fluctuate a bit; notice that Wheat was ranked 13th smallest
BuxPerCar on system #1 but 6th smallest on system #3.)
Not surprisingly, Eurodollars finished at the top of the combined
rankings. ED is the least likely market to generate trades that
get filtered out; BuxPerCar for Eurodollars is lowest of them all.
Also not surprisingly, Natural Gas finished at the bottom. It has
the biggest BuxPerCar, and is most likely to generate trades that
get filtered out. Small account traders are much more likely to
have enough equity to take their system's entry signals in ED,
than they are to have enough money to take entry signals in NG.
(sigh)
You may enjoy performing a similar analysis on a different portfolio of
futures markets, on your own choices of systems. Maybe you are interested
in Gold, or the eMini S&P, which weren't in my Odd20 portfolio. Maybe
you are interested in markets outside the USA (the Blox sample data
has only US markets). Maybe you trade systems on 60 minute bars, so you
are interested in markets for whom you've got intraday data. Maybe you
trade weekly bars, in which case you'd want to run the MM code using
your weekly systems with weekly data, etc.
Feel free to run whichever experiments you like, on whatever instruments
you prefer, using whichever trading systems are important to you.
+SLUGGO+
Of course, there are more than one ways to skin this cat. As suggested
above, you could write the BuxPerCar values out to a file, and then post
process the file with Excel or some kind of one-off script in awk or Python
or Perl. Or you could do the entire calculation within the backtest itself:
store the BuxPerCars in memory (IPV autoindexed series in Blox) and
when the simulation has completed ("After Test" script in Blox), loop over
the instruments, calculating the average or mean or 90% point of
BuxPerCars for each instrument, and finally, sort them to get the
rankings.