Saturday, December 24, 2011

Portfolio Performance - November 2011

November 2011
# of Entries...........5
# of Exits.............2


Portfolio's ROI......+ 0.66%
Market's ROI.........- 0.51%

Another less than stellar month for the portfolio. Even though we sneaked in a win over the was not enough to write home about.

What this portfolio needs more than anything is a big winner to close out the year. But, time is definitely running out on that option.

That's probably the most difficult part of trading the system in the back half of 2011 - the lack of big winners. The long-only system had the uncanny ability to miss almost all of the huge upside moves and catch most of the downside ones. Despite its penchant for missing the upside - the portfolio has hung in there and weathered a very volatile market environment.

I will add the following goals for 2012:

  • Explore a market direction filter for the system. I've exhausted many of the common ones already. But, believe there may be some value in a breadth reading of all market instruments. Possibly like the Breadth Ratio but instead of volume using ATR. Similar to the Vortex Ratio. Another idea is to utilize the correlation reading of all market instruments to ascertain the investing environment.

  • Determine if certain sectors are good or bad for the system. Over the past year I have observed the Pharmaceuticals and Oil & Gas sectors have not faired so well with the system.

  • I still have not analyzed earning announcements and their possible impact on the system. This is a must to-do for 2012.

That's it from the cold Midwest - where I'll spend the day smoking 2 Texas Dr. Pepper briskets. We'll use one of them for Tex-Mex tonight and the other for BBQ sandwiches tomorrow. Can't wait.

I wish everyone a very Merry Christmas and a Happy New Year!

Later Trades,


Thursday, November 24, 2011

Portfolio Performance - October 2011

October 2011
# of Entries...........1
# of Exits.............5
Portfolio's ROI......+ 0.27%
Market's ROI.........+10.77%

October was just plain ugly for the portfolio. Didn't participate any in the market's advance. When the system did try to jump got you can see from the 20% win ratio. Really frustrating.

I'm afraid November so far is much the same. As you will see when those numbers are reported.

Times like these are the most difficult for a system trader. You're following all your rules. You're doing all you're supposed to do. But, your portfolio is not showing any results. That's what tough about this game. It reminds me of the following quote...
"It's not the first guy out of the water, or the first one done with the run or the obstacle course. It's the guys who wants it bad enough and have the mental toughness to simply make it through. The ones who never give up." -- What it takes to be a Navy Seal by a retired Navy Seal.

No, not comparing system traders to Navy Seals. But, I do think a lot of what makes system traders successful is never giving up. Having the mental toughness to simply make it through times like this.

Speaking of trading in tough times...I found the paper shared by Mebane Faber to be fascinating. Basically, investing in low-beta stocks are similar in profile to selling puts. Earn a premium for taking all of the downside risk while not participating fully in market rallies. Lots of trading gems in that paper.

Okay, on to other things. I have been busy lately with releasing a few Python modules over on GitHub. The first one covers some basic statistical functions. Useful when you want a series of 50-day simple moving averages or the Welles Wilder moving averages to chart. Check it out here:

The other one covers pretty formatting of data. This package is very alpha - so could change at any time. But, this one is useful when you want to print a list of Python lists or dictionaries based on various formatting options. Check it out here:

Finally, hope everyone enjoyed a very Happy Thanksgiving. Mine was good but do miss home.

Later Trades,


Saturday, October 08, 2011

Portfolio Performance - September 2011

July 2011
# of Entries...........6
# of Exits.............9
Portfolio's ROI.......+0.76%
Market's ROI..........-2.15%

August 2011
# of Entries...........0
# of Exits.............1
Portfolio's ROI.......-3.40%
Market's ROI..........-5.68%

September 2011
# of Entries..........14
# of Exits.............9
Portfolio's ROI.......-2.13%
Market's ROI..........-7.18%

What a crazy 3 months this has been in the market. Despite the crazy market; the system performed better than I expected. I've only interceded once in the past 3 months. Going to cash just prior to August 2nd's debt ceiling deadline. The reason for interceding? I knew the system had never been tested over such an event and was not willing to risk real money on an event as crazy as that one.

In hindsight, interceding was a bad decision. August would have been a profitable month for the system. But, August would also have been an extremely volatile month for the portfolio. So, I lost money in order to sleep better. That's the difficulty in trading systems. We feel the fear...they do not.

Later Trades,


Sunday, July 17, 2011

Portfolio Performance - June 2011

# of Entries..........12
# of Exits............10
Portfolio's ROI.......-7.72%
Market's ROI..........-1.83%

June felt like a death by a thousand paper cuts. The month of June stands as the highest system entries, lowest win ratio, and largest monthly drawdown. It's always difficult to continue taking trades when your system is performing badly. Especially, when you can clearly see why the market is a mess for your system.

The slippery slope is to stop trading until the traffic clears. Do that and sure enough you will miss the turn. I have entertained in the past a more systematic trading halt. Stop taking trades for the month when some trading metric hits a filter. The trading metric could be a win ratio, profit factor, expectancy, drawdown, and a host of others.

Problem is: I have never found a way to improve systems by trading the equity curve outside of Anti-martingale fixed-fractional position-sizing. Even when the system exhibits a high trade dependency. That's not to say it isn't something to explore for your systems. Especially, since improving a system is dependent upon your own definition of improvement.

No, experiencing a big drawdown is the toughest thing a system trader will encounter. Mostly because there's nothing you can do about it but sit on your programming hands, continue taking entries despite how you feel, and patiently wait it out.

Later Trades,


Tuesday, July 12, 2011

Monk Traders

Michael Martin wrote an interesting post on the importance of fundamentals in trading. Its a good post with solid points. Especially, the part about using your knowledge of the fundamentals of the market in build trading systems.

What struck a chord was the author's take on system traders. Now, I understand who Martin was really writing about. He was referring to the traders who take the easy way out. Those traders who build Rube Goldberg machines rather than a trading system.

But, there are system traders out there who spent time in the trenches learning as much as they could about the markets they trade. Only to give up that knowledge in order to trade the systems they build.

I had to give these trading monks a plug...and comment on Martin's post.

Martin edited my comment; making me sound smarter than I am. Thanks. Below is the unedited but less eloquent version:
You're likely right...the title/moniker of the "expert" systematized trend follower could be their way to mask insecurity about their ignorance of fundamentals. But, let me present another side...

I agree with your point that understanding fundamentals are important; even for a systematic trader. But, believe there are levels of system trading that have to be considered.

If a person wants to become a non-system trader; then yes...long years of study of both technical and fundamental.

If a person wants to become a system trader; then yes...long years of study of both technical and fundamental.

Both sets will need to trade and gain experience putting their knowledge to use and more importantly the timing of that knowledge. The system trader is really an automator in this case. Taking intuitive rules the non-system trader has and standardizing them into something the computer can understand and spit out. From there, the system trader can evaluate the results and as you mention review the fundamentals. Trade based on the combination. Many system traders fall into this category.

There is another level of system trading. Requiring an additional set of skills in addition to the technical and fundamental.

These system traders must forego all their hard-earned knowledge and allow the system to work as designed once placed into production. They cannot care that Sugar fundamentals are aligning with price. They are indeed working on the average expectation of all their trades. And cannot get caught on the slippery slope of asking "why" they've lost money on the trade.

So, there is a remote chance you were talking with this level of system trader. Whose title/moniker wasn't created to mask insecurity. But, to shield themselves from things which make trading the system hard. In some ways, these system traders are monks. Having to purge all trading belongings and follow only the rules given by their system.

But, I did mention it being a remote chance you were talking with this level of system trader. Anyone in this category would not use the word "expert" in their title. The longer I trade this way the less of an expert I become.

Look forward to your book. Of course, only in designing my systems.

Later Trades,


Thursday, June 23, 2011

Portfolio Performance - May 2011

# of Entries...........8
# of Exits.............9
Portfolio's ROI.......+3.44%
Market's ROI..........-1.35%

Later Trades,


Sunday, May 08, 2011

Portfolio Performance - Apr 2011

# of Entries...........7
# of Exits.............6
Portfolio's ROI.......+0.89%
Market's ROI..........+2.85%

April breaks the portfolio's winning streak over the market. Wasn't a bad month for the portfolio; just couldn't get enough trades due to the earnings season.

April also marked a milestone birthday for yours truly. The family made it real special by shipping in live crawfish direct from Louisiana.

Ca C'est Bon!


Tuesday, April 12, 2011

Portfolio Performance - Mar 2011

# of Entries...........8
# of Exits............10

Portfolio's ROI.......+3.38%
Market's ROI..........-0.10%

One of the challenges of trading this system is signal selection. The system generates more signals than money available. A ranking algorithm aids in signal selection and brings the portfolio closer to the signals the simulation would have taken.

Over time, I have developed a negative bias towards certain signals. By skipping these outliers; I am distancing my portfolio's results from the simulation's results. And I'm struggling with this. What would be ideal is to identify the quantitative nature of these outliers and add to the system's rules. Of course, after rigorous testing. Until then, I'm left with this uneasy balance between trading the system and using bias in my signal selection process.

Case in point: several of the signals lately (as of 04/12/11) could possibly be held during earnings announcements. I try to avoid holding a stock over its earnings announcement. Yet, the system's simulation tests did not contain this rule set and continued to produce excellent returns overall. Testing my bias is difficult due to the various earnings dates involved. Foregoing earnings season all together in simulations is not an option due to the cash drag effect. One solution to this problem is to collect enough walk-forward data points and manually test the effects of earnings announcements on returns. But, this is a simple example of how a trading bias can manifest in trading your system much differently than your trading system's simulation.

Later Trades,


Saturday, March 12, 2011

Portfolio Performance for Feb 2011

# of Entries...........8
# of Exits.............7

Portfolio's ROI........5.82%
Market's ROI...........3.20%

February was a good month for the market and portfolio. The portfolio edging out the market's return for another month.

Going to go on a bit of a rant here. Something that has bothered me a bit in the trading world for years -- trading psychology. Trading psychology is a market unto itself. Books, blogs, websites, all kinds of info to help you become a better trader. Most of it? The wrong focus.

Why? The crux of the trading psychology stance is -- don't trade a system (even if its profitable) if it doesn't match your personality. It's all about finding the right match. Like those eHarmony commercials.

The trading world wants to embrace a yoga or martial arts viewpoint on trading success. Reminds me how people judged martial arts disciplines prior to UFC coming to light. In fact, I wrote about trading and fighting in a post almost 6 years back here.

Before there was a venue for everyone to see which fighting styles worked...students were inundated with rhetoric, philosophy, etc. You had all these theories about what worked in a real fight. But, nobody was fighting. Just talking and practicing strict rigid disciplines. Then the UFC came along and all these martials arts disciplines came together and actually fought. The winner shocking everyone. All these wonderful well thought-out disciplines just failed. All the finding one's chi and structured katas just failed. Turns've got to fight. It isn't about finding yourself. Isn't about finding your chi. It's about fighting your opponent. It's about taking advantage of your strengths and their weaknesses. See this video for the story behind UFC and the 1st winner of UFC. Please shows real fighting. And be sure to see Ken Shamrock's interview around 6:18 mark. Along with Joe Rogan's comments around 9:24.

That's why I wince every time I hear or read about finding a trading system that fits your personality. Or there's only one way of trading - as we often hear with trend following. That's a religion all unto itself.

Gracie took advantage of his amazing ground game and everyone's lack of to win. But, you cannot stop there. You have to adapt...because your competitor's adapt. The market adapts. The UFC adapts. There is no holy grail. No one way to do things. No black and white. It's all gray. It's all changing...all the time. Cause the participant's are learning all the time.

It's not about finding a system your comfortable with. It's about getting comfortable with a winning system.

Despite the religion behind trend-following...I think it's one of the best places to learn how to fight. It teaches you how to get comfortable on your back when the market is clearly kicking your tail. It limits the number of decisions you have to make at a time when your trading instincts and intellect are screaming to run away. Teaching you how to get comfortable with being uncomfortable in trading.

So, observe the markets, find profitable rules, and trade them. Despite how uncomfortable you find yourself trading them. Cause it's not about Charlie Sheen so eloquently is about winning.

Later Trades,


Sunday, February 06, 2011

Portfolio Performance for January 2011

The portfolio finished the month up 2.82%. Not a particularly stellar month for the portfolio; but I'll take a win over the market anytime.

# of Entries.......8
# of Exits.........7

As you can see with the above entries & exits; still not much activity for the portfolio in January. I'm hoping this next month brings more action to the table.

On the development side of the house; I hit a snag with the simulation engine's backend database architecture. So, I've spent a few weeks performance testing the database components. I believe I've got all the performance issues squared away and plan to get back on track with the conversion over the next few weeks.

Later Trades,


Sunday, January 16, 2011

Portfolio Performance for December 2010

Market did great in December (+6.53%); while the portfolio was stuck in neutral (-0.36%).

The majority of positions just didn't budge. As a result, most positions were held to term limit. Which dropped the monthly number of trades down a bit when compared to average.

# of Trades for Dec 2010:
# of Long Entries........7
# of Long Exits.......... 7

Goal for January is to start migrating the backtesting engine from the old database design to the hopefully new & improved version.

As a side note, I've added a new movie to my all-time favorites list: The Social Network. A must-see if you've ever hacked a few lines here or there.

Later Trades,


Collecting Max Items in Python

Lately, I've needed a way to collect a running list of the top X values and their associated items in Python. This is useful if you'd like to know such things as:
  • Top 100 price gainers in your price series database;
  • Top 10 most volatile stocks in your price series database;
  • Top 5 longest running batch jobs in your operations arena;
  • Any many more...
Here's the MaxItems code to do the job:
import heapq

class MaxItems(object):
    Caches the max X items of whatever you're analyzing and
    returns a list containing only those max X values and
    associated items.
    def __init__(self, size):
        self.size = size
        self._recs = []

    def push(self, value, items):
        if len(self._recs) < self.size:
            heapq.heappush(self._recs, (value, items))

            minitem = heapq.heappushpop(self._recs, (value, items))

    def items(self):
        return heapq.nlargest(self.size, self._recs)
Example call and results:
pricegains = []
pricegains.append({'symbol':'GOOG', 'gain':234.0})
pricegains.append({'symbol':'YHOO', 'gain':124.0})
pricegains.append({'symbol':'IBM', 'gain':1242.0})
pricegains.append({'symbol':'GE', 'gain':1800.0})
pricegains.append({'symbol':'ENE', 'gain':0.0})
pricegains.append({'symbol':'KREM', 'gain':12.0})
maxitems = MaxItems(3)

for row in pricegains:
    maxitems.push(row['gain'], row)

print maxitems.items()

Results of call:
(1800.0, {'symbol': 'GE', 'gain': 1800.0})
(1242.0, {'symbol': 'IBM', 'gain': 1242.0})
(234.0, {'symbol': 'GOOG', 'gain': 234.0})
The heapq module works nicely in accomplishing the task. What's ironic is Python's heapq module implements the min-heap algorithm which works out nicely and efficiently in determining the maximum values over a list. But, does not work out so efficiently for determining the minimum values over a list.

I'll cover the MinItems class in another post. But, to give you a hint of what does work in collecting the minimum values over a list is one of the alternatives I explored in building the MaxItems class...

Alternative yet Inefficient version of MaxItems:
import bisect

class MaxItems2(object):
    Caches the max X items of whatever you're analyzing and
    returns a list containing only those max X values and
    associated items.
    def __init__(self, size):
        self.size = size
        self._recs = []

    def push(self, value, items):
        if len(self._recs) < self.size:
            bisect.insort(self._recs, (value, items))

        elif bisect.bisect(self._recs, (value, items)) > self.size:
            bisect.insort(self._recs, (value, items))
            minitem = self._recs.pop(0)

    def items(self):
        return sorted(self._recs, reverse=True)
MaxItems2 takes advantage of the bisect module and while it works great; performance is at a minimum 2x worse on average than using the heapq method.
Test Code:
import random

pricegains = []
maxitems = MaxItems(100)
for x in xrange(500000):
    gain = random.uniform(1.0,500.0)
    maxitems.push(gain, ('This', 'is', 'Record'))

rows = maxitems.items()
Calling the above code with the wonderful timeit module produced the following results:
  • heapq method: Ten iterations finished in 1.90 seconds.
  • bisect method: Ten iterations finished in 3.80 seconds.
If you know of a faster way to collect the top x of a group of items...please share.