← All ideas
#054NewMomentumSwing

Ranking stocks by strategy profit: top N with latitude instead of a stop

A trend strategy is run across 500 stocks, and the stocks are ranked by the strategy's profit on each over recent months. We hold the 10-20 best among those with an open position and exit when a stock falls in the ranking. No stops.

The Algorithmic Advantage · Perry Kaufman · Watch video

Markets

Stocks, Futures

Timeframe

D1

Data

OHLC, Instrument universe

Rules

Partly formalised

Difficulty

Hard

Status

Untested

Some rules were added by us and are marked in the text.

TradingView needs data or workarounds
EasyLanguage has pitfalls
MetaTrader 5 needs data or workarounds

Idea in brief

Perry Kaufman trades stocks and futures with one trend model. It has seven indicators: five trends of different lengths and two confirmations. In stocks Kaufman enters only long and only when all seven point up.

Kaufman picks stocks for the portfolio in an unusual way. The strategy is run across a list of about 500 stocks, and for each one Kaufman records how much the strategy made on it over recent months. All stocks are ranked by this profit, not by price gains. Then the stocks where the strategy currently has no open position are removed from the ranking, and the top 10-20 of the remaining ones go into the portfolio.

The ranking is recalculated every day. A stock leaves the portfolio when it falls a few places below the top boundary. Kaufman calls this latitude, four places in the example. There is no stop-loss, the ranking plays its role. A stock can be sold even at a profit if another one is working better.

The difference from the "Dual momentum" card and from ROC rotations lies in what gets ranked. There, the ranking is built on the asset's return. Here, it is built on how much a specific strategy managed to extract from the asset. According to Kaufman, ranking by the stocks' own returns did not work.

Why it might work

Kaufman relies on the persistence of moves. If a market is already going well and all seven indicators are long, it tends to continue for some time. Stocks like Nvidia and Apple from Kaufman's example make most of the portfolio's profit.

The host puts forward an idea that Kaufman agrees with: price by itself says little about whether a stock is suitable. What matters is how the strategy interacts with that price. The strategy's profit on a stock captures both the strength of the trend and how well the trend suits the specific entry and exit rules.

Ranking as an exit solves a known problem of long-term trend following. A trend system on a single stock exits late and gives back a noticeable part of the profit. Here a stock only has to drop out of the top, and a stronger one takes its place. According to the author, the holding period is cut roughly in half, while long trends remain the basis of selection.

All of this is the author's explanation. The interview has no final return figures for the method.

Rules

Base strategy on each stock

// author: five trends and two confirmations, in stocks entry when all seven are long
// the author did not disclose the indicators; trend periods are chosen in the 30-120 day range
// Finetiq: a substitute to test the ranking idea itself
T(n)     = Close > SMA(Close, n)    for n in [30, 45, 60, 90, 120]   // Finetiq
Confirm1 = SMA(Close, 30) > SMA(Close, 30)[5]                        // Finetiq: the short average is rising
Confirm2 = SMA(Close, 60) > SMA(Close, 120)                          // Finetiq
AllLong  = all five T(n) AND Confirm1 AND Confirm2

// the shadow strategy is always calculated on every stock,
// regardless of whether the stock is in the portfolio
IF AllLong AND no shadow position              THEN shadow buy AT NEXT BAR OPEN
IF Close < SMA(Close, 60) AND shadow position  THEN shadow sell AT NEXT BAR OPEN   // Finetiq: exit not named
ShadowShares = 10000 / Close at entry      // author: $10 000 per stock
ShadowEquity = profit of closed shadow trades + open profit at the current price

W         = 63 bars                        // author: 3-6 months, elsewhere 30-60 days; Finetiq: 63
ShadowPnL = ShadowEquity - ShadowEquity[W] // Finetiq: profit over the window

Selection, ranking and exit (author)

Universe = about 500 stocks, Close >= 10         // author: no stocks cheaper than $10
N        = 10                                    // author: 10-20
Latitude = 4                                     // author: "say, four" places

// every day after the close (author)
Eligible = [x in Universe : the shadow strategy has an open position on x]   // author
Rank(x)  = place of x in Eligible by ShadowPnL(x), descending              // author: absolute profit
// author: ranks all stocks and removes those without a position.
// Finetiq: place and latitude are counted after the removal, so the top always holds N stocks with a position

FOR each x in Portfolio
    IF x NOT in Eligible                         // Finetiq: the base strategy exited on its own
        SELL x AT NEXT BAR OPEN
    ELSE IF Rank(x) > N + Latitude               // author: dropped out of the top, with latitude
        SELL x AT NEXT BAR OPEN

WHILE the portfolio holds fewer than N stocks
    BUY the best-ranked stock from Eligible that is not in the portfolio, AT NEXT BAR OPEN
    // Shares = 10000 / Close (author)
// no stop-loss (author)

Overheating of a stock and of the whole portfolio (partly author)

Vol20(x) = StdDev(ln(Close / Close[1]), 20) * sqrt(252)   // author: annualized 20-day volatility
IF Vol20(x) > 50%                                          // author: threshold for a typical stock
    wait for a sign of a top, then SELL x AT NEXT BAR OPEN  // author: do not sell right away
    // Finetiq: sign of a top = a close below the low of the last 5 bars

// author: when losses hit the whole portfolio at once, the author exits the entire portfolio
// and returns after volatility declines and daily results stabilize.
// The author called the rule a secret. The number 0.32 was mentioned without units, so it cannot be formalized

Futures (author)

// the same ranking by strategy profit, positions in both directions
// author: indices and interest rates long only, other markets in both directions
Sectors = number of distinct sectors among the selected markets
IF Sectors = 1  THEN leverage × 0.50      // author
IF Sectors = 2  THEN leverage × 0.75      // author: a 25% reduction
IF Sectors >= 3 THEN leverage × 1.00      // author

Version for one or two symbols (Finetiq)

Ranking cannot be tested on a single symbol. A weaker form can be tested: take the strategy's signal only when the strategy itself has recently made money on this symbol.

IF AllLong AND ShadowPnL > 0 AND no position
    BUY AT NEXT BAR OPEN
IF (no shadow position OR ShadowPnL <= 0) AND position open
    SELL AT NEXT BAR OPEN

// two symbols: the real position is opened where ShadowPnL is higher

Parameters

Parameter Value Source
Base model five trends and two confirmations, all long author
Model indicators five SMAs of 30-120 and two confirmations Finetiq
Base model exit close below SMA 60 Finetiq
Candidates about 500 stocks author
Minimum price $10 author
Size $10,000 per stock, divided by price author
Ranking measure absolute strategy profit over the window author
Ranking window 3-6 months or 30-60 days author (two versions)
Window in bars 63 Finetiq
Selection condition the strategy has an open position author
Number of stocks 10-20 author
Latitude 4 places author (example)
Recalculation every day author
Stop-loss none author
Volatility threshold 50% annualized over 20 days author
Sign of a top close below the 5-bar low Finetiq
Futures: leverage 1 sector −50%, 2 sectors −25% author

What to test

  1. What to rank. One universe and one base strategy, five rankings: strategy profit, the stock's own return over the same window, the Sharpe ratio of shadow trades, the return-to-risk ratio (Finetiq: profit over the window divided by the maximum drawdown of the shadow equity curve), and days to recover from a drawdown. Kaufman claims only the first one works. This is the card's main test.
  2. Window. 30, 60, 90 and 126 days. The author named two ranges in the same interview, so test both.
  3. Latitude and turnover. A latitude of 0, 2, 4 and 8 places. Look at the average holding period (the author cites 16-17 days), trades per year and the result after commissions and spread.
  4. Number of stocks. 10, 20 and 50 versus the S&P 500 with dividends. The author expects 50 stocks to deliver the index result.
  5. Ranking versus a stop. The same entries, but exit only on the base strategy's signal and a 3 ATR stop. If the ranking is not better, its benefit lies in selection, not in the exit.
  6. A different base strategy. Replace the seven indicators with an SMA 50 and 200 crossover or a 100-day breakout. The author says ranking helps almost any strategy.
  7. Candidate selection. Run the method on the whole index with historical constituents and on a list selected for trendiness over the whole history. The difference shows how much of the result comes from lookahead when building the list.

Platform notes

TradingView (Pine Script)

  • Ranking across hundreds of stocks cannot be tested as a strategy: only the chart symbol is traded, and request.security calls are limited.
  • The single-symbol version can be tested. Shadow trades have to be calculated manually in var variables: strategy.netprofit and other strategy.* fields reflect only executed trades, that is, trades that are already filtered.
  • The second symbol is read via request.security, inside which the same shadow profit function is called. The strategy will not be able to trade that symbol.
  • A size of $10,000 per trade: default_qty_type = strategy.cash, default_qty_value = 10000.

MultiCharts and TradeStation (EasyLanguage)

  • Rotation across hundreds of stocks is done in a portfolio module. In MultiCharts Portfolio Trader the selection is written as a separate portfolio money management signal that sees the values of all strategies. In TradeStation Portfolio Maestro, check in advance whether your version can rank by a value calculated by the strategy.
  • The main pitfall: NetProfit, PositionProfit and OpenPositionProfit count only executed trades. If the portfolio did not take a stock, its profit will be zero, and the stock will never make it into the ranking. Each copy of the strategy has to calculate the shadow profit itself.
  • Size in shares: Buy IntPortion(10000 / Close) shares next bar at market.
  • Daily recalculation across 500 symbols makes a heavy portfolio test. The futures version on 20-40 markets is noticeably lighter.

MetaTrader 5 (MQL5)

  • A typical broker has no universe of 500 stocks with history, only CFDs on some US stocks, without companies removed from the index. For stocks, the idea is effectively untestable here.
  • The futures version is more realistic: many brokers offer CFDs on indices, commodities, bonds and currencies, which is enough for 20-40 symbols in a multi-symbol EA.
  • The terminal's trade history cannot be used for the ranking, since it contains only real trades. Store shadow positions and profit in the EA's arrays for each symbol.
  • Sectors for the leverage rule are not labeled in MT5, so they have to be set manually as a list.

Where the idea can break

  • The author's seven indicators are not disclosed. The base strategy here is ours, and Kaufman's statements about results do not apply to it.
  • The ranking window is given in two ways: 3-6 months and 30-60 days. The extreme windows differ by more than four times (126 days versus 30), and the interview does not make clear which version is the author's main one.
  • The author built the candidate list manually: volatile stocks with low debt, and new ones were checked for trendiness using 30-120 day averages. If the test selects the list over the whole history, knowledge of the future gets into it.
  • Without stops the portfolio is vulnerable to a sector-wide decline. The host pointed out such a risk (four semiconductor stocks at once), and Kaufman agreed that it is possible, although it has not happened to Kaufman.
  • The author did not disclose the portfolio-wide exit for a broad decline. Without it, in a sharp bear market, the only protection is the base strategy's exits and the ranking.
  • The statement about beating the S&P 500 every year came from the host, not from Kaufman, and without figures.
  • Daily recalculation and a latitude of four places give a holding period of about two to three weeks. With a $10,000 position, spread and commissions are noticeable, especially on the volatile stocks the author prefers.

Sources

  • 020 - Perry Kaufman - A Wealth of Experience Trading Diversified Strategies in Futures & Equities

    The Algorithmic Advantage · Perry Kaufman · 2024-07-07

    • 28:02The model: five trends and two confirmations
    • 29:07In stocks, entry only when all seven are long
    • 32:49Running the strategy across 500 candidates
    • 33:59Ranking by the stocks' own returns does not work
    • 35:24Sharpe and recovery days did not work
    • 36:15$10,000 per stock, no stocks below $10
    • 38:463-6 month window, only stocks with a position
    • 45:2420-day volatility above 50%
    • 46:16Exiting the whole portfolio: the rule is not disclosed
    • 48:1710-20 stocks: 50 give the S&P 500 return
    • 49:0030-60 day window, daily recalculation
    • 49:33Latitude of four ranking places
    • 51:07Ranking instead of a stop-loss
    • 51:57Holding period of 30-35 days shrinks to 16-17
    • 52:51Futures: leverage by the number of sectors
    • 56:11How the 500 candidates were selected
    • 1:00:34Periods of 30-120: take the average, not the best

Author's claims

These figures and statements are the author's. We have not verified them.

  • Perry Kaufman: ranking by Sharpe, by the ratio of return to risk and by the number of days to recover from a drawdown did not work for Kaufman. Only the strategy's absolute profit worked.
  • Kaufman: ranking by the stocks' own returns without a strategy does not work. Ranking by the strategy's profit, according to Kaufman, improves almost any strategy: Kaufman applies it to futures and to two or three strategies besides the trend one.
  • Kaufman: the ranking cuts the trend system's holding period from 30-35 to 16-17 days.
  • Kaufman: 50 stocks in a portfolio give roughly the S&P 500 return. To beat the index you need to hold 10-20 and accept more risk.
  • Kaufman: for a typical stock, the alarm level of annualized 20-day volatility is about 50%.
  • Kaufman: in futures, if all selected markets come from one sector, leverage is cut by 50%, and if from two sectors, by 25%. Kaufman calls these numbers a rough estimate.
  • According to the host: Kaufman has been trading essentially the same strategies for 15 years and has beaten the S&P 500 every year. Kaufman gives no return figures in the episode.

Related ideas

Updated: 2026-09-11