Skip to main content Seasonal Analysis Indicator - Free ThinkOrSwim Download Skip to main content Skip to content
Master the TTM Squeeze with our comprehensive 19-module course Start Learning →
TOS Indicators
  • Tools

    Categories

    • Indicators
    • Backtesters
    • Scans
    • Dashboards
    • thinkScript
    • Member Resources
    Browse Full Library

    Featured Tutorials

    Heiken Ashi Trend Indicator
    Heiken Ashi Trend Indicator
    Indicators

    Download our Custom Heiken Ashi indicator for ThinkOrSwim. Full ThinkScript code, formula...

    Learn more →
    Commodities Tracker
    Commodities Tracker
    Indicators

    For acceleration signals: trend-following strategies and buying pullbacks. For deceleration signals: short...

    Learn more →
    Build an Election Backtester in 10 Minutes
    Build an Election Backtester in 10 Minutes
    Backtesters

    Learn how to create a Post-Election Backtester in ThinkOrSwim to analyze market...

    Learn more →

    Popular Posts

    Unusual Volume
    Unusual Volume
    Scans

    Build 4 scans to easily find stocks with greater than...

    Learn more →
    Upcoming Earnings with High Short Interest
    Upcoming Earnings with High Short Interest
    Scans

    Build a scan to find stocks that are likely to...

    Learn more →
    Unusual Volume Pro Scans
    Unusual Volume Pro Scans
    Scans

    4 additional scans to find unusual volume overlapping with key...

    Learn more →
  • Courses
    Squeeze Course
    Squeeze Course
    19 Modules

    Scan, backtest, and trade the TTM Squeeze setup with precision.

    Unlock Course →
    Earnings Course
    Earnings Course
    3 Modules

    Master earnings plays with free indicators and proven strategies for ThinkOrSwim.

    Unlock Course →
    V-Shaped Reversals
    V-Shaped Reversals
    7 Modules

    Identify and trade powerful V-shaped reversal patterns with confidence and precision.

    Unlock Course →
    Fibonacci Trading
    Fibonacci Trading
    4 Modules

    Learn to trade Fibonacci retracements and extensions in ThinkOrSwim effectively.

    Unlock Course →
  • Products
    Futures Volatility Box Premium
    Futures Volatility Box

    Volatility models for 10 major futures markets, including micros & SPX.

    Explore Futures VB →
    Stock Volatility Box Premium
    Stock Volatility Box

    Dynamic support & resistance for 595+ stocks/ETFs, with a live scanner.

    Explore Stock VB →
    Opening Range Breakouts Premium
    Opening Range Breakouts

    Powerful live scanner & backtester for ORB strategies on 595+ stocks.

    Explore ORB Setups →
My Account
Back to Tutorials
Beginner 23 minutes ThinkOrSwim

Seasonal Analysis

Analyze 20+ years of monthly performance data and win rates for any stock or ETF with color-coded labels showing the strongest months.

Download Indicator
How to install in ThinkOrSwim →
Table of Contents
  • Build a Seasonal Analysis Indicator for ThinkOrSwim
  • Why Seasonal Patterns Matter
  • Understanding the Seasonal Calculation Logic
  • Step-by-Step Implementation
  • Real-World Seasonal Patterns
  • Examples from Our Video Analysis
  • Using Your Seasonal Analysis Data
  • Combining with Other Analysis
  • Advanced Applications
  • Common Implementation Mistakes
  • Building Your Monthly Watchlist

Build Your Own Seasonal Analysis System in ThinkOrSwim

Learn how to build a custom ThinkOrSwim indicator that automatically calculates and displays historical monthly performance data for any stock, ETF, or index.

This indicator provides:

  • Win rates for each month based on 20+ years of data
  • Average monthly returns with percentage calculations
  • Color-coded labels highlighting strongest and weakest months
  • Real-time updates as new data becomes available

Perfect for identifying seasonal patterns like September’s historically weak performance or November’s strong tendencies in major indices.

Build a Seasonal Analysis Indicator for ThinkOrSwim

Seasonal patterns in the stock market are documented and measurable. September has been the worst month for the S&P 500 since 1928, averaging a -1.1% decline, while April shows positive returns 89% of the time over the past 18 years. Rather than manually researching these patterns for every stock you trade, our custom Seasonal Analysis indicator automatically calculates 20+ years of monthly performance data and displays it directly on your ThinkOrSwim charts.

Why Seasonal Patterns Matter

Seasonal effects persist because of predictable institutional behaviors. The Stock Trader’s Almanac documents that the “Best Six Months” (November-April) have outperformed May-October by significant margins since 1950. These aren’t random occurrences—they reflect systematic behavioral patterns that create trading opportunities.

Consider these documented patterns:

September Effect: September has been negative for the S&P 500 with just a 44.2% win rate since 1928, making it the only month with consistently negative returns. This occurs because institutional traders return from summer vacations and process accumulated negative news.

April Reliability: April shows remarkable consistency with positive returns in 16 of the past 18 years. Technology stocks often benefit from Q1 earnings optimism during this period.

Year-End Rally: The Santa Claus Rally occurs during the last five trading days of December plus the first two of January, averaging 1.3% gains since 1950.

Understanding the Seasonal Calculation Logic

Our indicator tracks monthly performance using open-to-close calculations across all available historical data. For each month, it calculates:

Win Rate: The percentage of years that month produced positive returns. A 70% win rate means 7 out of 10 years showed gains.

Average Return: The mean percentage return across all years, accounting for both winning and losing periods.

Sample Size: The total number of monthly data points, ensuring statistical relevance.

The code uses ThinkScript’s `getMonth()` function to identify historical periods and `TotalSum()` to aggregate performance data across multiple years.

Step-by-Step Implementation

Let’s build this indicator from scratch, starting with the basic framework and then adding each monthly calculation. This tutorial follows the same approach shown in our comprehensive video “Build a Seasonal Analysis Indicator for ThinkOrSwim in Under 25 Minutes”.

Step 1: Chart Requirements

First, we ensure the indicator only works on appropriate timeframes:

Assert(getAggregationPeriod() >= AggregationPeriod.Day, 
       "Seasonal Analysis Indicator only works on daily time frame and higher charts.");

This prevents users from applying the indicator to intraday charts where monthly analysis wouldn’t make sense.

Step 2: January Analysis Framework

We’ll build the January logic first, then replicate it for other months:

# January Analysis
def jan = getMonth() == 1;
def janOpen = if jan and !jan[1] then open else janOpen[1];
def janClose = if jan and !jan[-1] then close else janClose[1];
def janDiff = if jan and !jan[-1] and janOpen > 0 then (janClose-janOpen)/janOpen else 0;

This logic:

  • Identifies all January bars with getMonth() == 1
  • Captures the first January opening price
  • Captures the last January closing price
  • Calculates the percentage change for that January

Step 3: Statistical Calculations

Next, we count winning and losing Januaries:

def janUp = TotalSum(if jan and !jan[-1] and janDiff > 0 then 1 else 0);
def janDown = TotalSum(if jan and !jan[-1] and janDiff <= 0 then 1 else 0);
def janTotalCount = TotalSum(jan and !jan[-1]);
def janAvgDiff = TotalSum(janDiff)/janTotalCount;

This creates running totals for positive months, negative months, total samples, and average returns.

Step 4: Visual Display

We display results with color-coded labels:

AddLabel(yes, "Jan: " + AsPercent(janUp/janTotalCount) + " | " + AsPercent(janAvgDiff), 
         if(janUp/janTotalCount) > 0.5 and janAvgDiff > 0 then color.green else color.yellow);

Green labels indicate months with both above-50% win rates AND positive average returns. Yellow indicates weaker performance.

Step 5: Complete All Months

The same pattern repeats for February through December, changing only the month number in `getMonth() == [number]`.

Real-World Seasonal Patterns

Based on our analysis of historical data, here are the patterns you'll typically see:

Strongest Months: April (historically positive 70%+ of the time), November (strong year-end positioning), and December (institutional rebalancing).

Weakest Months: September (only month with negative average returns), February (post-January momentum fade), and June (summer doldrums begin).

Sector Variations: Retail stocks show November-December strength, energy stocks often perform better in winter months, and agricultural stocks follow crop cycle patterns.

Examples from Our Video Analysis

In our video analysis of market indices, we've documented specific seasonal behaviors. Our "S&P 500 November Seasonality Patterns in Bear Markets" research shows that November's typical 80-90% bullish success rate drops to just 50% during bear markets.

Our analysis in the "ThinkOrSwim Earnings Scan With Built-in Seasonality Analysis" video demonstrates how to combine earnings calendars with seasonal patterns for high-probability setups.

We've also analyzed specific stocks showing pronounced seasonal effects, including agricultural stocks that follow planting and harvest cycles, and energy stocks with winter heating demand patterns.

Using Your Seasonal Analysis Data

This data works best as a probability guide, not a guarantee. Here's how to apply it:

Position Sizing: Consider reducing position sizes during historically weak months for specific holdings. If a stock shows consistent September weakness, you might trim positions heading into September.

Entry Timing: Look for opportunities during historically weak months of strong stocks. A quality stock showing weakness during its typical weak season may present buying opportunities.

Options Strategies: Time options strategies around seasonal patterns. Consider protective puts before weak seasons or calls before historically strong periods.

Combining with Other Analysis

Seasonal patterns work best combined with:

Technical Analysis: Wait for technical confirmation before acting on seasonal patterns. A stock in a strong uptrend during its weak season may continue higher.

Fundamental Analysis: Company-specific events can override seasonal patterns. Earnings, product launches, or management changes may be more significant than historical seasonality.

Market Context: Overall market conditions matter. Strong bull markets can override individual seasonal weakness, while bear markets may extend beyond typical seasonal boundaries.

Advanced Applications

Sector Rotation: Build sector-specific seasonal calendars. Technology might show Q4 strength while utilities show summer weakness patterns.

International Markets: Different markets have different seasonal patterns. European markets may show strength during different months than U.S. markets.

Combined Analysis: Layer seasonal analysis with our Market Pulse indicator and Squeeze Course tools for comprehensive trade setups.

Common Implementation Mistakes

Over-Reliance on Patterns: Seasonal data shows tendencies, not certainties. Market conditions, economic events, and company-specific news can override seasonal effects.

Ignoring Sample Size: Newer stocks or ETFs may not have enough historical data for reliable seasonal analysis. Look for at least 15-20 years of data for meaningful patterns.

Market Timing Attempts: Don't try to time entire portfolios around seasonal patterns. Use this data to inform position sizing and risk management, not wholesale market timing.

Building Your Monthly Watchlist

Use the seasonal data to build focused monthly watchlists. Our "ThinkOrSwim Earnings Scan With Built-in Seasonality Analysis" video shows how to combine earnings calendars with seasonal patterns for high-probability setups.

This systematic approach lets you identify stocks entering their historically strong periods while avoiding those entering weak phases.

Seasonal Analysis Indicator.ts
#Seasonal Analysis Indicator

#Written by TOS Indicators

#Sample Month: December

#December

def dec = getMonth() == 12;


// ... 9 more lines ...

Unlock This Code

Create a free account to access the full source code and download files.

Create Free Account Login
Download the STUDY.ts file and import it through Studies > Edit Studies > Import. The indicator only works on daily charts or higher since it needs sufficient data to calculate monthly statistics. Once imported, it automatically displays 12 color-coded labels showing win rates and average returns for each month.
Green labels show months with both above 50% win rates AND positive average returns - these are historically strong periods. Yellow labels indicate weaker performance with either below 50% win rates or negative average returns. This color coding helps you quickly spot the strongest and weakest seasonal periods.
The indicator uses all available data in your ThinkOrSwim charts, typically 20+ years for most stocks and ETFs. The more historical data available, the more reliable the seasonal patterns become. You can see exactly how many years of data by checking the monthly sample sizes in the calculations.
September has been the worst month for stocks since 1928, averaging -1.1% declines in the S&P 500 according to historical data. This occurs because institutional traders return from summer vacations and process accumulated negative news, plus end-of-quarter rebalancing creates selling pressure. It's the only month with consistently negative average returns.
The indicator works on any symbol - individual stocks, ETFs, indexes, even futures. However, individual stocks may show less reliable patterns than broad indexes due to company-specific events. For best results, focus on liquid stocks with at least 15-20 years of trading history.
No. Seasonal analysis shows probabilities, not certainties. Use it as one factor alongside technical analysis, fundamentals, and overall market conditions. Strong trends can override seasonal weakness, and major news events can disrupt typical patterns. Think of it as weather forecasting - helpful for planning but not guaranteeing outcomes.
Layer seasonal data with momentum indicators like our Market Pulse or squeeze signals. Look for seasonal strength combined with technical breakouts, or use seasonal weakness periods to time protective strategies. Our video on combining seasonal analysis with earnings scans shows specific examples of this approach.
Yes, our research shows that seasonal patterns can behave very differently during bear markets. For example, November's typical 80-90% bullish success rate drops to just 50% during bear markets. Our analysis of "S&P 500 November Seasonality Patterns in Bear Markets" shows how to evaluate these differences systematically.

Here are some resources that you may find useful:

  • How to import an indicator into ThinkOrSwim (video tutorial)
Featured Tools:
Stock Volatility Box

Stock Volatility Box

Spot reversal zones across 600 stocks & ETFs.

  • Hourly & daily models
  • Powerful Live Scanner
  • Built for day traders
Futures Volatility Box

Futures Volatility Box

Pinpoint reversal zones in 10 major futures markets.

  • 5 models (incl. Scalper)
  • ThinkOrSwim & TradingView
  • SPX traders
ORB Setups

ORB Setups

Find the best Opening Range Breakout setups.

  • Powerful real-time scanner
  • Instant backtests
  • 2+ years data

Get Free Access

Create a free account for downloads and new tutorial alerts.

Create Free Account

More Tutorials Like This

Dollar Cost Average Calculator

Dollar Cost Average Calculator

Beginner-Friendly • 30 mins
Extreme TICK Counter

Extreme TICK Counter

Beginner • 9 minutes
Advanced Volume Zone Oscillator

Advanced Volume Zone Oscillator

Beginner-Friendly • 25 mins

Ready to Trade With an Edge?

Join 40,000+ traders using institutional-grade tools for ThinkOrSwim.

Get the Bundle
TOS Indicators

Premium thinkorswim indicators, scans, and trading tools to help you trade smarter.

ThinkOrSwim Tools

  • Indicators
  • Scans
  • Backtesters
  • Dashboards
  • thinkScript
  • Browse All

Courses

  • Squeeze Course
  • Earnings Course
  • V-Shaped Reversals
  • Fibonacci Trading

Products

  • Futures Volatility Box
  • Stock Volatility Box
  • ORB Setups
  • Shop All

Guides

  • TTM Squeeze
  • Automated Trading
  • Volatility Trading
  • Opening Range Breakouts
  • Trade Reports
  • Contact Us

© 2026 TOS Indicators. All rights reserved.

Privacy Policy Terms of Service Disclaimer

The information contained on this website is solely for educational purposes, and does not constitute investment advice. The risk of trading in securities markets can be substantial. You must review and agree to our Terms of Service prior to using this site.

U.S. Government Required Disclaimer - Commodity Futures Trading Commission. Futures and options trading has large potential rewards, but also large potential risk. You must be aware of the risks and be willing to accept them in order to invest in the futures and options markets. Don't trade with money you can't afford to lose. This website is neither a solicitation nor an offer to Buy/Sell futures or options. No representation is being made that any account will or is likely to achieve profits or losses similar to those discussed on this website. The past performance of any trading system or methodology is not necessarily indicative of future results.

Individual results may vary, and testimonials are not claimed to represent typical results. All testimonials are by real people, and may not reflect the typical purchaser's experience, and are not intended to represent or guarantee that anyone will achieve the same or similar results.

TOS Indicator's Traders and employees will NEVER manage or offer to manage a customer or individual's options, stocks, currencies, futures, or any financial markets or securities account. If someone claiming to represent or be associated with TOS Indicator solicits you for money or offers to manage your trading account, do not provide any personal information and contact us immediately.

CFTC RULE 4.41 - HYPOTHETICAL OR SIMULATED PERFORMANCE RESULTS HAVE CERTAIN LIMITATIONS. UNLIKE AN ACTUAL PERFORMANCE RECORD, SIMULATED RESULTS DO NOT REPRESENT ACTUAL TRADING. ALSO, SINCE THE TRADES HAVE NOT BEEN EXECUTED, THE RESULTS MAY HAVE UNDER-OR-OVER COMPENSATED FOR THE IMPACT, IF ANY, OF CERTAIN MARKET FACTORS, SUCH AS LACK OF LIQUIDITY, SIMULATED TRADING PROGRAMS IN GENERAL ARE ALSO SUBJECT TO THE FACT THAT THEY ARE DESIGNED WITH THE BENEFIT OF HINDSIGHT. NO REPRESENTATION IS BEING MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFIT OR LOSSES SIMILAR TO THOSE SHOWN.