Skip to main content

Configuration

tradeGIST is configured in two places:

  1. The ⚙️ Settings dialog — global settings that apply to your whole portfolio (base currency, matching method, API keys, snapshot timing, caching, wash sale rules).
  2. The Configuration sheet — the per-asset and per-account data: your asset list, accounts, categories, option contracts, tax rates, stock splits, chart settings, and more.

Proper configuration in both places ensures accurate tracking and reporting of your portfolio.

⚙️ Settings dialog

Open the tradeGIST menu and click ⚙️ Settings to manage the core settings of the add-on. The dialog is organized into tabs: the General tab holds the core settings (Portfolio, Snapshots, External API keys, Caching / performance, and Tax), and the Dashboard tab configures your Dashboard sheet's header and charts.

In-sheet formulas

The Portfolio base currency value is mirrored to a sheet named range called base_currency, so you can reference it from your own in-sheet formulas (for example, =base_currency).

General

The General tab holds the core settings, grouped into the sections below.

Portfolio

  • Portfolio base currency: The primary currency for your portfolio (e.g., USD, EUR). Default: USD.
    Note: All values will be converted to this currency under the columns with "b. curr.".

Snapshots

  • Automated snapshots: Master toggle for daily portfolio snapshots. When enabled, the snapshot-related settings below become active. See the Snapshots documentation.
  • Daily snapshot hour: The hour (in 24-hour format, GMT) when daily snapshots are taken.
    Example: Set to 9 for 9 AM snapshots.

External API keys

  • CoinMarketCap API key: Your CoinMarketCap API key for fetching cryptocurrency prices. Obtain it from CoinMarketCap.
    Note: Required for crypto assets; leave blank if not trading crypto or if you prefer to use your own method to update the prices.
  • Massive API key: Your Massive.com API key for fetching stock and options data. Obtain it from Massive.com.
    Note: Required for options; leave blank if not needed or if you prefer to use your own method to update the prices. At least an "Options Starter" subscription is needed to fetch live snapshot prices.
  • FX rate API key PRO: Your ExchangeRate-API key for fetching historical currency exchange rates. Obtain it from ExchangeRate-API.
    Note: This key is recommended (not required) to use the automated Update selected FX rates menu tool. While the key allows for hourly data updates, a paid subscription is required if you need to retrieve historical exchange data for past transactions.

Tip: Each key has a Test button that verifies it with a single lightweight request (it uses one request from your quota but fetches no portfolio data).

Caching / performance

  • Trades cache: Enables the incremental caching engine for trade generation. When active, the script only processes new transaction rows since the last scan, significantly improving performance for large datasets. See the Performance and Caching documentation for more information.
    Note: If you edit, delete, or insert any historical transaction rows, you must manually clear the trades cache via the menu to ensure data integrity.
  • Configuration cache: Caches all values from the Configuration sheet in memory to eliminate redundant spreadsheet "read" calls.
    Note: Enable this only after finalizing your settings. If you make any changes to the Configuration sheet, you must manually clear the configuration cache for the changes to take effect.

Tax

  • Matching method: Determines the method for matching buy and sell transactions. Options are "LIFO" (Last In, First Out) or "FIFO" (First In, First Out). Default: FIFO.
    Example: Set to "FIFO" if you want to sell the oldest shares first.

  • Wash sale detection PRO: Toggle for wash sale detection ("Detect wash sales and adjust P&L"). When enabled, the trades generator scans for losses that are "washed" by a substantially-identical replacement purchased within the wash sale window, defers the disallowed portion, and adjusts the replacement lot's cost basis. Off by default.
    Note: When enabled, the Wash Sale Adj. column is populated on the Trades sheet — negative on the loss row (deferral), positive on the replacement row (basis boost). The Net P&L and Tax value columns reflect the post-adjustment values; Asset P&L continues to show the original economic loss for performance reporting. Turn it on if you are in a jurisdiction with a wash sale rule and want to track it.

  • Wash sale window (days): Number of days before AND after a loss event to scan for substantially-identical replacement purchases. Default: 30.
    Example: The default value of 30 produces the standard US 61-day window (30 days before the loss, the day of the loss, and 30 days after). Adjust this if your jurisdiction uses a different window — e.g. Canada's superficial loss rule uses 30 days as well, but some other countries differ.

  • Wash sale method: Strictness of the "substantially identical" test when matching options against each other. Default: M2.
    Options:

    • M2 (broker default): For options-to-options matching, a replacement must share the same underlying root, same option type (call/put), same strike, and same expiration date. This is what major brokers report on the 1099-B and what most US tax software defaults to.
    • M1 (conservative): For options-to-options matching, only the same underlying root and option type are required — strike and expiration date are ignored. Any call on a given underlying is treated as identical to any other call on that underlying. Use this when you want the most aggressive tax-loss-harvesting protection, or when reasoning by economic exposure rather than contract identity.

    Note: Cross stock↔option matching (e.g. selling stock at a loss then buying an option on the same underlying) applies under both methods, per §1091(a). The method only changes how strictly options-to-options matches are evaluated.

The Identical assets button in this section lets you declare extra tickers that should be treated as substantially identical — see Wash Sale Detection: Identical Assets below.

Dashboard

The Dashboard tab configures the parameters that drive your Dashboard sheet, grouped into Header and Charts.

  • Portfolio change window — Shown in your Dashboard header as the change between your current portfolio total and its value this many Days ago.

Charts

  • Overall performance — The main chart in your Dashboard's hero section, plotting your portfolio's total value day by day. Lookup days sets how far back it reaches (e.g., 7 for the past week, 30 for the past month, 365 for the past year).
  • Assets ROI — A bar chart showing each asset's overall ROI. To stay readable, it plots your best and worst performers and drops the unremarkable middle; Num assets sets how many bars to show in total.
  • Assets performance — The same idea as Assets ROI, but measured over a recent window: each bar is an asset's ROI over the last Num days. Num assets sets how many bars to show.

License

Manage your license from the License tab (or the 🔑 Manage License menu item, which opens the same tab). Here you can activate or change your license key and Refresh to pull your latest license from our servers on demand.

You can also manage your subscription without leaving the spreadsheet. Every subscription change is confirmed with a 6-digit code emailed to your license address:

  • Upgrade to Pro — on the Starter plan, an Upgrade to Pro panel charges the card on file a prorated amount for the rest of your current period and switches you to Pro immediately, with no checkout page or re-entering payment details.
  • Cancel subscription — stops auto-renewal; you keep full access until your renewal date.
  • Restart subscription — turns auto-renewal back on if you previously cancelled.
App information

App diagnostics — template and script versions plus your support key — are on the App information tab.

The Configuration sheet

The Configuration sheet holds the per-asset and per-account data the add-on relies on. Each section below corresponds to a labeled block in the sheet.

Asset Configuration

Define all assets you trade here. Each asset requires specific details for accurate tracking.

For each asset, configure the following columns:

  • Ticker: The ticker symbol (e.g., TSLA for Tesla stock).
  • Asset type: Either "equity" or "crypto".
  • Current price: Leave blank; it updates automatically via "Update prices".
  • Currency: The asset's trading currency (e.g., USD).
  • CMC_id: The CoinMarketCap UUID for crypto assets (leave blank for equities). Only required if the Symbol is not returning the correct coin's price.
  • Sector: The market sector the asset belongs to (e.g., "Information Technology"). Used for sector breakdowns in the Trades sheet and analysis.
  • Industry: The industry classification (e.g., "Semiconductors"). Optional, complements Sector.
  • Take snapshot: Checkbox to include the asset in daily snapshots.
  • Data entry: Controls how the Current price is updated when you run "Update prices". One of:
    • Auto (default): Preserves any existing value or formula in the price cell. For an empty equity cell it inserts the standard GOOGLEFINANCE formula; for crypto it fetches the CoinMarketCap price.
    • GoogleFinance: Always (re)writes the =GOOGLEFINANCE(...) formula, overwriting whatever is in the cell. Equity assets only.
    • CoinMarketCap: Always writes the fetched CoinMarketCap price, overwriting any existing formula. Crypto assets only.
    • Manual: Skips the price update entirely — your cell value or formula is left untouched. Use this if you maintain the price yourself.

Example: For Bitcoin, set Symbol to "BTC", Asset type to "crypto", Currency to "USD", CMC_id: leave blank as there is only one BTC, and tick "Take snapshot".

Note: Run "Update prices" to populate the current price column.

Sectors

The list of market sectors you can assign to your assets. The template ships with a set of common sectors pre-populated, and you can add, rename, or remove entries to match your portfolio. These values populate the Sector dropdown in the Asset Configuration section above.

Industries

The list of industries you can assign to your assets. As with sectors, the template comes pre-populated with common industries, and you can add or remove entries as you see fit. These values populate the Industry dropdown in the Asset Configuration section.

Accounts

List the accounts you use for your transactions — one per row. Each account appears in the Account dropdown when you enter a transaction. For each account you also set how it is taxed and matched:

  • Account: The account name (e.g., "Fidelity", "Kraken").
  • Tax group: The tax entity the account belongs to. Accounts that share the same tax group are taxed together, using that group's rows in the Tax Rates section. Leave it blank to keep the account in the default group (which covers every account without an explicit group).
  • Isolated: Controls how the account's trades are matched.
    • Unticked (default): The account's buys and sells can be matched against transactions in other accounts of the same tax group. Use this when your jurisdiction pools holdings across accounts — for example, you hold the same shares at two brokers and a sale must be matched against buys from either.
    • Ticked: The account is matched in isolation — only its own transactions match against each other, never across accounts. It still uses its tax group's rates.

Example: an account named "Fidelity" in the tax group "Personal", and "MyCompany LLC" in the tax group "Company" with Isolated ticked.

Wash sales respect tax groups

When wash sale detection is enabled, the wash-sale scan runs independently per tax group — a loss in one tax entity is never washed by a purchase in another.

Note: If you don't need to separate accounts for tax purposes, just list the account names and leave Tax group and Isolated empty — everything stays in the default group.

Tax groups

The list of tax groups you can assign to your accounts. Add one group name per row (e.g., "Personal", "Company"). These names populate the Tax group dropdowns in the Accounts and Tax Rates sections, so you can assign each account to a group and set that group's rates.

Note: Leave this empty if you don't separate accounts by tax entity — everything then falls under the default group.

Tax Rates

Set tax rates for different asset types and holding periods.

Each row starts with a Tax group column, followed by the Year and then the rates. For each asset type (equity, options, crypto), specify rates for "long" (held >365 days) and "short" (held ≤365 days) trades. Add rows for additional years.

  • Tax group: The tax entity these rates apply to. Leave this cell blank (or enter __general__) for the default group, which covers every account not explicitly assigned to another group. Only fill it in if you assign accounts to tax groups in the Accounts section.
  • Year: The calendar year the rates apply to. The add-on falls back to the most recent earlier year within the same group when a year has no row.

Example (default group):

  • Equity, Long: 15%
  • Equity, Short: 30%
  • Crypto, Long: 0% (if tax-free)

Note: Rates apply to capital gains calculations.

Trades Categories

Define categories for classifying trades. Refer to the Trades Categories documentation for detailed guidance.

Example:

  • Trading
  • HODL

Note: Custom categories help in analyzing matching trades within a specific category without taking into consideration taxes.

Dividends

The Dividends section tracks the per-share amounts and upcoming dates for your dividend-paying holdings. The Ticker column is auto-populated with the equity assets that currently have an open position — never edit it. The Data entry column decides who fills in the rest of the row: Auto / Massive lets the add-on fetch and write the data when you run Update dividends info, while Manual leaves those columns for you to fill in yourself.

See the Dividends guide for full details, including the Dividends sheet.

Option Contracts

Configure options contracts you trade. Enter only the Ticker (e.g., "NVDA271217C00090000"), and other fields auto-populate if you copy/paste the example row provided in the template.

  • Ticker: The full options ticker.
  • Current price: Updates via "Update prices".
  • Current delta: The option Delta greek. It updates via "Update prices".
  • Root symbol: The underlying root symbol. Auto-filled (formula in row 3).
  • Strike: Auto-filled (formula in row 3).
  • Type: Auto-filled (formula in row 3).
  • Exp. date: Auto-filled (formula in row 3).
  • Days to exp.: Auto-filled (formula in row 3).
  • Has open trades: Flag to indicates if there are open positions for the option contract ("yes" or "no"). Automatically set after running "Generate trades". You can safely remove contracts with "no" from the list.
  • Data entry: Controls how the Current price and Current delta are updated when you run "Update prices". One of:
    • Auto (default): Fetches the live price and delta from Massive when an API key is configured. If no key is set, the existing cell is preserved (so a temporarily removed key never wipes your data).
    • Massive: Always fetches the live price and delta from the Massive API.
    • Manual: Never overwritten — your price and delta cells (value or formula) are left untouched.

Example: Enter "AAPL270315C00150000" for an Apple call option expiring March 15, 2027.

Note: Ensure the ticker format is correct for auto-extraction.

Stock Splits

Record stock splits for equities (or root symbols for options-only assets).

  • Date: The split date (e.g., 2022-08-25).
  • Ticker: The equity ticker (e.g., TSLA).
  • Split amount: The split ratio (e.g., "10" for a 10/1 split or "0.1" for a 1/10 reverse split).

Example: For a 2-for-1 split of AAPL on 2020-08-31, enter Date: 2020-08-31, Ticker: AAPL, Split amount: 2.

Note: This adjusts historical prices and holdings.

Snapshot Custom Data PRO

Add custom key-value pairs to save in daily snapshots for analysis. See Snapshots documentation.

Example:

  • Key: usdeur, Value: =GOOGLEFINANCE("USDEUR") (stores USD/EUR exchange rate).

Note: Use Google Sheets™ formulas for dynamic values.

Wash Sale Detection: Identical Assets PRO

By default, the wash sale detector treats two trades as substantially identical only when they share the same underlying ticker (or option root symbol). Use this section to declare additional tickers that should also be considered substantially identical — for example, two ETFs that track the same index, an ETF and its leveraged variant, or a holding company and the same exposure under a different listing.

Edit from the Settings dialog

This list lives in the Configuration sheet, but you can jump straight to it from the Tax section of the Settings dialog using the Edit in sheet ↗ button next to the wash sale options.

Each row of this section defines one equivalence group. Within a row, list the tickers separated by commas in a single cell. Whitespace around each ticker is ignored.

Identical tickers: A comma-separated list of two or more tickers that should be matched against each other during wash sale detection. Rows with fewer than 2 tickers are ignored.

Examples:

  • Row 1: VOO, SPY, IVV — all three S&P 500 ETFs are treated as substantially identical to one another.
  • Row 2: QQQ, QQQM — Nasdaq-100 ETF and its lower-fee Mini variant.
  • Row 3: SPY, SSO, UPRO — S&P 500 ETF together with its 2x and 3x leveraged variants.

Important Notes:

  • Bidirectional Matching: Groups work both ways. Declaring VOO, SPY means a loss on VOO will match a replacement purchase of SPY, and vice versa.
  • Combined Groups: Overlapping rows are combined automatically. If Row 1 is A, B and Row 2 is B, C, then A, B, and C all end up in the same equivalence group.
  • Options Behavior: The equivalence also applies to option root symbols. A group like SPY, IVV will match an SPY call against an IVV call (provided other "substantially identical" rules pass based on your Wash sale method setting).
  • Formatting: Tickers cannot contain internal whitespace. A value like VOO BAD is rejected with an error.
  • Default State: Leave this section completely empty if you do not need any cross-ticker equivalences. By default, distinct tickers are never considered identical.