Among Clenow’s strategies, the Trend Following approach is perhaps the most famous. This strategy focuses on capturing long-term market trends by using technical indicators and trendlines to identify and follow market direction. The goal is to enter the market at the beginning of a trend, ride it until it ends, and profit from its sustained movement.

At its core, the strategy is built on the belief that markets tend to move in long-term trends that can be identified and exploited. It aims to capitalize on both bullish and bearish trends, while minimizing exposure during sideways or choppy market conditions.

How It Works

Trend Following strategies commonly use technical indicators and trendlines to detect and track trends. Some of the key tools include:

  • Moving Averages (e.g., 50-day, 200-day)
  • Relative Strength Index (RSI)
  • Average True Range (ATR) for measuring volatility

These indicators help traders determine the direction and strength of a trend. Trendlines, drawn by connecting swing highs and lows, are also used to visualize trend continuation or signal potential trend reversals.

Advantages of the Strategy

  • Long-Term Stability: The strategy is designed for long-term gains and tends to perform well across various market environments.
  • Market-Agnostic: It doesn’t rely on predictions or specific market conditions — decisions are based on price behavior itself.
  • Adaptability: It works across different asset classes (stocks, futures, forex) and timeframes.

Risks and Considerations

Despite its strengths, Trend Following also comes with challenges:

  • Choppy Markets: In sideways markets, the strategy may generate false signals, leading to frequent trades and higher costs.
  • Trend Reversals: Trends don’t last forever — sudden reversals can lead to losses if not managed properly.

Because of this, risk management and position sizing are crucial components of successful Trend Following.

Java Code Example

import java.util.ArrayList;
import java.util.List;

public class TrendFollowingStrategy {

    public static void main(String[] args) {
        List<Double> prices = new ArrayList<>();
        prices.add(100.0);
        prices.add(105.0);
        prices.add(110.0);
        prices.add(95.0);
        prices.add(120.0);
        prices.add(130.0);

        List<Double> movingAverages = calculateMovingAverages(prices, 5);

        for (int i = 1; i < prices.size(); i++) {
            double currentPrice = prices.get(i);
            double previousPrice = prices.get(i - 1);
            double movingAverage = movingAverages.get(i - 1);

            if (currentPrice > movingAverage && previousPrice <= movingAverage) {
                System.out.println("Buy @ ¥" + currentPrice);
            } else if (currentPrice < movingAverage && previousPrice >= movingAverage) {
                System.out.println("Sell @ ¥" + currentPrice);
            }
        }
    }

    private static List<Double> calculateMovingAverages(List<Double> prices, int period) {
        List<Double> movingAverages = new ArrayList<>();
        for (int i = period - 1; i < prices.size(); i++) {
            double sum = 0.0;
            for (int j = i - period + 1; j <= i; j++) {
                sum += prices.get(j);
            }
            double movingAverage = sum / period;
            movingAverages.add(movingAverage);
        }
        return movingAverages;
    }
}

Python Code Example

def calculate_moving_averages(prices, period):
    moving_averages = []
    for i in range(period - 1, len(prices)):
        sum_prices = sum(prices[i - period + 1: i + 1])
        moving_average = sum_prices / period
        moving_averages.append(moving_average)
    return moving_averages

def trend_following_strategy(prices, moving_averages):
    for i in range(1, len(prices)):
        current_price = prices[i]
        previous_price = prices[i - 1]
        moving_average = moving_averages[i - 1]

        if current_price > moving_average and previous_price <= moving_average:
            print("Buy @ ¥", current_price)
        elif current_price < moving_average and previous_price >= moving_average:
            print("Sell @ ¥", current_price)

prices = [100.0, 105.0, 110.0, 95.0, 120.0, 130.0]

moving_averages = calculate_moving_averages(prices, 5)

trend_following_strategy(prices, moving_averages)