New High Strategy: Building a 48% Annual Return Momentum System with AI
Buy Stocks at All-Time Highs? Are You Crazy?
That's most investors' first reaction.
But let's look at the data: In our 2015-2025 Taiwan stock backtest, simply buying stocks hitting "300-day highs" achieved an annualized return of 18.1% with a Sharpe ratio of 0.76.
With additional revenue screening optimization, performance can improve to 48% annualized return and 1.55 Sharpe ratio.
In this article, I'll guide you through exploring this phenomenon with AI and building an executable quantitative strategy.
Note: The following are historical backtest results and do not represent future performance.
Market Phenomenon: How Do Stocks Perform After Hitting New Highs?
Before building a strategy, let's verify a hypothesis: Do stocks hitting new highs really continue to rise?
Use FinLab to analyze Taiwan stocks hitting N-day highs, testing backtest performance across different N values (20, 60, 120, 250, 300 days).
Show Code
from finlab import data
from finlab.backtest import sim
import pandas as pd
close = data.get('price:收盤價')
volume = data.get('price:成交股數')
# Test different new high periods
results = []
for n_days in [20, 60, 120, 250, 300]:
# Price hits N-day high
price_new_high = (close == close.rolling(n_days).max())
# Liquidity filter
volume_filter = volume.average(20) > 500 * 1000
# Build position
position = price_new_high & volume_filter
# Backtest
report = sim(position.loc['2015':], resample='M', position_limit=0.1, upload=False)
stats = report.get_stats()
results.append({
'N-Day High': n_days,
'CAGR': f"{stats['cagr']:.1%}",
'Sharpe': f"{stats['monthly_sharpe']:.2f}",
'Max DD': f"{stats['max_drawdown']:.1%}"
})
pd.DataFrame(results)| N-Day High | CAGR | Sharpe | Max DD |
|---|---|---|---|
| 20 | 8.8% | 0.47 | -35.5% |
| 60 | 10.2% | 0.51 | -40.4% |
| 120 | 12.3% | 0.59 | -37.3% |
| 250 | 16.7% | 0.74 | -35.3% |
| 300 | 18.1% | 0.76 | -36.4% |
The data clearly shows: the longer the new high period, the better the performance.
300-day new high returns are more than 2x the 20-day new high. This validates the "Momentum Effect"—stocks that performed strongly tend to continue performing strongly.
Why Does "Chasing Highs" Actually Work?
From a behavioral finance perspective, this phenomenon can be explained:
1. Loss Aversion Psychology
Nobel laureate Daniel Kahneman's research found that the pain of loss is 2.5 times the joy of gain. This causes most people to "fear buying high."
But when a stock hits a new high, all holders are profitable with no "trapped seller pressure." The more people fear buying high, the more undervalued these stocks become.
2. Momentum Effect
Academic research confirms: stocks that performed well over the past 6-12 months tend to continue performing well over the next 3-6 months. New highs are the strongest momentum signal.
Building the Basic Strategy with AI
Since the phenomenon exists, let's turn it into an executable strategy.
Build a "300-day new high" basic strategy:
- Entry condition: Stock price hits 300-day high
- Liquidity: 20-day average volume > 500 lots
- Monthly rebalancing, 10% position limit per stock
- Backtest period: 2015 to present
Show Code
from finlab import data
from finlab.backtest import sim
# Get data
close = data.get('price:收盤價')
volume = data.get('price:成交股數')
# Condition: 300-day new high + liquidity filter
volume_filter = volume.average(20) > 500 * 1000
position = (close == close.rolling(300).max()) & volume_filter
# Run backtest (monthly rebalancing)
report = sim(
position.loc['2015':],
resample='M',
position_limit=0.1,
upload=False
)
# Generate professional report
report.to_html('cumulative_returns.html')Basic Strategy Performance
| Metric | Value |
|---|---|
| CAGR | 18.1% |
| Sharpe Ratio | 0.76 |
| Max Drawdown | -36.4% |
| Total Return | 510% |
Performance is decent, but there are two obvious problems:
- Max drawdown -36.4% — Too volatile, many can't hold through
- Sharpe ratio only 0.76 — Room for improvement in risk-adjusted returns
Can we improve this?
Problem Analysis: Why Do False Breakouts Occur?
Analyze failed cases of the "new high" strategy. What common characteristics do these stocks share?
Observations show many "false breakouts" have these characteristics:
- Revenue didn't follow — Stock hit new high but revenue flat or declining
- Insufficient momentum — Low RSI, just a temporary bounce
- Liquidity issues — Small caps easily pumped then dumped
This gives us optimization direction: add fundamental screening to filter false breakouts.
Want to build your own strategy?
Describe your stock-picking ideas in natural language. AI automatically validates, backtests, and gives you answers
Start Free