Each day's closing price (today uses a live quote when available) as a percentage of the highest daily price traded in the preceding {u} days. 100% means today's price matches the {u}-day peak.
How to use this page
This page runs the same analysis as the main page, but you set the parameters: the rolling period is how far back the reference high looks (calendar days), the buy-trigger level is a percentage of the reference high, and the sell target is a percentage of the buy price.
With the defaults (Rolling period = 120, Buy-trigger level = 80, Sell target = 170) the charts match the main page. Change a value and press Apply, and every chart and summary is recalculated from the same price history.
A caution: trying many combinations and keeping the best-looking one only fits the past, and says little about the future. Units bought on consecutive days in the same drawdown usually share the same outcome, and with a strict buy trigger a success rate can come down to just a few drawdowns. Check the unit counts in the line under each chart's title too.
Not investment advice.
Adjust parameters
Change the values below and press Apply to recalculate every chart on this page.
Now showing: Rolling period = {u}, Buy-trigger level = {v}, Sell target = {w}
Mark foreign net selling by
Net sellNet buy
These settings apply to every chart below with "Show foreign net selling" ticked.
—
Loading latest price…
Ratio over time ({u}-day peak)
Loading…
The reference peak is the rolling {u}-day high.
Loading…
View underlying data as a table
Date
Price (NT$)
{u}-day high (NT$)
Ratio
Ratio over time (all-time high)
Loading…
Same as the chart above, but the reference peak is the highest price since Jan 2010 (the earliest date TWSE can provide) instead of the rolling {u}-day high.
Loading…
View underlying data as a table
Date
Price (NT$)
All-time high (NT$)
Ratio
Since the latest {v}% point (rolling {u}-day high)
Loading…
For each day, finds the most recent date at-or-before it (which can be that day itself) when price was at or below {v}% of its {u}-day high — from the graph above — and shows that day's price as a percentage of it. The reference date resets every time a new {v}% point occurs.
Loading…
View underlying data as a table
Date
Price (NT$)
Ratio
Since the latest {v}% point (all-time high)
Loading…
Same as the chart above, but the "{v}% point" is judged against the highest price since 2010 instead of the rolling {u}-day high.
Loading…
View underlying data as a table
Date
Price (NT$)
Ratio
Custom period return
Pick a buying date and a selling date — the curve traces price as a percentage of your buying price, day by day, from the buying date to the selling date.
Loading…
View underlying data as a table
Date
Price (NT$)
Ratio
Backtest: success rate vs. target sell price (rolling {u}-day high)
Simulates buying one unit on every trading day 0050 closes at or below {v}% of its {u}-day high. For each target on the x-axis, the curve shows what share of those units reached that percentage of their buy price within 24 months.
Loading…
View underlying data as a table
Target (% of buy price)
Success rate
Successes / decidable units
Backtest: success rate vs. target sell price (all-time high)
Same buy simulation as the backtest above, but the "{v}% point" that triggers a buy is judged against the highest price since 2010 instead of the rolling {u}-day high.
Loading…
View underlying data as a table
Target (% of buy price)
Success rate
Successes / decidable units
Backtest: success rate vs. holding period (rolling {u}-day high, {w}% target)
Same simulation — buy one unit on every trading day 0050 closes at or below {v}% of its {u}-day high. The curve shows, for each holding period x, what share of those units reached {w}% of their buy price within x months.
Loading…
View underlying data as a table
Holding period (months)
Success rate
Successes / decidable units
Backtest: success rate vs. holding period (all-time high, {w}% target)
Same buy simulation as the backtest above, but the "{v}% point" that triggers a buy is judged against the highest price since 2010 instead of the rolling {u}-day high.
Loading…
View underlying data as a table
Holding period (months)
Success rate
Successes / decidable units
Methodology & limitations
Daily open/high/low/close comes from TWSE's official STOCK_DAY endpoint (free, no key required).
Free public APIs don't expose historical intraday (e.g. exact 11:00am) prices — only daily OHLC. So every historical point uses that day's close as the reference price.
For today only, once the page loads, it asks both TWSE's real-time endpoint and Yahoo Finance (about 20 minutes delayed) through our own /api/quote, and uses the newer quote, labeled when delayed, to stand in for the current price. If that fails, or if today's official close is already published, it falls back to the close.
The {u}-day window (top chart) uses the highest daily high among trading days in the preceding {u} calendar days (not including the current day). Switching between the 2Y and 10Y tabs only changes how much history is displayed — the ratio itself is always computed the same way.
Below every chart that uses the {u}-day high is a companion chart labeled "all-time high," computed exactly the same way except for the reference peak: instead of the rolling {u}-day high, it's the highest price among all preceding trading days (not including the current day) since Jan 2010 (the earliest date TWSE can provide). The all-time-high versions of "Ratio over time" and "Since the latest {v}% point" also get 2Y / 10Y / 2010- (full range) tabs. Like the other tabs, "2010-" only changes how much history is displayed — the ratio itself is computed the same way.
The "since the latest {v}% point" chart plots, for every displayed day, that day's price as a percentage of the price on the most recent day at-or-before it (which can be that day itself) when 0050 closed at or below {v}% of its trailing {u}-day high — so the reference date jumps forward each time a fresh {v}% point occurs, rather than staying fixed at one point for the whole chart.
The custom period chart snaps any weekend/holiday you pick to the nearest earlier trading day, and always starts at 100% on the buying date.
Date pickers and the 10Y tab are capped at 10 years back.
The backtest chart uses the full available history (from 2010-01-04 onward — TWSE's free endpoint rejects earlier query dates even though 0050 has traded since 2003), rather than the 10-year cap used elsewhere. Each bought unit's outcome is based on the highest closing price (as % of its buy price) reached within 24 months of purchase; if fewer than 24 months have elapsed and a given target x hasn't been reached yet, that unit is excluded as "not yet decidable" for that target — but still counts as a success if it already got there early.
The second backtest chart uses the same buy simulation but fixes the sell target at {w}% and instead sweeps the holding period. Each bought unit records how many months it actually took to reach {w}%; if a given holding period x hasn't elapsed yet and the unit hasn't reached it, that unit is excluded as "not yet decidable" for that x — but still counts as a success if it got there early.
TWSE's daily data is not split-adjusted. Any single-day price jump greater than ±15% (a level ordinary trading in a diversified 50-stock ETF doesn't produce) is treated as a stock split/reverse-split, and all earlier prices are rescaled by the nearest whole split ratio (such as June 2025's 4-for-1) to stay comparable to today's share basis.
Aside from today's live quote, all historical prices come from our own /api/prices endpoint, backed by a database that refreshes twice a day — the browser no longer fetches month-by-month from TWSE directly. That endpoint's response is also cached in your browser's local storage, so each later visit only needs to fetch whatever's new since last time, loading much faster — and the site keeps working off the last successful update even if TWSE itself is temporarily unreachable.
The rolling period counts calendar days, not trading days. Data points early in 2010 look back fewer days than the period you set because earlier data isn't available, and the longer the period, the longer that affected stretch runs.
The 24-month holding window stays fixed on this page.
At the same target, the two kinds of backtest can differ by a unit or two: the target-sell-price backtest counts 24 calendar months, while the holding-period backtest uses an average month of 30.44 days, so a unit reaching the target on exactly day 731 (a span with a leap day) counts only in the former.
Conditions 4 and 2 are checked at 11:00 and 14:00 on working days. Conditions 5, 6 and 7 are checked at 17:30 and 19:30, then at 08:00 the next morning for the previous trading day, because foreign figures are only published after the close and can occasionally be late. Signing up before 08:00 can also bring an alert for the previous trading day. Amounts in conditions 5 and 6 are TWSE's figures for foreign and mainland investors plus foreign dealers. Fund entry is detected from Ministry of Finance press releases, so the alert comes at the first check after a decision is published.
When ticked, orange marks foreign net-sell days and green marks National Stabilization Fund periods, which doesn't mean it bought every day (the fund doesn't publish daily purchases, so only each intervention's total is shown). Foreign figures are TWSE's statistics, retrieved through FinMind; 0050's net amount is foreign net shares times that day's close, from May 2, 2012. The backtest charts don't offer these marks.
This is not investment advice.
Price alert signup
Enter your email and set one or more trigger conditions below. We'll email you once a condition is met (you'll need to click the link in a confirmation email first to activate it).