Option FanaticOptions, stock, futures, and system trading, backtesting, money management, and much more!

2021 Performance Review (Part 6)

I left off last time with a big question: should I include my pre-2008 [mostly stock] trading as part of the long-term performance record? After sleeping on it, I’ve decided this question has no right answer.

A case can certainly be made to leave it in. It was me who researched and traded [stocks] back then. It’s still me who researches strategies and trades [options] now. I’ve learned things over the years: some for better, maybe some for worse—and who knows which of those things will be helpful or harmful going forward. It’s all the same person, though. It’s me.

As a candidate to manage money in an investment adviser capacity, one would have every right (and perhaps duty!) to look at my entire performance record. I am very proud of my time spent trading equities. That is what grew my account to a size sufficient for launching a full-time trading business.

Having said all this, I need to make a command decision.

Just because so many things are different from my option trading, I am leaving my pre-2008 trading performance out for the rest of this analysis. It was once presented here. I did not normalize for short-term trading (tax penalty), and I did not include benchmark dividends. At some future time, I may revisit and study the entire record again.

Going back to the third paragraph of Part 4, one question not addressed is whether 7% is a sufficient tax penalty in the first place. I definitely erred to the side of conservatism by charging the penalty on too much (see table), but is the penalty itself big enough? Look back at this table. Column 5 shows surplus tax for short-term trading. The actual tax incurred will move through various brackets up to that containing the actual AGI. 7% is higher than most values and sometimes significantly higher. It’s 1.8% lower than the third bracket, which only covers a range of $1,150 (column 6). It’s 1% lower than the seventh bracket, which is the second largest of all (~$250K range).

I think the best way to evaluate the penalty is to calculate a weighted average tax premium for short-term trading. This will be highest at $460,000 AGI where the [column 5] weighted average is 6.33%.

Once again, the penalty is more than sufficient.

The last consideration I want to make before delving deeper into the numbers is determination of the proper benchmark. From 2008 through Dec 2018, the bulk of my trading was done in RUT. I switched to SPX in Dec 2018. I will therefore construct one index benchmark, which will be a combination of these two. As I assume this to be a buy-and-hold benchmark, all considerations regarding the tax penalty remain the same.

I will continue next time.

2021 Performance Review (Part 5)

I left off suggesting a revision to my global tax penalty for short-term trading, which will hopefully allow me to err conservatively while not diminishing my performance too much.

Rather than penalizing every positive month (method 1), what happens if I penalize only those months resulting in a new highwater mark being reached (method 2)?

Long-term performance (tax) penalizing months setting new highwater mark 2001 - 2021 (4-7-22)

Done this way, I still come out ahead of the set of index benchmarks. To check my work, I multiply together the returns of all penalized months. I do not include the penalty itself because the intent is to determine what total return is being penalized.

Here is a comparison of method 1 and method 2:

Total return for tax penalty (4-7-22)

Despite sounding reasonable, even method 2 penalizes too much. I think this happens for two reasons.

First, method 2 does not mind the edges. Suppose the highwater mark is 1048 and last month closed at 1000. If I gain 5% this month, then I achieve a new highwater mark (1050) by 0.19%. Method 2 assesses the tax penalty on the full 5%, however. That’s a big discrepancy.

Second, method 2 evaluates the highwater mark monthly rather than annually. Suppose for the first 11 months of a year, I make 3% each month only to lose 28% in the last month. In actuality, I end up down 0.3% for the year and would owe no tax. Method 2 would assess a tax penalty on 1.03 ^ 11 ~ 38%. That’s another big discrepancy.

I could resolve this by removing the penalty on select months to bring that 3880% closer to 2132% thereby lessening the overcharge. This would be completely legitimate, but for now I will resist the temptation. I can at least feel confident knowing I have insurance against some unforeseen oversight that might result in my performance numbers being artificially inflated.

In the end, if I [overly] err on the side of conservatism and still come out smelling like a rose, then my ultimate goal is achieved. I may be off to a good start because at first glance, the graph above has me sitting comfortably on top.

I still have a couple other things to address with the first being stock versus option trading. I mentioned in the second paragraph here a bit about the different types of trading I have done over the years. 2008 seems to be a major demarcation for two reasons: this is when I started trading full-time as well as when I started trading Section 1256 contracts.

Here’s the big question: should 2001 – 2007 be included in the analysis or left out?

That is something I will be sleeping on tonight.

2021 Performance Review (Part 4)

I left off discussing the inclusion of a tax penalty given that my trading is short-term whereas the benchmark indices represent long-term buy-and-hold. How to err conservatively in such a way to spare myself the task of having to look up every tax code change since 2001 and the precise tax rates that accompanied them?

The answer is to determine an across-the-board tax penalty high enough to cover most months even if it ends up being a bit too high overall.

Let’s work from the 2021 tax rates table I composed in Part 3. Since I like to be optimistic and visualize maximum profits, I will use the highest tax bracket with 20% LTCG and 37% tax on ordinary income (short-term). As a blended 60/40 tax rate: (20% * 0.6) + (37% * 0.4) = 26.8%. Rounding up, that is a 7% higher tax rate than LTCG for a buy-and-hold benchmark. I will therefore multiply the monthly return by 0.93 anytime my portfolio posts a profitable month.

I was not trading Section 1256 contracts before 2008. That tax penalty is 37% (being optimistic so as to assume maximal tax rate) minus 20% = 17%. I will therefore multiply each profitable month from 2001 – 2007 by 0.83.

Compare this closely with the graph shown in Part 2:

Long-term performance taxing all positive months 2001 - 2021 (4-4-22)

Big difference! My cumulative return has been cut from 2,032% to 771%. Furthermore, my trading edge over a set of major indices has all but evaporated.

To check my work, I multiply together all the positive months to get the cumulative return. This represents the profits on which a tax penalty has been assessed. The previous graph showed this cumulative return to be 2,032% sans tax considerations. Here, the cumulative return is 439,322%.

By charging myself the tax penalty on all positive months and giving no credit for negative ones, I overshoot by a huge margin! No wonder the trading edge is nullified.

This business is tricky because while I’m all about erring to the side of conservativism (as discussed in Part 2), I don’t want to be so conservative that I fool myself into believing I have a losing or mediocre trading strategy when in fact it may be decent or good. Depending on how one looks at it, statistics deems this a type I error (false positive) or type II error (false negative): neither of which is advised. In this case, I penalized myself far more than I should have for short-term trading.

Going back to the second paragraph above, let’s fine-tune this by changing the last sentence. Rather than penalizing all positive months, I will penalize months where the final account value makes an all-time high. This is much more realistic. When my year-end account value is higher than the previous year-end account value, I pay taxes on that profit. If the year-end account value is lower, then I pay no taxes and the losses carry over to offset profit (at least partially) in future years.

This is really where I should tell you to consult a tax professional for specifics since your situation may vary.*

I will continue next time.

* — I might also suggest exploring trading as an entity if you are more active.

2021 Performance Review (Part 3)

I left off presenting a comparative graph of my trading performance versus the major indices from 2001 – 2021. The graph is best considered a rough draft, though, for a couple different reasons.

My trading has significantly changed over the years. From 2001 – 2006, I researched systematic criteria and used those to pick stocks. In 2007, I started trading equity options, and in 2008, I went full-time trading [mostly] index options. Even for the latter, my option strategies have evolved. I could make a case to completely separate out 2001 – 2007 but for now, just realize the graph does not portray performance of one fixed strategy over two decades.

I think the main thing masked by the graph has to do with taxes. Disclaimers I hear over and over include things like “please consult a tax professional,” “everyone’s tax situation is different,” and “your results may vary.”

Performance shown by the Part 2 graph could conceivably be achieved in a Roth IRA with after-tax money.

More likely, though, much of this trading is done in taxable accounts and for that reason, I want to do what I can to normalize the comparison between my portfolio and the benchmarks. What I am not looking to present are after-tax returns, which [per disclaimers above] may not be applicable to a heterogeneous audience.

I assume the benchmarks to be buy-and-hold [over 12 months] whereas my trading is generally short-term. The former qualify for long-term capital gains (LTCG) tax rates whereas the latter gets taxed as ordinary income. For the same reasons to err conservatively discussed in the last post, I feel hiding this would be deceptive.*

Although short-term, my trading does qualify for the blended tax treatment afforded to Section 1256 contracts where 60% the profits are taxed as long-term. This is still complicated because one’s total net worth dictates position size, which dictates magnitude of profits [or losses], and subsequently tax rates.

Here are the numerous tax-rate combinations of LTCG (second column) and ordinary income (third column) for 2021:

2021 tax brackets (4-1-22)

The fourth column sums 60% of the second column and 40% of the third column. The fifth column shows by what percentage the ordinary-income tax rate exceeds LTCG. The sixth column shows over what range of income this differential applies.

To make matters even more complex, tax rates have changed over the years. Aiming to err on the side of conservatism spares me from having to hunt down all tax-code changes to apply for each respective period.

I will explain this next time.

* — I do believe many financial professionals hide it, though, because it
      may be easily swept under the mat with disclaimers as given above.

2021 Performance Review (Part 2)

Last time, I began to lay the groundwork for a long-term performance review. Today I will continue the discussion.

My hopes for doing this in Python resulted in the project dragging on for a couple extra weeks until I finally decided to stick with my original Excel spreadsheet, which had data from 2001 – 2016. The first thing for me to do was to complete this through 2021. The first few months of the spreadsheet looks like this:

Performance tracking spreadsheet (3-29-22)

Eventually, I started adding the last Friday dates for the beginning and end of the monthly periods to make lookup quicker.

After entering the monthly performance of my portfolio through 2021, I calculated monthly performance for SPX, RUT, NDX, and DJI. As the spot indices do not include dividends, I fetched historical dividend yield data from http://www.multpl.com/s-p-500-dividend-yield/table for SPX and https://www.macrotrends.net for the other three. On the latter website, IWM and QQQ yields are provided quarterly and DIA yields monthly. For each data series, I took the highest value for all four quarters (or 12 months) and used that as the dividend yield for the entire year.

As a result of this conservative manipulation, the benchmark return is slightly enhanced and my comparative trading performance will be weaker. I prefer to err on the side of conservativism (see sixth paragraph here and last full paragraph here) just in case I’m ever caught wearing the rose-colored glasses without my notice (e.g. sixth paragraph here).

I also seize the opportunity for conservatism in my handling of missing QQQ yield data. No data are available prior to 2006. I therefore plugged in the highest quarterly yield recorded from 2006-2021 for 2001-2005. The gist of all this is to weaken my results when reasonable to do so. If I still come out shining bright then it may be a significant finding. I feel the same way about backtesting performance: bias against backtesting results in every way possible such that if the results still pass muster, I may indeed be looking at a viable trading candidate.

I have discussed critical analysis many times (e.g. third-to-last paragraph here). To believe something is worthwhile in this industry, performance results should be impressive beyond a reasonable doubt. Make sure to include the headwinds because you can be sure Mr. Market won’t forget them (see fifth-to-last paragraph here) at the hard right edge of the chart.

Here’s a first look at the performance comparison:

Long-term performance first look 2001 - 2021 (3-29-22)

I will continue next time.

2021 Performance Review (Part 1)

Today I begin a mini-series to update my trading performance through 2021.

I haven’t done a performance update in a while, but I should do this every year. My first such review began with this post. Four years later I did this one. Later that year I also did this post with some nice graphs and data. The following year I did this one. Finally, I did this one to finish up a draft I had begun months earlier. This post includes some performance notes.

2021 was my best trading year ever. One could say I was lucky. Then again, as traders we are always lucky whenever a different market environment would have resulted in a much worse outcome. This is especially the case when the superior performance is realized in the face of an improbable (subjectively defined) market environment.

I tend to be reluctant to take credit for things I do not control. I do not control the market, but I am the one doing the trading and for that I deserve credit. Certainly if my account tanks, I will always get the blame by my own worst critic (for starters).

Some of this is about humility, which is a topic I have written about or alluded to in the last paragraph here, this post, this mini-series, this mini-series, this post, and this mini-series where I gave a very honest and open evaluation of myself.

Aside from reviewing my 2021 trading performance, in what follows I will go back to 2001 and recalculate the numbers relative to different indices factoring in dividend yield and tax differential for active trading. I incur a 60/40 blended tax rate compared to the benchmarks, which for purposes here will be considered LTCG. I don’t have a CIPMĀ®, but I think any accurate performance comparison should address this point.*

Because my original plan was to crunch numbers in Python, this has become more of an ordeal than anticipated. My spreadsheet breaks down monthly periods by the last Friday of each month being the starting point for one period and the ending point for another. Not every Friday is a trading day (holidays), though, which means I sometimes use Thursday values. I’m fine giving a Friday date even when there is no trading on that day because it’s still a true statement. In some extreme cases, we may have had no trading on a Thursday and a Friday. Programming all this can get rather involved.

I will continue next time.

* — If you start reading performance reports, I think you will come to the realization that most do not.

Time Spread Backtesting Concepts (Part 3)

Today I conclude this brief mini-series detailing background concepts about time spreads.

Theta is one parameter I found insidious in manual backtesting. 2020-2021 time spreads generally have a lot of “jump.” They seem to hit profit targets quickly and sometimes completely out of the blue (e.g. with PnL small or negative just a day or two beforehand). 2017 time spreads, in contrast, move very slowly. Weeks go by without any significant profit and loss is more common. Perhaps because I monitored the TD ratio per guidelines shown here, I did not think to track theta itself.

2017 volatility is extremely low and I eventually realized that position theta is extremely low with these guidelines, too. Over a given period, the market can be expected to move within a probability cone. When theta is much lower, profit will not accumulate to offset this movement. Without normalizing theta by adjusting spread width, these guidelines really describe entirely different strategies for 2017 and 2020/2021. As shown in the table here, width will affect MR, which can then be normalized as discussed in that final paragraph.

Eventually, I would like to do a study with no profit targets or stop-losses. Track MFE with DTE, MAE with DTE, and then visualize to check for optimal values. This should be done in walk-forward fashion to avoid generalized curve-fitting. Maybe every month I visualize a chart of MAE/MFE over the previous six months to see what values are optimal based on recent history. These values may or may not be stable going forward.

To get started, something simpler like backtesting with a straight 10% profit target and -20% max loss could be done. I should then try to generate a variety of combinations to verify the strategy as profitable in all cases. Other pairs could be 10%/-10%, 15%/-20%, 20%/-20%, 20%/-15%, etc. Of course, the higher the number the longer the trades. For this reason, some measure of PnL%/day also makes sense…

…and by now I have lost the “simpler” part. Keeping complexity out is certainly one of the larger challenges here.

Rewind: start with +10%/-20%. I can then compare strike selection from -5% to ATM to +5% by increments of 1%, 2%, or 2.5% to assess directional bias. Transaction fees should be included, and avoiding less-liquid strikes is a possibility.

As one last piece of theoretical complexity, I suspect an X% change in horizontal skew has less effect on PnL as DTE decreases. Lower DTE means less extrinsic value remains in the short option to be affected by IV change in the first place. Tracking horizontal skew % may therefore be misleading unless done with regard to DTE.

Time Spread Backtesting Concepts (Part 2)

Today I want to continue with background on time spreads before moving forward with Python backtesting.

How horizontal skew reacts to different types of market rallies and/or selloffs is hard to predict. In selloffs when fear spikes, traders tend to buy near-term options pressuring term structure toward backwardation (increasing horizontal skew). In theory, increased IV is good for vega-positive time spreads. If horizontal skew becomes more positive, then although the long leg increases in value (good) due to IV, short-leg value may increase more (bad). The overall effect on PnL depends on how decreased spread value from higher skew compares with increased spread value from higher long option prices.

You can imagine other permutations for cases where horizontal skew is initially positive or negative, becomes more positive or negative based on different magnitudes of rally/selloff, etc. I am interested to see if any significant association exists between [changes in] horizontal skew and profitability.

I am also interested to see if any significant association exists between IV and profitability. Conventional wisdom says vega-positive time spreads should be purchased when IV is low. Could horizontal skew have a significant interaction here?

Margin requirement (MR) varies from one time spread to another and I have had difficulty putting my finger on this. MR is proportional to IV. MR should be inversely proportional to DTE since all else being equal, time spread price increases over time and maximum potential risk is the cost. Width (days between expirations) is directly proportional to MR because for the same short option, long options farther out in time are more expensive. Horizontal skew should also be inversely proportional to MR because the higher skew means a more-expensive near-term option and lower overall cost.

To simplify things a bit:

Factors affecting spread MR (3-18-22)

Perhaps Python can aid with some analysis here.

With MR so variable, some consideration must be given to position sizing. One possibility is a fixed position size backtest where each trade is done with number of contracts (rounded down) equal to position size ($) / MR. Alternatively, a fixed percentage of the total account could be allocated. This would allow for compounding. Drawdowns across the equity curve could then be compared as percentages off the highwater mark to normalize for temporal sequence. This seems logical at first glance.

I will continue next time.

Time Spread Backtesting Concepts (Part 1)

I previously introduced my recent manual backtesting of time spreads that I hope to automate going forward in Python. Let’s back up a bit and discuss some general concepts pertaining to time spreads themselves.

A time spread is composed of a short option in one expiration and a long option at the same strike price in a more distant expiration. I proclaim the primary profit mechanism is differential time decay with short option decaying faster than the long.

Time spreads have delta risk, vega risk, and term-structure risk.

Delta risk refers to the positional tendency to maximize profit over time as the underlying market trades toward the strike price. The [roughly] triangular risk graph illustrates this. At expiration, profit is greatest at the strike price. Above and below, expiration profit wanes until it becomes zero or negative with the market trading sufficiently far beyond the strike.

For a directional time spread placed with current market significantly above or below the strike price, delta risk refers to loss accumulation as the underlying moves farther from the strike or as the underlying remains sufficiently far from the strike as short-option expiration approaches.

Time spreads placed ATM are sometimes referred to as nondirectional. The position can [eventually] profit regardless of whether the underlying moves up or down as long as it remains within a limited range. The ATM time spread still has delta risk because enough market movement away from the strike price either today or by expiration will drive PnL negative.

Vega risk—tendency of a position to lose money due to IV change—exists because the long option, which is farther from expiration, has more extrinsic value than the short. Time spreads are therefore vega positive: as IV increases, the long leg will increase more in value than the short leg will decrease. As IV decreases, the time spread loses value and the expiration curve, which always indicates PnL at short-option expiration, moves down. This is true assuming all else remains the same.

Term structure—the difference in IV between expiration months—often does not remain the same.

Term-structure risk for time spreads refers to an increase in horizontal skew. Horizontal skew is short-option IV minus long-option IV. Horizontal skew is generally negative, which makes positive horizontal skew advantageous for entry.* Should skew revert lower, the short option can lose more extrinsic value than the long, which biases the spread toward profitability. Once a time spread has already been opened, however, increased horizontal skew biases the spread toward loss because short-option extrinsic value increases more than long.

I will continue next time.

*—Always question why horizontal skew is positive as part of your trade assessment.

Practice Trades Cal 1.13

Cal 1.13 (guidelines here) begins 2/18/20 (87 DTE) with SPX 3370 and trade -$168 (-2.6%). TD = 1, MR $6,498 (two contracts), IV 11.9%, horizontal skew -0.85%, NPD 6.8, and NPV 231.

What jumps out at you when looking at the initial risk graph?

Risk graph Cal 1.13 (0 DIT) (3-10-22)

This is the second Cal example where the same strike is unavailable in the back month (see Cal 1.4 here). Placing the long leg lower gives the trade a bullish bias, which is something discussed in the fifth paragraph here.

Notice that a bullish bias is achieved whether I diagonalize the long leg (lower) or whether I raise the calendar strike. The former preserves profit potential at current underlying price at the cost of raising MR. Each has pros and cons.

As mentioned in the third paragraph here, I may want to come up with some alternative downside management since TD = 1 at inception unless I plan to let it go to ML.

On 84 DTE, trade -4.4% with market down 0.85 SD in three days.

Exit 81 DTE for loss of $1,478 (-22.8%). This is the 4.33 SD down day, which comes without warning. Over 6 days, SPX down 2.73 SD with IV up 83%. Horizontal skew has increased slightly to -0.62%. TD = 0 (rounded).

Unlike Cal 1.2, SOH to see how the market “shakes out” would be a terrible decision here:

Price Action Cal 1.13 (3-10-22)

Highlighted is my first opportunity to exit at max loss (with market far outside profit tent and TD 0 unlike third paragraph here where Cal 1.12 is still well-positioned with TD strong). I have to take the loss immediately: no reason not to.

HEED WARNING DISCRETIONARY TRADERS!

I think one of the biggest risks of discretionary trading is the tendency to see something that seems to work while conveniently forgetting other instances where it does not. You may be confident in something that, on the whole, adds no benefit (or worse). A large-sample-sized systematic backtest to assess strategy guidelines can prevent this from happening.