πŸͺ™
 Get student discount & enjoy best sellers ~$7/week

Remember: The content and code examples provided here are designed to help readers understand concepts and principles. These are learning resources and may not be suitable for direct implementation in live environments. For customized, production-ready scripts tailored to your specific strategy and risk parameters, Consult with our expert developers.

Triple Top/Bottom

1. Introduction & Hook

Trading is a game of patterns. Among the most powerful reversal signals in technical analysis are the triple top and triple bottom formations. These patterns, when identified and acted upon correctly, can offer traders a significant edge. In this comprehensive guide, we will explore the Triple Top/Bottom strategy in Pine Script, dissect its market logic, mathematical underpinnings, and provide robust code implementations in Pine Script, Python, Node.js, . We will also discuss backtesting, risk management, multi-timeframe usage, AI/ML enhancements, and much more. Whether you are a beginner or a seasoned algorithmic trader, this article will equip you with the knowledge and tools to master the Triple Top/Bottom strategy for any market.

2. What is Triple Top/Bottom?

The Triple Top/Bottom is a classic reversal pattern in technical analysis. A triple top forms after an uptrend and signals a potential bearish reversal, while a triple bottom forms after a downtrend and signals a potential bullish reversal. Both patterns consist of three distinct peaks (tops) or troughs (bottoms) at approximately the same price level, separated by moderate pullbacks. The pattern is confirmed when price breaks the support (for triple top) or resistance (for triple bottom) after the third peak or trough.

  • Triple Top: Three peaks at similar levels, followed by a breakdown.
  • Triple Bottom: Three troughs at similar levels, followed by a breakout.

3. Market Logic Behind the Strategy

The triple top/bottom pattern reflects a battle between buyers and sellers. In a triple top, buyers attempt to push prices higher three times but fail at the same resistance level, indicating weakening bullish momentum. Sellers eventually gain control, leading to a reversal. Conversely, in a triple bottom, sellers push prices lower three times but fail to break support, signaling exhaustion and a potential bullish reversal. The pattern is most reliable when it forms after a sustained trend and is accompanied by declining volume on each successive peak or trough.

4. Mathematical Foundation & Formula

While the triple top/bottom is primarily a visual pattern, we can formalize its detection using mathematical criteria:

  • Identify three local maxima (for triple top) or minima (for triple bottom) within a specified lookback period.
  • The price difference between the peaks (or troughs) should be within a defined tolerance (e.g., 1-2%).
  • Each peak/trough should be separated by a minimum number of bars.
  • Confirmation occurs when price breaks below (triple top) or above (triple bottom) the support/resistance level formed by the pattern.

Formula (Pseudocode):

// For Triple Top
If (Peak1 β‰ˆ Peak2 β‰ˆ Peak3) AND (separated by N bars) AND (Breakdown below support)
    Signal = Bearish Reversal
// For Triple Bottom
If (Trough1 β‰ˆ Trough2 β‰ˆ Trough3) AND (separated by N bars) AND (Breakout above resistance)
    Signal = Bullish Reversal

5. Step-by-Step Calculation Example

Let’s walk through a triple top detection example:

  1. Scan the last 100 bars for local maxima.
  2. Find three peaks: Bar 20 ($105), Bar 45 ($106), Bar 70 ($104.5).
  3. Check if the price difference between peaks is within 1.5%.
  4. Ensure at least 10 bars separate each peak.
  5. Draw a support line at the lowest point between the peaks (e.g., $100).
  6. If price closes below $100 after the third peak, trigger a bearish signal.

6. Pine Script Implementation

Pine Script is ideal for implementing the triple top/bottom strategy on TradingView. Below is a well-commented Pine Script example for detecting both patterns and generating trading signals:

//@version=6
strategy("Triple Top/Bottom Strategy", overlay=true)

// --- Parameters ---
lookback = input.int(100, "Lookback Period")
tolerance = input.float(1.5, "Peak/Trough Tolerance (%)")
min_sep = input.int(10, "Min Bars Between Peaks/Troughs")

// --- Helper Functions ---
// Find local maxima/minima
is_peak(idx) =>
    high[idx] > high[idx+1] and high[idx] > high[idx-1]
is_trough(idx) =>
    low[idx] < low[idx+1] and low[idx] < low[idx-1]

// --- Detect Peaks and Troughs ---
var float[] peaks = array.new_float()
var int[] peak_idx = array.new_int()
var float[] troughs = array.new_float()
var int[] trough_idx = array.new_int()

for i = 1 to lookback-1
    if is_peak(i)
        array.unshift(peaks, high[i])
        array.unshift(peak_idx, i)
    if is_trough(i)
        array.unshift(troughs, low[i])
        array.unshift(trough_idx, i)

// --- Triple Top Detection ---
triple_top = false
if array.size(peaks) >= 3
    p1 = array.get(peaks, 0)
    p2 = array.get(peaks, 1)
    p3 = array.get(peaks, 2)
    idx1 = array.get(peak_idx, 0)
    idx2 = array.get(peak_idx, 1)
    idx3 = array.get(peak_idx, 2)
    cond1 = math.abs(p1-p2)/p1*100 < tolerance and math.abs(p2-p3)/p2*100 < tolerance
    cond2 = idx1-idx2 >= min_sep and idx2-idx3 >= min_sep
    support = math.min(low[idx1], low[idx2], low[idx3])
    cond3 = close < support
    triple_top := cond1 and cond2 and cond3

// --- Triple Bottom Detection ---
triple_bottom = false
if array.size(troughs) >= 3
    t1 = array.get(troughs, 0)
    t2 = array.get(troughs, 1)
    t3 = array.get(troughs, 2)
    idx1 = array.get(trough_idx, 0)
    idx2 = array.get(trough_idx, 1)
    idx3 = array.get(trough_idx, 2)
    cond1 = math.abs(t1-t2)/t1*100 < tolerance and math.abs(t2-t3)/t2*100 < tolerance
    cond2 = idx1-idx2 >= min_sep and idx2-idx3 >= min_sep
    resistance = math.max(high[idx1], high[idx2], high[idx3])
    cond3 = close > resistance
    triple_bottom := cond1 and cond2 and cond3

// --- Plotting and Signals ---
plotshape(triple_top, style=shape.triangledown, color=color.red, location=location.abovebar, size=size.large, title="Triple Top Signal")
plotshape(triple_bottom, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.large, title="Triple Bottom Signal")

if triple_top
    strategy.entry("Short", strategy.short)
if triple_bottom
    strategy.entry("Long", strategy.long)

7. Parameters & Customization in Pine Script

Key parameters for tuning the strategy:

  • Lookback Period: Number of bars to scan for peaks/troughs.
  • Tolerance: Maximum allowed price difference between peaks/troughs (in %).
  • Min Bars Between: Minimum bars separating each peak/trough.

Customizing these parameters allows adaptation to different assets and timeframes. For example, a volatile crypto asset may require a higher tolerance, while a blue-chip stock may work best with a lower tolerance and longer lookback.

8. Python & FastAPI + NoSQL Implementation

Algorithmic traders often want to run pattern detection server-side. Here’s a Python example using FastAPI and a NoSql Database (e.g., MongoDB) for storing detected patterns:

# triple_top_bottom.py
from fastapi import FastAPI
from typing import List
from pymongo import MongoClient
import numpy as np

app = FastAPI()
client = MongoClient("mongodb://localhost:27017/")
db = client["trading"]

@app.post("/detect_triple_pattern/")
def detect_triple_pattern(prices: List[float], tolerance: float = 1.5, min_sep: int = 10):
    peaks = []
    troughs = []
    for i in range(1, len(prices)-1):
        if prices[i] > prices[i-1] and prices[i] > prices[i+1]:
            peaks.append((i, prices[i]))
        if prices[i] < prices[i-1] and prices[i] < prices[i+1]:
            troughs.append((i, prices[i]))
    # Triple Top
    if len(peaks) >= 3:
        p1, p2, p3 = peaks[-3:]
        cond1 = abs(p1[1]-p2[1])/p1[1]*100 < tolerance and abs(p2[1]-p3[1])/p2[1]*100 < tolerance
        cond2 = p2[0]-p1[0] >= min_sep and p3[0]-p2[0] >= min_sep
        if cond1 and cond2:
            db.patterns.insert_one({"type": "triple_top", "indices": [p1[0], p2[0], p3[0]]})
            return {"pattern": "triple_top", "indices": [p1[0], p2[0], p3[0]]}
    # Triple Bottom
    if len(troughs) >= 3:
        t1, t2, t3 = troughs[-3:]
        cond1 = abs(t1[1]-t2[1])/t1[1]*100 < tolerance and abs(t2[1]-t3[1])/t2[1]*100 < tolerance
        cond2 = t2[0]-t1[0] >= min_sep and t3[0]-t2[0] >= min_sep
        if cond1 and cond2:
            db.patterns.insert_one({"type": "triple_bottom", "indices": [t1[0], t2[0], t3[0]]})
            return {"pattern": "triple_bottom", "indices": [t1[0], t2[0], t3[0]]}
    return {"pattern": None}

9. Node.js / JavaScript Implementation

For web-based or real-time applications, Node.js is a popular choice. Here’s a simple triple top/bottom detector in JavaScript:

// triplePattern.js
function detectTriplePattern(prices, tolerance = 1.5, minSep = 10) {
    let peaks = [], troughs = [];
    for (let i = 1; i < prices.length - 1; i++) {
        if (prices[i] > prices[i-1] && prices[i] > prices[i+1]) peaks.push({idx: i, val: prices[i]});
        if (prices[i] < prices[i-1] && prices[i] < prices[i+1]) troughs.push({idx: i, val: prices[i]});
    }
    // Triple Top
    if (peaks.length >= 3) {
        let [p1, p2, p3] = peaks.slice(-3);
        let cond1 = Math.abs(p1.val-p2.val)/p1.val*100 < tolerance && Math.abs(p2.val-p3.val)/p2.val*100 < tolerance;
        let cond2 = p2.idx-p1.idx >= minSep && p3.idx-p2.idx >= minSep;
        if (cond1 && cond2) return {pattern: 'triple_top', indices: [p1.idx, p2.idx, p3.idx]};
    }
    // Triple Bottom
    if (troughs.length >= 3) {
        let [t1, t2, t3] = troughs.slice(-3);
        let cond1 = Math.abs(t1.val-t2.val)/t1.val*100 < tolerance && Math.abs(t2.val-t3.val)/t2.val*100 < tolerance;
        let cond2 = t2.idx-t1.idx >= minSep && t3.idx-t2.idx >= minSep;
        if (cond1 && cond2) return {pattern: 'triple_bottom', indices: [t1.idx, t2.idx, t3.idx]};
    }
    return {pattern: null};
}

10. Backtesting & Performance Insights

Backtesting is essential to validate the effectiveness of the triple top/bottom strategy. In Pine Script, use the strategy functions to simulate trades and analyze performance metrics such as win rate, profit factor, and drawdown. Key considerations:

  • Test across multiple assets and timeframes.
  • Analyze false signals and optimize parameters.
  • Compare performance with and without confirmation indicators (e.g., RSI, MACD).

Sample Pine Script backtest output:

// After running the strategy, check the Strategy Tester tab for:
// - Net Profit
// - Max Drawdown
// - Win Rate
// - Sharpe Ratio

11. Risk Management Integration

Risk management is crucial for any trading strategy. Integrate position sizing, stop-loss, and take-profit mechanisms to protect capital and lock in profits.

  • Position Sizing: Calculate position size based on account equity and risk per trade.
  • Stop-Loss: Place stop-loss orders below support (triple bottom) or above resistance (triple top).
  • Take-Profit: Set profit targets based on pattern height or risk-reward ratio.
// Pine Script Example for Automated Exits
risk_pct = input.float(1.0, "Risk % per Trade")
account_equity = strategy.equity
risk_amt = account_equity * risk_pct / 100
stop_loss = 1.5 * syminfo.mintick
if triple_top
    strategy.entry("Short", strategy.short)
    strategy.exit("TP/SL", "Short", stop=close+stop_loss, limit=close-2*stop_loss)
if triple_bottom
    strategy.entry("Long", strategy.long)
    strategy.exit("TP/SL", "Long", stop=close-stop_loss, limit=close+2*stop_loss)

12. Combining with Other Indicators

Enhance the reliability of the triple top/bottom strategy by combining it with other technical indicators:

  • RSI: Confirm overbought/oversold conditions.
  • MACD: Validate momentum shifts.
  • Bollinger Bands: Identify volatility contractions/expansions.
// Example: Only trade triple top if RSI > 70
rsi = ta.rsi(close, 14)
if triple_top and rsi > 70
    strategy.entry("Short", strategy.short)

13. Multi-Timeframe & Multi-Asset Usage

The triple top/bottom strategy can be applied across various timeframes and asset classes:

  • Timeframes: 1-minute, 15-minute, daily, weekly.
  • Assets: Equities, forex, cryptocurrencies, options.

Use Pine Script’s request.security() to fetch higher timeframe data:

// Multi-timeframe example
htf_high = request.security(syminfo.tickerid, "D", high)
htf_low = request.security(syminfo.tickerid, "D", low)

14. AI/ML Enhancements

Machine learning can optimize the triple top/bottom strategy by tuning parameters and filtering signals. Feature engineering may include:

  • Pattern frequency
  • Pattern height/width
  • Volume at peaks/troughs
  • Confirmation from other indicators

Example: Reinforcement learning agent optimizing tolerance and lookback for maximum Sharpe ratio.

# Pseudocode for RL agent
for episode in range(episodes):
    params = agent.select_parameters()
    reward = backtest_strategy(params)
    agent.update(reward)

15. Automation with Playwright/Jest

Automated testing ensures your strategy scripts work as intended. Use playwright for end-to-end browser tests or Jest for unit testing in JavaScript.

// Jest unit test example
const { detectTriplePattern } = require('./triplePattern');
test('detects triple top', () => {
    const prices = [100, 105, 100, 106, 100, 104.5, 99];
    const result = detectTriplePattern(prices);
    expect(result.pattern).toBe('triple_top');
});

16. Advanced Variations

Advanced traders may experiment with:

  • Dynamic tolerance based on volatility
  • Volume-weighted pattern confirmation
  • Integration with order flow or sentiment data
  • Adaptive stop-loss/take-profit based on ATR

17. Common Pitfalls & Misconceptions

  • Overfitting parameters to historical data
  • Ignoring market context (e.g., news, macro events)
  • Assuming all triple tops/bottoms lead to reversals
  • Neglecting risk management
  • Failing to account for slippage and commissions

18. Conclusion & Key Takeaways

The triple top/bottom strategy is a powerful reversal tool when used correctly. By understanding its market logic, mathematical foundation, and implementation nuances, traders can harness its potential across markets and timeframes. Always combine with robust risk management and consider enhancing with AI/ML techniques for optimal results.

Glossary of Key Terms

  • Triple Top: Bearish reversal pattern with three peaks at similar levels.
  • Triple Bottom: Bullish reversal pattern with three troughs at similar levels.
  • Lookback Period: Number of bars scanned for pattern detection.
  • Tolerance: Allowed price difference between peaks/troughs.
  • Stop-Loss: Order to limit losses on a trade.
  • Take-Profit: Order to lock in profits at a target price.
  • Backtesting: Simulating strategy performance on historical data.
  • Reinforcement Learning: AI technique for optimizing strategy parameters.

Comparison Table

StrategyPatternReliabilityBest MarketConfirmation Needed?
Triple Top/Bottom3 peaks/troughsHigh (with confirmation)AllYes
Double Top/Bottom2 peaks/troughsMediumAllYes
Head & Shoulders3 peaks (middle highest)HighAllYes
RectangleMultiple highs/lowsMediumRange-boundNo

Frequently Asked Questions about Triple Top/Bottom

What is a Triple Top/Bottom in Pine Script?

A triple top/bottom is a reversal pattern in Pine Script that indicates a potential change in trend direction.

It consists of three peaks or troughs, where the third peak/trough is higher/lower than the first two, forming a 'top' or 'bottom' shape.

This pattern can be used to predict future price movements and is often used in combination with other technical indicators.

How do I identify a Triple Top/Bottom in Pine Script?

  • Look for three consecutive peaks or troughs in the chart.
  • The third peak/trough should be higher/lower than the first two, forming a 'top' or 'bottom' shape.
  • The pattern should be confirmed by additional technical indicators, such as RSI or Bollinger Bands.

It's essential to consider multiple perspectives and not rely solely on this one indicator for trading decisions.

What is the Pine Script Triple Top/Bottom strategy?

The Pine Script Triple Top/Bottom strategy involves using a custom script to identify the pattern and generate buy/sell signals.

When the pattern is identified, the script can be set to enter long or short positions based on the direction of the trend.

This strategy requires careful backtesting and optimization to ensure its effectiveness in different market conditions.

How do I optimize my Triple Top/Bottom Pine Script strategy?

  • Backtest the strategy on historical data to evaluate its performance.
  • Adjust parameters, such as the number of bars for pattern confirmation or the threshold for signal generation.
  • Test the strategy on different time frames and markets to ensure its adaptability.

Continuously monitor and refine the strategy to optimize its results.

What are some common mistakes to avoid when using the Triple Top/Bottom Pine Script strategy?

Avoid over-relying on this one indicator for trading decisions.

Consider multiple perspectives and use other technical indicators in conjunction with the triple top/bottom pattern.

  • Don't enter trades too close to the pattern, as this can increase risk.
  • Set proper risk management strategies, such as stop-loss orders, to limit potential losses.

Stay informed and adapt to changing market conditions.



How to post a request?

Posting a request is easy. Get Matched with experts within 5 minutes

  • 1:1 Live Session: $60/hour
  • MVP Development / Code Reviews: $200 budget
  • Bot Development: $400 per bot
  • Portfolio Optimization: $300 per portfolio
  • Custom Trading Strategy: $99 per strategy
  • Custom AI Agents: Starting at $100 per agent
Professional Services: Trading Debugging $60/hr, MVP Development $200, AI Trading Bot $400, Portfolio Optimization $300, Trading Strategy $99, Custom AI Agent $100. Contact for expert help.
⭐⭐⭐ 500+ Clients Helped | πŸ’― 100% Satisfaction Rate


Was this content helpful?

Help us improve this article