Fractional Trading

Posted by Mengjie Xu on Friday, July 4, 2025

Motivation

Since retail investors’ last major moves on dot-com stocks in the late 1990s, they have been largely silent from the capital market for decades until the COVID time. Compared to previous retail trading waves, the recent retail influx is characterized by unprecedented market power, fueled by crowdsourced investing ideas from online forums, one-click trading convenience, and greater access to news outlets.

Looking back, many tend to attribute the recent retail influx to COVID, which left people stuck at home with ample time and extra cash from quarantine and layoff compensation. However, this cannot explain why retail investors have remained an influential force even after returning to the office.


Figure 1: Retail Trade Volume Since 2000

Digging deeper, one may find that there is another major factor contributing to this wave of retail influx. In November 2019, major brokers such as Charles Schwab and Robinhood began offering fractional trading. Instead of requiring one share as the minimum purchase, brokers began allowing investors to buy fractional shares for as little as a penny. This is undoubtedly a game changer: it greatly lowered the entry barriers not only to expensive stocks that people couldn’t afford before, but also to the entire stock market.

One illustrative example from Da et al. (2024, RFS): With a single share trading well above a quarter of a million dollars, Berkshire Hathaway’s Class A stock (BRK.A) is commonly considered out of reach for most retail investors. However, as Figure 2 from Da et al. (2024, RFS) shows, the stock has experienced a sharp increase in Robinhood ownership since 2019.


Figure 2: Number of Robinhood Users Holding BRK.A

Though individually minimal, fractional trading—when coordinated during attention-grabbing events—is powerful enough to exert significant price pressure even on high-priced stocks, fueling meme-stock-like trading frenzies and bubbles (Da et al., 2024, RFS). Therefore, recognizing that this wave of retail influx is not a temporary byproduct of COVID, but rather a more prolonged fundamental change in market dynamics, is important for companies, institutional investors, and policymakers—many of whom seem to have already acknowledged and moved upon this “New normal.”

Recent studies suggest that institutional investors do not remain unchanged with the retail influx; they are found to ‘ride on the bubbles’ and systematically take advantage of the additional stock volatility brought by retail investors (Lin, 2024 WP, Fang et al., 2024 JFQA). In addition, institutional investors are shown to hold fewer shares and firms see less voting participation in shareholder meetings, suggesting that retail investors altered shareholder structures but cannot contribute to corporate governance the same way as their predecessors did (Aggarwal et al., 2024 WP). On the other hand, many companies realized that they cannot deter retail investors by maintaining an unaffordable stock price anymore but must carefully manage this new shareholder base to avoid potential backlashes (McCabe, 2020).

There are certainly more fascinating aspects we can explore about these ongoing market dynamics. To support these explorations, in this blog, I will follow Da et al. (2024, RFS) and introduce a method for quantifying firm-level daily exposure to fractional trading.

How Does Fractional Trading Manifest in the Order Book?

I follow Da et al. (2024, RFS) and rely on the off-exchange one-share trades to capture fractional trading. The rationales, according to Da et al. (2024, RFS), are as follows.

  1. Most retail investors place orders through online trading platforms like Robinhood, which bundle these orders and sell them to off-exchange market makers such as Virtu for internalization (Osipovich, 2021). These off-exchange trades are then reported to a Financial Industry Regulatory Authority (FINRA) Trade Reporting Facility (TRF), which can be identified from the order book.
  2. When reported to a FINRA TRF, the fractional orders appear as a one-share trades per the ‘rounding-up rule.’

Institutional background above, the algorithm to quantify fractional trading is extremely simple and intuitive:

  1. First, determine the set of stocks of interest—for example, S&P 500 firms—and the time frame, say 2020-01-01 to 2024-12-31.
  2. Second, identify the TRFs where fractional trading is likely to be reported. Following Da et al. (2024, RFS), the possible TR_RF values in order book provided by WRDS-TAQ database are:
    • B = FINRA / NASDAQ TRF Chicago
    • N = FINRA / NYSE TRF
    • T = FINRA / NASDAQ TRF Carteret (CTA)
    • Q = FINRA / NASDAQ TRF Carteret (UTP)
  3. Third, extract one-share trades from the orders reported to the TRFs listed above—that’s the fractional trading you’re aiming to capture.

Although algorithmically simple, the calculation of fractional trading can be computationally intensive and time-consuming, as it requires iterating huge daily order books from 2020 to 2024. Given this, I highly recommend deploying this task as a batched job on the WRDS cloud instead of running it with PC SAS.

Step 1: Extract S&P 500 stock symbols

The S&P 500 firm list is provided by the CRSP database with permno as the identifier. I merged it with the WRDS CRSP-TAQ linking table to obtain the stock symbols. As the S&P 500 list can change over time, I only keep firms included in the index as of Dec 31, 2019.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
proc sql;
	create table sp500 as select distinct symbol
	from crsp.dsp500list a, wrdsapps.tclink b
	where a.permno=b.permno and start<="31Dec2019"d<=ending;
quit;

proc sql noprint;
	select distinct symbol into :ticlist separated by ' '
	from sp500;
quit;  

data _null_;
	length temp $20000;
	temp=cat('"',tranwrd("&ticlist."," ",'" "'),'"');
	call symput('ticlist_formatted',temp);
run;

To increase data extraction efficiency, I combined the symbols of S&P 500 firms into a single string, with each symbol wrapped in quotes, and then assigned this string to the macro variable ticlist_formatted.

Step 2: Extract & Aggregate Fractional Trading

Before we begin extracting trading data, we need to create an empty dataset—let’s call it spft_2020_2024. All newly extracted trading data will be saved to this dataset day by day without generating separate output files.

1
2
3
data home.spft_2020_2024;
	stop;
run;

Next, we define a function to extract fractional trading for targeted stocks on a given day from the corresponding order book, and then aggregate the number of fractional trades num_ft and total trades num_trd per stock per day. One may also calculate price high and low (maxprice and minprice).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
%macro getsp(yyyymmdd);
    data temp1;
        set taqmsec.ctm_&yyyymmdd;
        where sym_root in ( &ticlist_formatted.) and tr_corr = "00";
        if TR_RF in ("B", "N", "T", "Q") and size=1 then ft_flag = 1; else ft_flag = 0;
    run;

    proc sql;
        create table temp2 as select distinct sym_root, date, sym_suffix,
        count(tr_id) as numt_trd, sum(ft_flag) as num_ft, max(price) as maxprice,
        min(price) as minprice
        from temp1
        group by sym_root, date, sym_suffix;
    quit;

    data home.spft_2020_2024;
    	set home.spft_2020_2024 temp2;
    run;
%mend;

Once the function getsp for processing daily order books is defined, we can proceed to run it day by day within our specified time frame: 2020-01-01 to 2024-12-31.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
%macro trading_days(start_date, end_date);

	    %let start_date_num = %sysfunc(inputn(&start_date, yymmdd10.));
	    %let end_date_num = %sysfunc(inputn(&end_date, yymmdd10.));

	    %do trading_date = &start_date_num %to &end_date_num;
			%let yyyymmdd = %sysfunc(putn(&trading_date, yymmddn8.));
			%if %sysfunc(exist(taqmsec.ctm_&yyyymmdd)) %then %getsp(&yyyymmdd);
	    %end;
%mend;

%trading_days(2020-01-01, 2024-12-31);

By design, if the code runs smoothly, our fractional trading calculations will be integrated into spft_2020_2024.sas7bdat in the home directory.

Step 3: Deploy the Batched Job in WRDS Cloud

Given the substantial volume of data involved, I highly recommend packaging the code and running it as a batched job in WRDS Cloud. This approach offers several benefits: freeing up your PC’s resources for other tasks, avoiding inefficient data transfers between your PC and WRDS, and leveraging the computational power of WRDS Cloud to accelerate the calculation.

In my earlier blog post, “Exploit WRDS Cloud via Python”, I introduced how to connect to WRDS Cloud via SSH, link WRDS to your Dropbox account for convenient file exchanges, and deploy batch jobs there. Readers interested in more details can refer to that post. In this post, I assume you’ve already linked your WRDS Cloud to your Dropbox, and I’ll provide another example of how to deploy a batch job to WRDS Cloud—and why you might want to do that.

As a preparatory step, I batched the code for calculating fractional trading into a SAS file named testft.sas, which is available at this link. Download this SAS file to the root directory of your Dropbox folder to proceed.

To deploy it to WRDS Cloud, we need:

  • Open Windows command line or Mac Terminal, and connect WRDS Could through ssh.

    1
    
    ssh yourwrdsusername@wrds-cloud.wharton.upenn.edu
    

    Successful connection will give you:

    1
    
    [yourwrdsusername@wrds-cloud-login1-w ~]$
    
  • Upload testft.sas from Dropbox to the home directory of the WRDS Cloud

    1
    
    [yourwrdsusername@wrds-cloud-login1-w ~]$ dbxcli get testft.sas .
    
  • Run testft.sas in WRDS Cloud

    1
    2
    
    [yourwrdsusername@wrds-cloud-login1-w ~]$ qsas testft.sas
    Your job 32493003 ("testft.sas") has been submitted
    

You can check the job status with qstat and view the SAS running logs with cat check testft.log. If the logs indicate that the code is running smoothly, you can enjoy your break (or evening) and harvest your data a little later.

Step 4: Harvest Data From WRDS Cloud

Now it’s time to harvest your fractional trading measures! Remember, if the code runs smoothly, the fractional trading calculations will be integrated into spft_2020_2024.sas7bdat in your home directory of the Cloud. You can use ls to check whether the dataset has appeared there. If it has, simply download spft_2020_2024.sas7bdat to your Dropbox folder. In my case, I would like to place it in /Blogbackup/blogdata, so my code is as follows:

1
[yourwrdsusername@wrds-cloud-login1-w ~]$ dbxcli put spft_2020_2024.sas7bdat /Blogbackup/blogdata/spft_2020_2024.sas7bdat

If you have multiple files with similar names and find downloading them one by one time-consuming, I recommend writing a bash script to automate the task. Simply save the following shell script as a bash file named syncwrds.sh and upload this bash file to WRDS Cloud in the same way you upload a SAS file.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

# Prompt the user to enter the directory to search in
read -p "Enter the directory to download to: " dest_dir

# Prompt the user to enter the keywords
read -p "Enter the keywords to search for in filenames: " keywords

# Iterate over all files in the current directory
for file in ./*; do
  if [ -f "$file" ]; then
    # Extract the base name of the file
    filename=$(basename "$file")
    # Check if the file name contains the specified keywords
    if [[ "$filename" == *"$keywords"* ]]; then
      # Check if the file already exists in the destination folder on Dropbox
      if ! dbxcli ls "$dest_dir" | grep -q "$filename"; then
        # Run the dbxcli command to upload the file
        dbxcli put "$file" "$dest_dir/$filename"
        echo "Uploaded $filename"
      else
        echo "File $filename already exists in $dest_dir, skipping download."
      fi
    fi
  fi
done

echo "All matching files have been processed."

As syncwrds.sh is in DOS/Windows format and WRDS Cloud uses Unix/Linux format, we need to run the dosunix command to convert the line endings.

1
2
[yourwrdsusername@wrds-cloud-login1-w ~]$ dbxcli get syncwrds.sh
[yourwrdsusername@wrds-cloud-login1-w ~]$ dos2unix syncwrds.sh

Now you’re ready to batch-download files from WRDS to your Dropbox folders! For example, if I want to download all files with names containing the word get to my local Dropbox folder .\Dropbox\Blogbackup\blogdata, I simply run the bash file syncwrds.sh as follows.

1
[yourwrdsusername@wrds-cloud-login1-w ~]$ sh syncwrds.sh

It will ask you to enter the directory where you want to download the data, to which I enter /Blogbackup/blogdata, and then ask for the keyword that filenames should contain, to which I enter get. All files in your WRDS Cloud that satisfy this criterion and do not already exist in /Blogbackup/blogdata will then be downloaded to your designated local Dropbox folder /Blogbackup/blogdata.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[yourwrdsusername@wrds-cloud-login1-w ~]$ sh syncwrds.sh
Enter the directory to download to: /Blogbackup/blogdata
Enter the keywords to search for in filenames: get
Uploading 70 KiB/70 KiB
Uploaded getclinical.log
File getclinical.sas already exists in /Blogbackup/blogdata, skipping download.
Uploading 8.2 KiB/8.2 KiB
Uploaded getlinksori.sas
Uploading 8.4 KiB/8.4 KiB
Uploaded getlinks.sas
All matching files have been processed.

Discussion

Note that the calculation method in this post is relatively rough, as it cannot distinguish literal ‘off-exchange one-share’ trades from fractional trades—they appear identical in the order book. For those who prefer more precise measures of fractional trading, I recommend Bartlett et al. (2024 JFE). According to this study, it is technologically feasible to leverage the latency between order submission and execution to more accurately identify fractional trading.

On the other hand, the imperfection of the calculation method in this blog post creates unique research opportunities: Although ‘real fractional trading’ only appears after November 2019, using ‘off-exchange one-share trades’ as a proxy for fractional trading allows researchers to observe ‘placebo’ fractional trades prior to 2019, which bodes well for the design of quasi-natural experiments.

A powerful case comes from Da et al. (2024, RFS), who find that, relative to cheap stocks (e.g., lower than $80 per share), more expensive ones attracted more fractional trading after November 2019. This finding supports the idea that fractional trading relaxes investors’ capital constraints and allows them to invest in stocks they could not afford without the option to buy in slices.


Figure 3: Off-Exchange One-Share Trading for High- and Low-Priced Stocks

Last but not least, by plotting the trend of ‘placebo’ fractional trading before November 2019 and the real such trading afterward, one may find that the measurement error of using off-exchange one-share trades as a proxy for fractional trading is reasonably acceptable: at least before November 2019, the number of literal off-exchange one-share trades appears to be minimal.

Conclusion

In this blog post, I follow Da et al. (2024, RFS) and present a workflow for calculating off-exchange one-share trading as a proxy for fractional trading, which has been shown to be market-moving during attention-grabbing events or under savvy coordination. Although more precise measures exist, this relatively rough proxy has an acceptable measurement error and offers additional identification advantages for researchers.

References

  1. Aggarwal, D., A. H. Choi, Y.-H. A. Lee. 2024. Retail Investors and Corporate Governance: Evidence from Zero-Commission Trading.
  2. Bartlett, R. P., J. McCrary, M. O’Hara. 2024. Tiny trades, big questions: Fractional shares. Journal of Financial Economics 157: 103836.
  3. Da, Z., V. W. Fang, W. Lin. 2024. Fractional Trading. The Review of Financial Studies.
  4. Fang VW, Madsen J, Shao X. Is It all Noise? The Microstructure Implications of Corporate Recurring Advertisements. Journal of Financial and Quantitative Analysis.
  5. Lin, W. 2024. Strategic Informed Trades and Tiny Trades.
  6. McCabe, C. 2020. New army of individual investors flexes its muscle. Wall Street Journal .
  7. Osipovich, A., L. Beilfuss. 2019. Schwab Cuts Fees on Online Stock Trades to Zero, Rattling Rivals. Wall Street Journal .