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

ModeWhat 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.
TradingViewClassic TradingView embed with all drawing tools, multiple indicators, comparisons etc. Line overlays are technically impossible (third-party widget).

Line legend (portfolio lines mode)

ColorStyleMeaning
Cyan (area)filledUnderlying close price
OrangesolidCost basis of your long stock position
RosedashedStrike of each open short PUT
EmeralddashedStrike of each open short CALL
CyandottedCurrent spot (right endpoint)
Graylong-dashedATH (all-time high) from fundamentals
VioletdashedRolling 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.
Yellowvertical dottedPast earnings (label E)
Orangevertical dottedNext earnings (label E (next))
GreendotEx-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.