Backtest Period
1965-2000
Markets Traded
Equities
Maximum Drawdown
Period of Rebalancing
Daily
Return (Annual)
19.4%
Sharpe Ratio
Standard Deviation (Annual)
Original paper
SSRN-id1555246.pdf825.1KB
Trading rules
- Investment universe: NYSE, Nasdaq, and Amex stocks
- Monitor market news for tax-free spinoff companies
- Invest in tax-free spinoff companies
- Short matched industry benchmark (e.g., using ETFs)
- Exclude taxable and mixed taxation distributions
- Exclude distributions classified as a return of capital
- Exclude involuntary distributions
- Maintain an equally-weighted portfolio
Python code
Backtrader
import backtrader as bt
class SpinoffStrategy(bt.Strategy):
def __init__(self):
self.spinoff_companies = set()
def next(self):
for data in self.datas:
if data.p.dataname in self.spinoff_companies:
if self.getposition(data).size == 0:
target_weight = self.broker.getvalue() / len(self.spinoff_companies)
target_size = int(target_weight / data.close[0])
self.buy(data=data, size=target_size)
if data.p.industry_benchmark:
target_weight = self.broker.getvalue() / len(self.spinoff_companies)
target_size = int(target_weight / data.close[0])
self.sell(data=data, size=target_size)
def on_market_news(self, spinoff_company, industry_benchmark):
if spinoff_company not in self.spinoff_companies:
self.spinoff_companies.add(spinoff_company)
industry_benchmark_data = bt.feeds.GenericCSVData( dataname=industry_benchmark,
dtformat=('%Y-%m-%d'),
date=0,
open=1,
high=2,
low=3,
close=4,
volume=5,
openinterest=-1,
timeframe=bt.TimeFrame.Days,
compression=1,
industry_benchmark=True
)
self.adddata(industry_benchmark_data)
self.spinoff_companies.add(industry_benchmark)
cerebro = bt.Cerebro()
cerebro.addstrategy(SpinoffStrategy)
# Add investment universe stocks data feeds
# ...
cerebro.broker.setcash(100000.0)
cerebro.broker.setcommission(commission=0.001)
cerebro.addsizer(bt.sizers.EqualWeight)
results = cerebro.run()
cerebro.plot()
Please note that this code assumes you have a method for retrieving market news and identifying tax-free spinoff companies and their industry benchmark ETFs, which is not provided here. You would need to implement that method and call on_market_news
with the appropriate parameters when new spinoff companies are identified. Additionally, you need to add the investment universe stocks data feeds as needed.