The Transaction Costs of Trading Stocks: A Primer for Retail Investors

When we trade individual stocks, we incur transaction costs. The purpose of this article is to explain these costs, quantify them, and help you avoid them.

First, I’ll classify them into four types:

  1. market impact costs;
  2. spread costs;
  3. getting bad fills; and
  4. commissions and taxes.

Market Impact

The market impact cost of a transaction depends on the number of shares you trade divided by the number of shares traded in a typical day. (An equivalent way to think about this is the amount invested divided by the daily dollar volume.)

Some studies have proposed that the relationship between market impact cost and this quotient is linear; others have proposed that the market impact cost has a linear relationship with the square root of that quotient. The results of my own research make me lean toward the latter.


If you’d rather skip over my methods, which are a bit involved, don’t read the rest of this section and just go to the next one for the results.

I recently did a study of my own transactions. These ranged from very small (several hundred dollars) to very large (over $100,000), and the stocks involved ranged from nanocaps to mid caps. For some of the trades I used Fidelity, for others I used Interactive Brokers. Some of the trades were VWAP (volume-weighted average price: an algorithm that trades small amounts during the course of the day), some were limit orders placed at the ask for a buy and at the bid for a sell (for these I sometimes got some price improvement), and some were pegged to the NBBO (National Best Bid and Offer). Some were for US stocks, some for Canadian F-shares, and some for stocks traded on European exchanges.

I measured the transaction cost by looking at the price of the stock immediately prior to placement of the order and comparing it to the weighted average price at which the order was filled. (I did not include orders placed before market open or for which there was no fill that day prior to my order.) Please note that this reflects only a limited number of trades and makes no pretense to be an accurate guideline for all investors or traders: it’s simply my personal experience.

The data I came up with was a huge mess. Why? Because

a) the price of a stock immediately prior to placement of an order can vary greatly between the bid and the ask at the time;

b) the price of a stock might well rise and/or fall after order placement completely independently of the trade one’s placing; and

c) whether an order gets filled at the bid, at the ask, or in-between depends on a huge number of factors.

To make sense of this mess, I sorted my orders by the x variable (in this case, dollar amount traded divided by average daily dollar volume), divided it into equal-sized chunks, took the median of the x and y values of each chunk, and plotted the result. I did this again for larger and smaller equal-sized chunks just to be sure that chunk size wasn’t having too much influence on my results.

After smoothing the data like this and modifying it so that it was based on the square root of the percentage of volume traded, I was able to chart the data so that it made sense to me:

There are a number of possible regressions one can create using charts like these. I tried several and measured the median absolute distance of each formula to the actual trading costs. The formula with the lowest median absolute distance is the one I went with; this happened to coincide with the regression line with the highest R2.


The cost of a trade will be about 2.5% of the square root of the percentage of daily volume traded.

How do you find the daily volume traded? You probably want to take the median volume over the last few months’ of trading days. Portfolio123 is one service that offers this data; some brokers will offer average (rather than median) daily volume, but averages can be misleading since most stocks trade far, far more heavily on certain days than others. Moreover, the formula above relies on median daily dollar volume, not average.

Let’s say I want to buy $200,000 worth of shares in LSI Industries (LYTS). The median daily dollar volume is $250,000. I’m buying 80% of the daily dollar volume. The square root of 80% is 89%, so I can expect to pay $200,000 × 89% × 2.5%. That’s over 2% of my purchase, a rather hefty price to pay. Now let’s say I’m only buying $10,000 worth of shares. That’s 4% of the daily dollar volume, and the square root of 4% is 20%. Now I’m paying $10,000 × 20% × 2.5% = 0.5% of my purchase.

The Bid-Ask Spread

I used the same methodology as outlined above to measure the trading cost of the bid-ask spread. (The rank correlation between spread as a percentage of price and trading cost is about the same as that between percentage of volume traded and trading cost.) To get the spread, I calculated the median of the last few weeks’ closing bid-ask spread divided by the price. This data is not easy to come by. Portfolio123 offers it, but only for stocks listed in the US. For over-the-counter, Canadian, and European stocks, I use Fidelity’s Active Trader Pro to look up time and sales information, and then calculate it myself after writing down the spread over the last ten trading days.

Once again, the charts were a mess—even worse than the charts for the amount traded versus the trading cost. But after some effort, using the same method as I outlined above, I came up with an exceedingly simple formula for the market impact of the bid-ask spread as a fraction of the stock’s price: the cost of a trade will be about one-half of the median spread.

Considering Both Market Impact and Spread Costs

There isn’t an easy way to put together the cost of a trade based on market impact and the cost based on the spread. Using multilinear regression on data as messy as this is a fool’s game. Personally, I just average the two to estimate the total cost of a buy or sell.

To minimize both market impact and spread costs, I think a VWAP order is ideal, as do most professional investors. If you’re unable to place a VWAP order, then placing small portions of your order over the course of a day or a week is far better than placing it all at once. An order of $200,000 worth of LYTS placed in one single batch might well have a market impact cost significantly higher than 2%. The large majority of the trades I’ve placed and measured are a bit smarter than that.

If you have a different way to minimize market impact or spread costs, I would be grateful for feedback.

Lastly, I should point out that transaction costs are extremely variable. The same order for the same stock placed an hour apart might have completely different transaction costs. I have, on occasion, been able to buy more than the daily dollar volume of a stock in one day with hardly a whimper. I’ve also been slammed doing so.

Getting Bad Fills

For many years I thought I was getting better execution by cleverly placing limit orders and timing their placement to maximize my chance of catching the lowest (for buys) or highest (for sells) prices of the day.

But if that were true, then you could buy a security at its lowest price and sell it at its highest price every day, and day trading wouldn’t be a loser’s game. (Only about 1% of day traders make enough to live on from it; 97% of them lose money.) If it were possible to get better fills than the day’s average, practically everyone would.

In avoiding bad fills, what might matter to some degree is how you place your order. Do you use a market order, a conditional order, a straight limit order, a VWAP order, a pegged NBBO order? The results vary from broker to broker.

I also make a practice of letting a trade go if the price moves away from me by a huge amount. I sometimes place the order again the next day. But I don’t think this is a wise move if you’re not going to reconsider making the trade in the first place. If you’re totally committed to the trade, then go ahead and trade even if the price moves away from you dramatically, because it’s likely to continue that move the next day, and the next. On the other hand, if the price move is going to make you reconsider the trade, then perhaps you should hold off.

In short, I believe that getting good fills is more a matter of luck than skill. But I’d be grateful for tips if anyone can show that they can consistently get good fills.

The question then arises: is it possible to get consistently lousy fills? Your chances of doing so are likely higher with market orders, and your transaction costs will also likely be higher.

Lastly, some studies have suggested that buy orders should be placed near the end of the trading day and sell orders near the beginning. I have not come to a firm conclusion about this, but given that overnight returns dwarf the returns during the trading day, it makes sense to me.

Commissions and Taxes

Very few brokers charge a commission these days, and there are no taxes on trades. (Capital gains taxes are not transaction costs.) But if you’re trading international stocks or using certain brokers, you’ll be racking up additional transaction costs.

  1. Commissions. Very few brokers allow you to place an international order without paying some commission. Some charge a commission per order, others per share, and others as a percentage of the trade. In addition, a few brokers still charge commissions for domestic stock trades as well. From my experience, you can expect to pay about 0.2% to 0.25% in commissions if you use Interactive Brokers Pro, and either $33 or $83 per order if you use Fidelity to place international trades, depending on whether you place them online or over the phone (the latter is your only option for retirement accounts).
  2. Currency exchange costs. These can range from 0.02% to 1%, depending on your broker.
  3. Stamp taxes. These are transaction taxes that some countries charge for stock purchases (but not for stock sales). Ireland charges 1%, the UK charges 0.5%, and a few other European countries significantly less than that.
  4. Dividend taxes. If you have a cash account, you can deduct foreign taxes on dividends from your US tax, but if you’re investing in a retirement account, they’re a complete loss. Why do I view this as a transaction cost? Because the price of a stock is adjusted for dividends. Here’s an example. Torpol (TOR:POL) pays a yearly dividend: this year it was 3 zlotys. So the stock’s price fell from 18 zlotys at the close of July 13 to 15 zlotys at the next open since July 14 was the ex-dividend date. If you had bought the stock prior to July 14, your shares would be worth 3 zlotys less, but you would be getting those 3 zlotys back in cash. However, because of the tax on dividends, you wouldn’t be getting the entire 3 zlotys back, you’d only be getting 2.47 zlotys since Poland charges a tax of 19% on dividends. So to express this tax as a transaction cost, you would multiply the dividend yield, which is 16.67% (3 divided by 18), by the 19% tax rate to arrive at 3.17%. This cost only applies a) when you buy the stock, not when you sell it; b) if you buy it before the ex-dividend date and plan not to sell it until after that date; and c) if you’re using a retirement account for your trading.

Why It’s Important to Get a Grip on Transaction Costs

In order to maximize your return on a portfolio, you would, in an ideal world, calculate your expected return on each security in that portfolio and weight more heavily those securities with higher returns. Given that some securities have inherently higher transaction costs than others—because of lower volume, wider spread, or higher commissions and taxes—it’s important to take transaction costs into account when building your portfolio.

Here’s an example. YOC AG, a German company, has a typical bid-ask spread of 2.66% of its price and a daily dollar volume of $29,000. So if I want to buy $60,000 worth of YOC in one day, I can expect to pay about 2.5% in spread and market impact costs and an additional 0.25% in commissions to IB. My round-trip cost—of buying and selling this stock—will then be about 5.5%. Now I figure my expected excess return on an average stock is 4.17% after transaction costs. Why? Because my real-time alpha over the last seven years is 33% per annum and my average holding period is 52 days, and 1.3352/365 – 1 = 4.17%. If I add back typical round-trip slippage (probably less than 1%, since my market impact costs used to be far lower) to 4.17%, I have a base that I can use from which I can subtract my transaction costs to decide if it’s worthwhile buying a stock. In this case, I would definitely not buy $60,000 worth of YOC in one day unless I had reason to believe it would far outperform my average stock. On the other hand, buying a much smaller amount would be cheaper, and might be worth my while.

Transaction costs affect every single aspect of portfolio management. The number of positions you hold should take transaction costs into account: the more positions you hold, the smaller your trades will be and the longer your holding times will be, so diversification significantly reduces trading costs. Choosing what stocks to exclude from your universe should ideally take into account their trading costs. Increasing turnover will increase your trading costs.

Because backtested returns and trading costs pull in opposite directions—backtests favor small stocks, large positions, high turnover, and few holdings, while minimizing trading costs favors large stocks, small positions, low turnover, and lots of holdings—finding the sweet spot can be an overwhelming task. Personally, I’ve been using differential calculus to do so, but not everyone is as insane as that. I certainly can’t claim to have found the right balance, but I’m working on it.

Disclosure: I/we have a beneficial long position in the shares of LYTS, TOR:POL, and YOC:DEU.

2 Replies to “The Transaction Costs of Trading Stocks: A Primer for Retail Investors”

  1. Dave, that’s a great paper you linked to. I’m gratified to learn that the third model, the “Trading Rate Model,” is very close to my own if you consider the order duration as the whole of a trading day. What my equation lacks is the daily volatility. It turns out that their estimate of trading costs using this formula is significantly higher than mine for illiquid stocks. But perhaps that’s because they are likely dealing with far more liquid stocks than I trade in, and for those stocks their estimate is lower than mine. Their median order size as a percentage of ADV is 0.081% and mine is 13%! Their median spread is 0.06% and mine is 0.65%. So their numbers are bound to be very different from mine. I wrote my article for retail traders, not institutional traders like Deutsche Bank. Anyway, thanks a million. This was a very good and illuminating read.

Leave a Reply

Your email address will not be published. Required fields are marked *