Which futures markets are tradeable in a small account?

Discussions about the testing and simulation of mechanical trading systems using historical data and other methods. Trading Blox Customers should post Trading Blox specific questions in the Customer Support forum.
Post Reply
Roundtable Knight
Roundtable Knight
Posts: 2987
Joined: Fri Jun 11, 2004 2:50 pm

Which futures markets are tradeable in a small account?

Post by sluggo » 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

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.

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.


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
Figure 3.  Combined table with rankings from all three systems
Figure 3. Combined table with rankings from all three systems
avg_rank.png (20.86 KiB) Viewed 2628 times
Figure 2.  modified Fixed Fractional money manager
Figure 2. modified Fixed Fractional money manager
FF_print_buxpercar.png (37.31 KiB) Viewed 2630 times
Figure 1.  Trading Blox "filtered trades log" telling you, in a nice way, the account is too small
Figure 1. Trading Blox "filtered trades log" telling you, in a nice way, the account is too small
filter_log.png (7.61 KiB) Viewed 2628 times

Roundtable Knight
Roundtable Knight
Posts: 2987
Joined: Fri Jun 11, 2004 2:50 pm

Post by sluggo » Wed Dec 15, 2010 10:16 am

An email buddy inquires, "Why bother with rankings? Why not simply sort based on BuxPerCar values?"

A good question. My answer is: because it's easy to combine rankings from different systems, whereas it is difficult/impossible to combine BuxPerCar values from different systems.

Different systems have different risk characteristics (and BuxPerCar is one way of measuring risk). Some systems are nimble little dragonflies, hopping into and out of trades quickly, with an average trade duration of 5 days or less. (The vendor-sold system "Short Clips" is an example). Other systems are lumbering, armor plated behemoths which plod along slowly and deliberately as they trade the Very Long Term trend. (Points C, X, and Z in the graphs of (THIS) post are examples).

A quick in-and-out system has a much tighter stop than an ultra long term system; thus the BuxPerCar number for the dragonfly is much smaller than the BuxPerCar for the lumbering stegosaurus. How can you combine the BuxPerCars for two systems whose stops differ by a factor of four? I decided, you can't. (More precisely, I decided it's dumb to try).

System1 in my little example places its initial stop at 1.4 ATRs from entry. System3 places its initial stop at 6 ATRs from entry. The BuxPerCars for these two systems are wildly divergent.

So, I used rankings. It's possible, and it's reasonable, to calculate an average ranking value across systems of wildly divergent stop distances. On the other hand, I personally don't think it's reasonable to calculate an average BuxPerCar.

Post Reply