Skip to main content
US market 11 min read

Parabolic SAR strategy: QQQ and stock rules fail

Parabolic SAR strategy tested on QQQ and US stocks: all three rules fail robustness checks. Compare nine settings, costs and split periods.

These rules did not pass validation

Compare returns and drawdowns.

Compare results
Rules failed robustness

Parabolic SAR strategy equity curves: timing, inverse timing, individual stocks and total-return benchmark

None of the three Parabolic SAR holding designs passes all robustness checks in this experiment. From 2017-01-03 to 2026-11-09, the central QQQ timing rule returned 9.2% a year with daily Sharpe 0.68, versus 20.1% and 0.92 for QQQ total return. This is a study of a failed trading hypothesis, rather than a validated strategy to deploy.

The stock version returned -8.6% a year and won 0 of nine parameter comparisons. Applying the indicator to individual companies did not reproduce a robust advantage over QQQ. The figure compares all three central rules with the benchmark from the same starting value; click it for the full-size chart.

These trading rules are research results. To rerun the experiment, set up FinLab and download the research program (.py). Other files are in the research downloads.

Parabolic SAR strategy: dots, acceleration and reversals

Parabolic SAR is a recursive stop-and-reverse indicator. Its next level moves from the previous SAR toward the trend's extreme point. An acceleration factor determines how far it moves. New trend extremes increase that factor until it reaches a specified cap. A reversal changes the direction and restarts the acceleration process.

A compact expression is next SAR = current SAR + acceleration × (extreme point − current SAR). A complete implementation also handles reversals, the initial direction and constraints based on nearby highs and lows. Treating that expression as the whole algorithm can create a different indicator. The downloadable experiment uses TA-Lib's SAR implementation to keep these details fixed across all nine settings.

Setting What it changes Main trade-off
Acceleration step How quickly the stop tightens after new extremes Larger steps respond faster but can reverse more often
Acceleration cap The fastest permitted convergence toward the extreme A larger cap permits a tighter late-trend stop
Price input Adjusted high and low Splits should not look like ordinary price crashes
Position rule Hold when close is above SAR A bearish reading sends the account to cash

The experiment checks the closing price against SAR every session. It does not submit an intraday stop at the dot. Today's high and low are only complete at the close, and the resulting order fills at the next session's close. An overnight gap can therefore carry the execution well beyond the indicator level. Calling the result a guaranteed stop price would misdescribe the experiment.

Why a SAR reversal can be expensive in a range

A rising SAR can tighten while price makes only modest progress. A brief pullback then flips the indicator; a rebound flips it back. The chart remains easy to read because every bar has a clear direction. The trading account, however, pays for each round trip and may repeatedly sell after a decline and buy after a rebound.

The QQQ timing and inverse-timing portfolios separate this problem from stock selection. The first holds QQQ above SAR. The second holds QQQ only when that condition is false. Both keep cash at other times, and neither shorts QQQ. If the indicator reliably separated favorable from unfavorable sessions, those two paths should differ in a way that survives nearby acceleration settings and both time halves.

The individual-stock version applies the same rule to the liquid-stock universe. More names do not remove the common tendency to reverse together when the whole market changes direction. Daily equal weighting also means changes in eligibility and signal membership can trigger trades even if the headline index has a quiet day. The cost-stressed result belongs beside the zero-commission result for that reason.

SAR is a trend rule, not a momentum oscillator

An RSI or stochastic oscillator usually compares recent gains and losses or price's location in a range. SAR instead carries a directional state and an evolving extreme point. A dot below price is not a probability that the next session will rise. It says where a particular trailing mechanism currently places its boundary.

That distinction affects parameter interpretation. Raising acceleration does not simply make the same prediction more confident. It changes the path by which the boundary approaches price and therefore changes which trades occur. A setting can look excellent on one long trend and lose most of its advantage across several short reversals. The grid and split-period chart expose that dependence without selecting the best cell after the fact.

The original system and this long-or-cash test also have different cash flows. A stop-and-reverse futures system may switch from a long position into a short position. This test sells the long holding and waits. Its performance cannot be used to infer the return, margin requirement or risk of the original short side. No leverage, margin financing or short-selling borrow cost is modeled here.

Wilder (1978), New Concepts in Technical Trading Systems, includes the original Parabolic System. This study uses its SAR indicator as a long-or-cash filter. Original source.

Results: all three holding designs

Central design Annualized return (CAGR) Daily Sharpe Max drawdown First / second half Sharpe Settings beating QQQ Time invested
QQQ timing 9.2% 0.68 -38.9% 1.32 / 0.09 0 / 9 62.1%
QQQ inverse timing 9.9% 0.63 -26.2% 0.50 / 0.75 0 / 9 37.8%
Individual stocks -8.6% -0.26 -80.5% 0.16 / -0.67 0 / 9 100.0%
QQQ total return 20.1% 0.92 -35.1% 1.22 / 0.63 — 100%

Daily Sharpe here means average daily return divided by its standard deviation, multiplied by the square root of 252, without subtracting a risk-free rate. CAGR uses elapsed calendar years. Maximum drawdown is the deepest fall from a previous equity peak. These are different questions, so a higher Sharpe does not imply a higher annual return. Sharpe (1994) defines the ratio using differential returns; the zero-rate convention here is explicit.

The embedded FinLab report is the central QQQ timing rule, not the best-performing grid cell. The second downloadable report is the central stock portfolio. The headline table keeps the full common window, including cash before the first trade; a report can begin at its first executed trade. Its built-in Sharpe also has its own risk-free-rate convention, while this study's comparisons consistently use zero.

Neighboring parameters and the two halves

Acceleration step 0.01, 0.02 or 0.03; maximum acceleration 0.1, 0.2 or 0.3. The center is 0.02/0.2. Every combination was registered before reviewing results. At least seven of the nine settings must beat QQQ's same-window daily Sharpe. The central setting must also beat it in each half of the trading-day calendar. These are robustness screens on historical data, not untouched out-of-sample forecasts.

Parabolic SAR nine neighboring settings: daily Sharpe difference from the benchmark

Parabolic SAR first-half and second-half daily Sharpe for each central rule and benchmark

Blue positive cells beat the benchmark; negative cells do not. The three panels belong to timing, inverse timing and stock holding. The split-period chart compares those same central allocations with QQQ rather than changing parameters between periods. A full-window lead cannot compensate for a failed half or an unstable neighborhood.

Costs, cash and the best year

The US market default in sim() is zero commission and zero transaction tax. Each central rule is also rerun with 0.1% per side, a separate allowance for trading friction. No additional market-impact model, tax-on-capital-gains calculation or capacity estimate is supplied.

The equity curves, parameter grid, split-period chart and embedded report use zero commission. The table separates the 0.1% per-side cost results from the zero-commission BIL comparison.

Central rule CAGR at 0.1% per side Daily Sharpe at 0.1% Zero-fee Sharpe after BIL Best calendar year removed Sharpe without that year / QQQ
QQQ timing 6.6% 0.51 0.52 2020 0.48 / 0.87
QQQ inverse timing 7.3% 0.49 0.49 2024 0.54 / 0.88
Individual stocks -15.5% -0.60 -0.36 2025 -0.42 / 0.92

Subtracting BIL's daily total return gives QQQ an excess-return Sharpe of 0.81. Idle cash earns zero in the strategy; the experiment does not quietly pay Treasury returns to cash holdings. The fixed-exposure control holds the same average fraction of QQQ every day and keeps the remainder at zero-return cash. Its Sharpe for the timing allocation is 0.92, compared with 0.68 for the rule. The control excludes rebalancing costs.

Removing the central rule's best calendar year is an additional historical stress test. That year is selected from the rule's own annual returns, and the same dates are removed from the benchmark. The remaining daily returns are compounded without inserting a return across the removed interval. Passing this check cannot repair an earlier failure.

Parabolic SAR drawdowns calculated from actual portfolio equity

Universe, execution and limits of the evidence

Signals are formed after the close and executed at the following trading session’s market close in every grid and central rule.

The data end on 2026-11-09 and this run was completed on 2026-11-11, using finlab 2.3.8. US adjusted OHLC comes from us_price for stocks and us_fund_price for QQQ. QQQ's adjusted close is the total-return benchmark, computed directly from prices without transaction costs. Every comparison uses its available trading calendar.

The stock universe uses FinLab's common-stock classification, adjusted price above 5,a60−sessionaverageadjusted−price−times−volumeamountabove5, a 60-session average adjusted-price-times-volume amount above 5 million, and the 100 largest such amounts each day. The amount requires at least 20 observations. A stock is excluded after a 50% absolute daily move, using a rolling 252-session record shifted by one session. This screens earlier extreme moves; it cannot prevent the first extreme event. The common-stock classification is a present security-type filter, so historical classification changes remain a limitation.

Eligible stocks with positive indicator states receive equal target weights, recalculated daily. The market, liquidity ranking and indicator use information available at that close. No present-day S&P 500 membership list, analyst snapshot, financial-statement factor or investor's private strategy is used. Available delisted price columns are retained when they pass classification, but completeness of delisting returns is not separately audited. Financial and other sectors are not individually excluded, and there is no market-cap forecast or sector-neutral constraint.

Each stock receives 1 divided by the number of current holdings; no additional per-stock cap is imposed, so a single remaining stock can receive 100%. The fund rules allocate either 100% to QQQ or 100% to cash. Target-weight turnover for each central allocation is:

Central allocation Recorded trades Average monthly target turnover Highest month
QQQ timing 118 99.2% 250.0%
QQQ inverse timing 119 99.2% 250.0%
Individual stocks 9397 323.1% 815.8%

The central stock version averages 40.4 positions. Target-weight turnover is half the absolute daily target-weight changes, summed by month. This is not executed notional turnover: price drift and execution details can change the actual amount. A change in universe membership can require trading even without a fresh indicator reversal.

All tests are historical and in sample. Registering parameters before this run reduces within-batch cherry-picking, but the idea and market were selected with knowledge of financial history. The half-period split, grid and best-year check do not provide a statistical probability of future profit. Bailey and colleagues (2017) examine backtest overfitting; this study does not estimate their probability-of-overfitting statistic. Moskowitz, Ooi and Pedersen (2012) study futures trend following, which does not validate this indicator.

Reproduce the rule with an AI agent

Complete the FinLab setup flow with Claude Code, Codex or Gemini CLI. The agent guide explains how the skill gives your agent access to FinLab's data and backtests. The direct skill install command is:

Show Code
npx skills add koreal6803/finlab-ai --skill finlab -g -y

The browser version, FinLab Studio, also supports AI research. Ask the agent to reproduce the fixed experiment before proposing changes: “Use the downloaded Parabolic SAR research program, keep its registered dates and nine settings, and compare the three holding rules with QQQ including the cost test.” The point is to retain the definitions in the results table. A newly generated trading rule, even if it uses the same indicator name, does not reproduce this experiment.

Download the research program as research.py in the working directory. This excerpt runs the central individual-stock rule; the program's command-line options also run the complete grid. Its dependency command includes finlab, numba and TA-Lib. Login is handled by FinLab.

Show Code
import finlab
from research import load, signal, backtest
 
finlab.login()
prices, eligible = load("us")
state = signal(prices, "psar", 0.02, 0.2)
position = (state & eligible).loc["2017-01-03":"2026-11-09"]
report = backtest(position)
report.to_html("psar_stocks_report.html")

Questions about this Parabolic SAR test

What is the best setting? The middle values were fixed in advance. The heatmap supplies every neighboring outcome; no winning cell is substituted for the original rule.

Does a smaller drawdown prove the signal works? Cash can reduce both drawdown and return. The fixed-exposure and BIL comparisons ask whether the timing adds more than that reduction in participation.

Does the inverse rule mean short selling? No. It holds QQQ in the original rule's cash sessions and holds cash otherwise. Borrow fees and short-position losses are outside this experiment.

Can these results be transferred to an individual stock? The separate stock portfolio already tests a liquid universe, and its failure does not support selecting a few attractive charts afterward. Company-specific concentration adds another risk.

Does the report's Sharpe equal the table's? Not necessarily. This table consistently uses daily returns with a zero risk-free rate and a common full window. Report conventions and a first-trade start can differ.

Can I change the timeframe to intraday? That requires another dataset and new execution assumptions. Daily highs and lows cannot identify the order of intraday fills or guarantee fills at indicator boundaries.

For broader context, the US strategy studies distinguish validated rules from negative experiments. Backtesting methods explain execution and bias; the quant glossary defines the result metrics. The Bollinger Bands study tests a different volatility envelope, and Turtle trading tests channel breakouts. FinLab's research workflow and team information provide product and author context.

Research downloads

File Contents
Download research program (Python) Give this to your AI agent after setting up FinLab
Download daily balances (CSV) Daily balances for the rules and benchmark; opens in a spreadsheet
Download complete test results (JSON) Full test results for AI or coding tools
Open timing report (web) Interactive webpage; no setup or installation needed
Open stock report (web) Interactive webpage; no setup or installation needed

Past performance does not guarantee future results. This material is for research and education and is not investment advice. It does not recommend any individual stock, guarantee a stop price or promise that a historical advantage will persist.

Last updated: 2026-11 | Backtest window: 2017-01-03 to 2026-11-09 | Author: FinLab Quant Research. The team maintains reproducible Taiwan and US market studies using FinLab data.

FinLab AI

Want to build your own strategy?

Describe your stock-picking ideas in natural language. AI automatically validates, backtests, and gives you answers

Start Free

More Technical Indicators research

View all