Stock chart with portfolio lines
On every symbol detail page (Research -> Companies -> {Symbol}) you'll find the Stock chart button at the top right. When expanded you can switch between two renderers:
Modes
| Mode | What you see |
|---|---|
| Portfolio lines (default) | Our own recharts chart with all wheel-relevant lines. Designed to show at a glance how the price relates to your cost basis, your short strikes and the ATR risk corridor. |
| TradingView | Classic TradingView embed with all drawing tools, multiple indicators, comparisons etc. Line overlays are technically impossible (third-party widget). |
Line legend (portfolio lines mode)
| Color | Style | Meaning |
|---|---|---|
| Cyan (area) | filled | Underlying close price |
| Orange | solid | Cost basis of your long stock position |
| Rose | dashed | Strike of each open short PUT |
| Emerald | dashed | Strike of each open short CALL |
| Cyan | dotted | Current spot (right endpoint) |
| Gray | long-dashed | ATH (all-time high) from fundamentals |
| Violet | dashed | Rolling ATR52 envelope close ± ATR(52): typical move corridor from the last year, recalculated daily from High/Low/Close. Period fixed at 52 - on short zooms (1M/3M/6M/YTD) the backend automatically pulls 1y of data so ATR52 is stable from the first visible day. Labels +ATR52 / -ATR52 at the right edge, legend shows the current value. |
| Yellow | vertical dotted | Past earnings (label E) |
| Orange | vertical dotted | Next earnings (label E (next)) |
| Green | dot | Ex-dividend day (tooltip shows amount per share) |
Lines only appear when the value is available - if you don't own the stock the cost-basis line is missing, etc. That keeps the chart focused on what's actually relevant.
Controls
- Period:
- 1T / 5T (intraday, new 07/2026) — minute-level bars from
IBKR live ticks (see Intraday mode below).
- 1M / 3M / 6M / YTD / 1Y / 2Y / 5Y — daily bars from yfinance.
Your choice is remembered via browser storage and persists across symbol switches.
- Refresh (icon top right): re-fetches end-of-day data from yfinance
(no cache). In intraday mode, refresh reloads the latest ticks from DB.
- Hover: custom tooltip with date, close, vs. cost basis %
(P/L on hover) and dividend amount if it's an ex-day.
Intraday mode (1T / 5T)
Specifically for expiry days: see in minute resolution how price moves relative to your short strikes.
Data source: The existing 1-minute sync loop already fetches the spot on every price request (position sync, chain view, company detail) via the IBKR gateway (live, provided the market-data subscription is active). Every successful fetch is additionally stored in an intraday_price_ticks table, deduplicated per minute. This gives you a free minute chart for every symbol you observe. Retention: 7 days rolling.
What you additionally see in intraday mode:
- KPI top-left: distance to the nearest short strike in percent,
color-coded (green = OTM/safe, yellow = <1% buffer, red = ITM ⇒ assignment likely) with short label like CC 175: +0.72% OTM or PUT 43: -1.20% ITM ⚠️.
- Assignment zones (lightly red-tinted): For each short call the
area ABOVE the strike; for each short put the area BELOW the strike. If the price track runs into the tint -> assignment probability is high.
- Session range as thin gray H/L lines with label
(H 178.42 / L 175.10).
- All lines already present in daily mode: cost basis, strikes.
When does the chart drop out?
- Symbol never loaded: DB is empty ⇒ one-off yfinance request
for 5-min bars of the last 1-5 days (marker (yfinance backfill) under the KPI row). From the next sync tick onward, IBKR live takes over.
- Nights / weekends: The chart shows the last ticks of the previous
day / last session. This is intentional and correct.
- No IBKR market-data subscription: fallback to yfinance
(~15 min delayed). Less precise for wheel decisions in the expiry window - better activate the subscription.
Not visible in intraday mode (by design): ATR52 envelope (only defined on daily basis), ex-dividend dots, earnings markers, candles toggle (ticks don't have OHLC).
Reading examples for wheel traders
- Short put: price approaches the rose line -> strike enters ITM
range, the roll manager should flag it as recommended / urgent.
- Spot above cost basis + short call above spot -> classic wheel
position: stock running, CC collects premium without assignment risk.
- Spot between cost basis and short call -> at the CC strike,
assignment and switch back to put mode.
- ATR envelope as risk corridor: the two violet curves show the typical daily move range (close ± ATR). When price breaks outside the envelope -> unusually strong move. Strikes far outside = defensive, strikes inside the envelope = noticeable touch risk for 30-45 DTE.
- Earnings markers show whether your expiry sits before or after the
next quarterly report - relevant for IV-crush and gap risk.
- Dividend dot between today and a short call expiry -> early
assignment risk (see Filter settings help topic - days blocked before ex-dividend).
When something is missing
- ATR envelope missing on the left edge: for very new symbols with less than 52 trading days of history ATR52 can't be fully calculated - the curve starts a few days right of the chart start.
- Earnings lines missing: yfinance doesn't return an
earnings_dates table for the symbol (e.g. ETFs). Fallback to last/next from fundamentals if available.
- Dividends missing: underlying doesn't pay a dividend or the last
ex-dates are outside the visible window.
- Chart empty / "yfinance error": rare - short-term quote outages
at yfinance. Refresh after 1-2 min usually fixes it.
What the two modes can NOT do
- Portfolio lines mode doesn't let you draw, overlay volume or
indicators like RSI/MACD. That's what TradingView is for.
- In TradingView mode we can't automatically draw cost-basis or
strike lines - the TradingView widget API doesn't allow it. You'd need to add them manually with the horizontal line tool.