# My PMCC study — Amazon, 2024

Study page: https://amplialpha.org/?view=pmcc

## Purpose

Can a long-dated call replace 100 shares in a covered call with less cash up
front? I picked AMZN because it has no cash dividends. I compare one position
in four $50,000 accounts: PMCC, covered call, long call alone and 100 shares.
Unused cash earns zero. These are different exposures, not equally invested
portfolios or a claim of risk-adjusted outperformance.

The main page uses **observed option quotes with simulated fills**, not the
earlier Black–Scholes prototype (`pmcc_backtest.py`, `MODEL_README.md`).

## Data and scope

- Evaluation: January 2–December 31, 2024; prior December sessions supply the
  initial as-of snapshot, not a fitted training period.
- LSEG daily fields: BID, ASK, MID_PRICE, TRDPRC_1, DELTA, IMP_VOLT, OPINT_1,
  ACVOL_UNS. No option pricing formula creates observations.
- Long candidates: January 17, 2025 and January 16, 2026 calls; strikes
  $90–$190 in $5 steps.
- Short candidates: third-Friday monthly calls, January 2024–January 2025;
  strikes $135–$255 in $5 steps. Duplicate RICs are removed.
- Request window: December 26, 2023–January 2, 2025. January 2025 observations
  do not enter the replay. The initial connection probe is excluded.
- Stock: AMZN closes and adjustment factors from Duke WRDS / OptionMetrics.
  A changing split/distribution factor stops the run instead of mixing units.

The universe and year were set before reviewing the observed-quote results.
This is a bounded case study, not the full option chain or an untouched
holdout. Data retrieved later may include vendor revisions; I cannot certify
an original-vintage feed.

## Fixed algorithm

1. Use the previous completed session's stock close, option Delta, OI and
   quote. Require OI ≥ 100 and a non-crossed two-sided quote. Maximum spread
   `(ask-bid)/mid`: 10% for the long, 35% for the short.
2. Long: expiry nearest 450 DTE within 365–550 days on the execution date,
   then ITM strike nearest 0.80 Delta. Short: expiry nearest 35 DTE within
   28–62 days, then OTM strike nearest 0.25 Delta. The short strike must be
   above the long strike and its expiry before the long expiry.
3. Expiry ties choose earlier expiry; Delta ties choose lower strike. One
   contract per leg, 100-share multiplier; buy the long first.
4. Initial entry January 2. Thereafter write on Monday when no short is open.
   No entry in the final five sessions. A missing next-session entry quote
   means skip, not reranking candidates using future quote availability.
5. Close the short at the next EOD when it reaches seven DTE, prior Delta is
   at least 0.60, or the long needs renewal.
6. Renew the long at 180 DTE: close any short, sell old long, buy replacement
   using the same rule. A new short waits for Monday unless already Monday.
7. Liquidate everything at the predeclared December 31 close.

The covered-call account uses the same short rule and owns 100 shares. It
does not renew a long option, so its short dates can diverge. The long-only
account follows the same long selection and renewal as PMCC.

## Fills, accounting and limitations

Base: buy at that session's closing ASK, sell at BID; $0.65 per option
transaction. Stock: observed close ± $0.01/share. These are simulated EOD
fills, not known intraday executions. Snapshots cannot establish synchronized
timestamps, freshness, displayed size or execution availability.

Option mark = `(BID+ASK)/2`. NAV = cash + stock + long value − short liability.
Only recorded fills change cash. Liquidation NAV pays full bid/ask exit costs
and fees. Borrowing is rejected and all positions finish flat. This is fully
funded cash accounting, not broker Reg T buying power.

One covered-call benchmark exit has an ask but no bid. I pay that observed
ask in every scenario; I do not invent a bid or midpoint. Spread attribution
is unavailable for that one fill. Every held PMCC mark is complete. A missing
held mark or required exit-side quote stops the run: no interpolation,
forward-fill, last-trade substitution or deletion of a losing trade.

Historical early assignment is not simulated. Planned exits avoid expiry but
cannot guarantee no earlier American exercise. Assignment creates short stock
and strike cash; it does not automatically exercise the long call. A live
version needs stock-cover, assignment and margin handling. No dividends
simplifies this, not removes it. The long retains time value, so the diagonal
does not have a vertical spread's fixed maximum gain.

## Measures and checks

Return = final NAV / $50,000 − 1. Drawdown includes starting cash as the first
peak. Monthly returns use consecutive month-end NAV, starting at $50,000.
Short-cycle P&L includes credit, debit and both fees, not the whole PMCC P&L.
First debit is starting deployed cash, not maximum loss across repeated rolls.

Nine checks cross short Delta 0.20/0.25/0.30 with midpoint, halfway from mid to
touch and full bid/ask. Fees remain. The original 0.25-Delta bid/ask base stays
unchanged. These are sensitivity tests, not confidence intervals or holdouts.
All four account books and all nine results are in the JSON.

The mid/last diagnostic uses complete paired observations on PMCC traded
contracts. R² is squared Pearson correlation (OLS with an intercept). Price
level correlation is not fill probability and does not justify midpoint fills.

My result: the long call was profitable; the short overlay reduced net profit.
That is why I show the whole book, not just collected premiums. I would next
test another stock and a flat/down period with the same rule.

## Reproduce

Python 3.12, pandas, NumPy, psycopg. Exact versions and input SHA-256 hashes
are in the JSON. Fetching also needs `lseg-data` and signed-in Workspace.

The site's source ZIP contains the study engine, retrieval helper, tests,
requirements and derived records. No GitHub login is needed. After unzipping,
these checks run without source-data credentials:

```sh
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m unittest tests.test_pmcc_observed tests.test_pmcc_public_book -v
```

To regenerate prices and rerun with licensed inputs:

```sh
.venv/bin/python scripts/fetch_pmcc_lseg.py --study-2024 \
  --start 2023-12-26 --end 2025-01-02 --batch-size 24 --output ./local-lseg-pmcc
.venv/bin/python -m homework2.pmcc_observed --data ./local-lseg-pmcc \
  --stock-csv /path/to/licensed-amzn-stock.csv
```

Defaults: `Duke_535/06_Local_Data/LSEG_PMCC` and
`postgresql://localhost/duke535_research`. To use licensed exports elsewhere:

```sh
python homework2/pmcc_observed.py --data /path/to/lseg-cache \
  --stock-csv /path/to/amzn-stock.csv --output /path/to/results
```

Stock CSV: `trade_date,close,cumulative_adjustment_factor,cumulative_return_factor`.
Quote CSV: `date,ric,field,value,underlying,expiry,cp,strike`. Each quote file
has its request and SHA-256 in a JSON manifest, verified by `read_quotes()`.
The exact stock query is in `read_stock()`.

Raw licensed chains stay local. The public JSON contains derived records,
query manifests and hashes. Readers can reconcile the book without a login;
regenerating source prices requires the relevant entitlements. No credentials
are published. CSV downloads match the displayed base run.

## Sources

- [LSEG Data Library](https://developers.lseg.com/en/api-catalog/lseg-data-platform/lseg-data-library-for-python): options.
- [WRDS OptionMetrics](https://wrds-www.wharton.upenn.edu/pages/about/data-vendors/optionmetrics/): stock.
- [Fidelity / Cboe](https://www.fidelity.com/learning-center/investment-products/options/options-strategy-guide/long-diagonal-spread-calls): diagonal calls and assignment.
- [Amazon investor FAQ](https://ir.aboutamazon.com/faqs/default.aspx): dividends and splits.

AI helped with implementation and layout. The assumptions and complete book
are included so readers can check the work rather than rely on the prose.
