Skip to main content

Market Tournament Framework: A Multi-Perspective Approach to Finding Sweet Spots

· 8 min read
Max Kaido
Architect

In the ever-evolving landscape of algorithmic trading, finding optimal market conditions—what we call "sweet spots"—remains a constant challenge. Today, we're excited to introduce our innovative Market Tournament Framework, which approaches this challenge through pure indicator-based analysis, removing subjective pattern interpretation.

Core Principles

  1. Pure Indicator Focus: Eliminate subjective candlestick patterns in favor of quantifiable indicators
  2. Multi-Factor Confirmation: Each setup requires multiple indicators to align
  3. Timeframe Optimization: Each tournament type is optimized for specific timeframes
  4. Risk Management Integration: Built-in position sizing and stop-loss guidelines
  5. Clear Trigger Sequences: Well-defined action signals based on market conditions

Tournament Types (Sweet Spots)

1. Market Condition Based Tournaments

These tournaments focus on observable market states, using quantitative metrics to identify opportunities.

STRONG_TREND (Momentum Sweet Spot)

  • Purpose: Identify strong directional movements with volume confirmation
  • Optimal Timeframe: 4H/1D
  • Key Indicators:
    • RSI (Relative Strength Index) for trend strength
    • MACD (Moving Average Convergence/Divergence) for momentum confirmation
    • Volume Analysis for participation
  • Sweet Spot Characteristics:
    • Strong directional RSI (>70 or <30)
    • MACD histogram expanding
    • Volume increasing with price movement
  • Risk Management:
    • Stop: Beyond the last significant swing
    • Position Size: 1.5x standard size due to trend confirmation

VOLATILITY_BREAKOUT (Compression Sweet Spot)

  • Purpose: Detect high-probability breakout setups
  • Optimal Timeframe: 1H/4H
  • Key Indicators:
    • Bollinger Bands for volatility contraction
    • Keltner Channels for normal volatility range
    • ATR (Average True Range) for volatility confirmation
  • Sweet Spot Characteristics:
    • Bollinger Bands inside Keltner Channels
    • ATR decreasing to historical lows
    • Price coiling near significant levels
  • Risk Management:
    • Stop: Beyond the compression formation
    • Position Size: Start small, add on breakout confirmation

PRICE_EXTENSION (Overextension Sweet Spot)

  • Purpose: Identify price exhaustion points
  • Optimal Timeframe: 4H
  • Key Indicators:
    • Distance from moving averages
    • Rate of price change
    • Volume profile analysis
  • Sweet Spot Characteristics:
    • Price significantly deviated from moving averages
    • Rapid price movement with declining volume
    • Extreme readings on momentum indicators
  • Risk Management:
    • Tight stops beyond recent swing
    • Reduced position size due to counter-trend nature

2. Pattern Based Tournaments

These tournaments identify specific technical formations and indicator relationships.

INDICATOR_DIVERGENCE (Hidden Opportunity Sweet Spot)

  • Purpose: Spot divergences between price and indicators
  • Optimal Timeframe: 4H/1D
  • Key Indicators:
    • RSI Divergence patterns
    • Price Action structure
    • OBV (On Balance Volume) trends
  • Sweet Spot Characteristics:
    • Price making new lows/highs
    • Indicators showing opposite direction
    • Volume confirming the divergence
  • Risk Management:
    • Stop loss beyond the divergence structure
    • Scale in approach recommended
  • Implementation:
function calculateDivergenceScore(market: Market): number {
const priceSlope = calculatePriceSlope();
const rsiSlope = calculateRSISlope();
const obvSlope = calculateOBVSlope();

return evaluateDivergenceSignal(priceSlope, rsiSlope, obvSlope);
}

TECHNICAL_CONFLUENCE (Multi-Factor Sweet Spot)

  • Purpose: Find areas where multiple factors align
  • Optimal Timeframe: 4H
  • Key Indicators:
    • Multiple moving averages
    • Support/Resistance levels
    • Fibonacci retracements
  • Sweet Spot Characteristics:
    • Multiple technical levels converging
    • Volume showing interest at level
    • Clean price action structure
  • Risk Management:
    • Stop below the confluence zone
    • Standard position size with clear invalidation

PATTERN_COMPLETION (Formation Target Sweet Spot)

  • Purpose: Identify completion of technical formations
  • Optimal Timeframe: 1H/4H
  • Key Indicators:
    • Technical formation completion
    • Volume pattern analysis
    • Time-based factors
  • Sweet Spot Characteristics:
    • Complete formation structure
    • Volume confirming completion
    • Price reaching measured targets
  • Risk Management:
    • Trailing stops based on ATR
    • Reduce exposure near target levels

3. Market Psychology Based Tournaments

These tournaments analyze supply/demand dynamics and trader behavior patterns.

VOLUME_EXHAUSTION (Capitulation Sweet Spot)

  • Purpose: Identify potential reversal points through volume analysis
  • Optimal Timeframe: 1H/4H
  • Key Indicators:
    • Volume Profile distribution
    • Price range expansion
    • Momentum oscillators
  • Sweet Spot Characteristics:
    • Volume climax
    • Price exhaustion
    • Extreme sentiment readings
  • Risk Management:
    • Tight stops due to reversal nature
    • Start with minimal exposure, increase on confirmation
  • Implementation:
function calculateExhaustionScore(market: Market): number {
const volumeProfile = analyzeVolumeProfile();
const priceRange = analyzePriceRange();
const momentum = analyzeMomentumOscillators();

return evaluateExhaustionSignal(volumeProfile, priceRange, momentum);
}

PRICE_EQUILIBRIUM (Balance Point Sweet Spot)

  • Purpose: Find stable price zones after volatility
  • Optimal Timeframe: 4H
  • Key Indicators:
    • Volume-Weighted Average Price (VWAP)
    • Time-weighted price levels
    • Order flow analysis
  • Sweet Spot Characteristics:
    • Price finding stability
    • Volume profile showing accumulation
    • Reduced volatility after expansion
  • Risk Management:
    • Stop below the equilibrium zone
    • Standard position size with clear levels

SMART_MONEY_ACTIVITY (Distribution Sweet Spot)

  • Purpose: Detect institutional distribution patterns
  • Optimal Timeframe: 4H/1D
  • Key Indicators:
    • Volume distribution analysis
    • Price action patterns
    • Time in price zones
  • Sweet Spot Characteristics:
    • Increasing volume on small moves
    • Price unable to make new highs
    • Time spent at price levels
  • Risk Management:
    • Reduce exposure on distribution confirmation
    • Adjust protection levels to protect gains

Complementary Tournament Pairs

One of the framework's key innovations is the concept of complementary tournament pairs. Instead of strict entry/exit pairs, we combine tournaments that look for different but related market conditions.

High Confidence Pairs

  1. Volatility Cycle Pair

    • Tournaments: [VOLATILITY_BREAKOUT, STRONG_TREND]
    • Market Philosophy: Markets move from low volatility to high volatility
    • Optimal Timeframe: 4H
    • Trigger Sequence:
      1. VOLATILITY_BREAKOUT identifies compression phase
      2. STRONG_TREND confirms directional strength
    • Use Case: Identifying early trend development
    • Risk Management:
      • Tighter stops during compression
      • Wider stops during momentum phase
  2. Technical Confirmation Pair

    • Tournaments: [INDICATOR_DIVERGENCE, TECHNICAL_CONFLUENCE]
    • Market Philosophy: Technical factors align with underlying strength
    • Optimal Timeframe: 4H/1D
    • Trigger Sequence:
      1. INDICATOR_DIVERGENCE spots hidden strength/weakness
      2. TECHNICAL_CONFLUENCE confirms with multiple factors
    • Use Case: High-probability reversal conditions
    • Risk Management:
      • Build position during divergence
      • Increase exposure on confirmation
  3. Accumulation-Distribution Pair

    • Tournaments: [PRICE_EQUILIBRIUM, SMART_MONEY_ACTIVITY]
    • Market Philosophy: Smart money accumulates quietly and distributes loudly
    • Optimal Timeframe: 4H/1D
    • Trigger Sequence:
      1. PRICE_EQUILIBRIUM finds quiet accumulation
      2. SMART_MONEY_ACTIVITY spots institutional selling
    • Use Case: Trend strength to distribution transition
    • Risk Management:
      • Larger position during accumulation
      • Scale out during distribution

Medium Confidence Pairs

  1. Psychology Shift Pair

    • Tournaments: [VOLUME_EXHAUSTION, PRICE_EQUILIBRIUM]
    • Market Philosophy: Markets move from extreme to balance
    • Optimal Timeframe: 1H/4H
    • Trigger Sequence:
      1. VOLUME_EXHAUSTION identifies extremes
      2. PRICE_EQUILIBRIUM confirms new balance
    • Use Case: Counter-trend reversal trades
    • Risk Management:
      • Minimal exposure at extreme points
      • Increase exposure during stabilization
  2. Pattern Evolution Pair

    • Tournaments: [VOLATILITY_BREAKOUT, PATTERN_COMPLETION]
    • Market Philosophy: Patterns develop from consolidation
    • Optimal Timeframe: 4H
    • Trigger Sequence:
      1. VOLATILITY_BREAKOUT identifies consolidation
      2. PATTERN_COMPLETION targets pattern targets
    • Use Case: Pattern-based trading strategies
    • Risk Management:
      • Increase exposure when pattern forms
      • Reduce exposure at target levels

Experimental Pairs

  1. Volume Profile Pair

    • Tournaments: [STRONG_TREND, SMART_MONEY_ACTIVITY]
    • Market Philosophy: Strong trends end with distribution
    • Optimal Timeframe: 4H/1D
    • Trigger Sequence:
      1. STRONG_TREND identifies strong moves
      2. SMART_MONEY_ACTIVITY spots distribution phase
    • Use Case: Trend strength to distribution transition
    • Risk Management:
      • Full position during momentum phase
      • Reduce exposure on distribution
  2. Reversal Anticipation Pair

    • Tournaments: [VOLUME_EXHAUSTION, PRICE_EXTENSION]
    • Market Philosophy: Extreme moves lead to reversals
    • Optimal Timeframe: 1H/4H
    • Trigger Sequence:
      1. PRICE_EXTENSION identifies extreme moves
      2. VOLUME_EXHAUSTION confirms reversal potential
    • Use Case: Counter-trend trading
    • Risk Management:
      • Small positions at extremes
      • Add on confirmation

Configuration Interface

interface TournamentConfig {
// Core identification
version: string;
name: TournamentType;
description: string;
timeframes: {
primary: string; // Main timeframe for analysis
secondary: string[]; // Supporting timeframes
correlation: {
type: 'CONFIRMATION' | 'DIVERGENCE';
rules: string[]; // How timeframes interact
};
};

// Technical setup
indicators: {
primary: string[]; // Indicators on primary timeframe
secondary: string[]; // Indicators on secondary timeframes
};
conditions: {
primary: string[]; // Must-have conditions
filters: string[]; // Additional filters
timeframeRules: string[]; // Multi-timeframe conditions
};

// Comparison logic
comparisonPrompt: {
systemPrompt: string;
temperature: number;
maxTokens: number;
};

// Risk management
riskManagement: {
prompt: string;
stopLossType: string;
defaultSize: number;
timeframeAdjustment: {
sizeMultipliers: Record<string, number>; // Size adjustments per timeframe
stopMultipliers: Record<string, number>; // Stop adjustments per timeframe
};
};

// Scoring & optimization
scoring: {
weights: Record<string, number>;
minimumScore: number;
targetScore: number;
timeframeWeights: Record<string, number>; // Weight for each timeframe's contribution
};

// Version tracking
metadata: {
created: string;
author: string;
performance?: {
accuracy: number;
sampleSize: number;
period: string;
};
replacedBy?: string;
replaces?: string;
reasoning: string;
};
}

Example Configuration (v2.ts)

import { TournamentConfig, TournamentType } from '../types';

export const strongTrendV2: TournamentConfig = {
version: 'v2',
name: TournamentType.STRONG_TREND,
description: 'Strong trend with multi-timeframe confirmation',
timeframes: {
primary: '4h',
secondary: ['1d', '1h'],
correlation: {
type: 'CONFIRMATION',
rules: ['1D trend direction matches 4H', '1H shows no reversal signals'],
},
},

indicators: {
primary: ['rsi', 'macd', 'volume', 'adx'],
secondary: ['supertrend', 'ema200'],
},
conditions: {
primary: [
'RSI > 50 && rising',
'MACD histogram > 0 && expanding',
'Volume > 2 * avgVolume',
],
filters: ['ADX > 25', 'No major resistance within 5%'],
timeframeRules: [
'1D Supertrend aligned with 4H direction',
'1H above 200 EMA',
],
},

riskManagement: {
prompt: `Determine stop loss and take profit based on multi-timeframe analysis...`,
stopLossType: 'SWING_LOW',
defaultSize: 1.5,
timeframeAdjustment: {
sizeMultipliers: {
'4h': 1.0,
'1d': 1.5,
'1h': 0.75,
},
stopMultipliers: {
'4h': 1.0,
'1d': 1.5,
'1h': 0.75,
},
},
},

scoring: {
weights: {
rsi: 0.3,
macd: 0.3,
volume: 0.2,
adx: 0.2,
},
minimumScore: 0.65,
targetScore: 0.8,
timeframeWeights: {
'4h': 0.6,
'1d': 0.3,
'1h': 0.1,
},
},

metadata: {
created: '2025-03-15',
author: 'maxkaido',
performance: {
accuracy: 0.72,
sampleSize: 1000,
period: '2025-01-01/2025-03-15',
},
replaces: 'v1',
reasoning: 'Added multi-timeframe confirmation logic',
},
};

Future Development

We're currently working on:

  1. Machine learning models to optimize tournament pair selection
  2. Dynamic timeframe adaptation based on market conditions
  3. Integration with our shadow portfolio system for automated validation

Conclusion

The Market Tournament Framework represents a significant evolution in our approach to market analysis. By combining multiple perspectives and leveraging complementary tournament pairs, we've created a robust system for identifying trading opportunities. The framework's strength lies in its pure indicator-based approach, clear timeframe optimization, and integrated risk management guidelines.

Stay tuned for future updates as we continue to refine and expand this framework.

Other articles:

Implementation Details

The framework is implemented in TypeScript and integrated into our DIKE module. Here's a high-level overview of the architecture:

export enum TournamentType {
// Market Condition Based
STRONG_TREND = 'STRONG_TREND',
VOLATILITY_BREAKOUT = 'VOLATILITY_BREAKOUT',
PRICE_EXTENSION = 'PRICE_EXTENSION',

// Pattern Based
INDICATOR_DIVERGENCE = 'INDICATOR_DIVERGENCE',
TECHNICAL_CONFLUENCE = 'TECHNICAL_CONFLUENCE',
PATTERN_COMPLETION = 'PATTERN_COMPLETION',

// Psychology Based
VOLUME_EXHAUSTION = 'VOLUME_EXHAUSTION',
PRICE_EQUILIBRIUM = 'PRICE_EQUILIBRIUM',
SMART_MONEY_ACTIVITY = 'SMART_MONEY_ACTIVITY',
}

Configuration Directory Structure

Overview

The tournament configurations are organized in the DIKE module following a clear, versioned structure that maintains separation of concerns while keeping related configurations together.

Directory Layout

dike/
└── tournaments/
├── types/
│ ├── tournament.types.ts # Core type definitions
│ ├── scoring.types.ts # Scoring related types
│ └── risk-management.types.ts # Risk management types

├── configs/
│ ├── market-condition/ # Market condition based tournaments
│ │ ├── strong-trend/
│ │ │ ├── v1.ts
│ │ │ ├── v2.ts # Current version
│ │ │ └── metadata.json # Version tracking & performance
│ │ ├── volatility-breakout/
│ │ └── price-extension/
│ │
│ ├── pattern-based/ # Pattern based tournaments
│ │ ├── indicator-divergence/
│ │ ├── technical-confluence/
│ │ └── pattern-completion/
│ │
│ └── psychology-based/ # Psychology based tournaments
│ ├── volume-exhaustion/
│ ├── price-equilibrium/
│ └── smart-money-activity/

├── pairs/ # Tournament pair configurations
│ ├── high-confidence/
│ │ ├── volatility-cycle.ts
│ │ ├── technical-confirmation.ts
│ │ └── accumulation-distribution.ts
│ ├── medium-confidence/
│ └── experimental/

├── utils/
│ ├── scoring.ts # Scoring utilities
│ ├── timeframe.ts # Timeframe management
│ └── validation.ts # Configuration validation

└── index.ts # Public API exports

File Structure Examples

Tournament Configuration (v2.ts)

import { TournamentConfig } from '../../types/tournament.types';
import { baseConfig } from '../base-config';

export const strongTrendV2: TournamentConfig = {
...baseConfig,
version: 'v2',
name: TournamentType.STRONG_TREND,
// ... configuration as shown in previous example
};

Pair Configuration (volatility-cycle.ts)

import { TournamentPairConfig } from '../../types/tournament.types';
import { VOLATILITY_BREAKOUT, STRONG_TREND } from '../configs';

export const volatilityCyclePair: TournamentPairConfig = {
name: 'VOLATILITY_CYCLE',
confidence: 'HIGH',
tournaments: [VOLATILITY_BREAKOUT, STRONG_TREND],
timeframes: {
primary: '4h',
secondary: ['1d', '1h'],
},
correlation: {
type: 'CONFIRMATION',
rules: ['1D trend direction matches 4H', '1H shows no reversal signals'],
},
scoring: {
timeframeWeights: {
'4h': 0.6,
'1d': 0.3,
'1h': 0.1,
},
},
};

Base Configuration (base-config.ts)

import { BaseConfig } from '../types/tournament.types';

export const baseConfig: BaseConfig = {
comparisonPrompt: {
temperature: 0.3,
maxTokens: 500,
},
scoring: {
minimumScore: 0.65,
targetScore: 0.8,
},
// ... other common configuration
};

Benefits

  1. Clear Organization:

    • Tournaments grouped by type (market condition, pattern, psychology)
    • Each tournament type has its own directory
    • Clear separation between types, pairs, and utilities
  2. Version Control:

    • Each version is a separate file
    • Metadata tracks performance and changes
    • Easy to roll back or compare versions
  3. Reusability:

    • Base configurations can be shared
    • Common utilities centralized
    • Types ensure consistency
  4. Maintainability:

    • Clear import paths
    • Separated concerns
    • Easy to find and modify configurations
  5. Scalability:

    • Easy to add new tournament types
    • Simple to create new pairs
    • Flexible for future extensions
  6. Documentation:

    • Structure mirrors the conceptual framework
    • Self-documenting organization
    • Easy to navigate and understand

This structure follows the Mercury Pantheon conventions while providing a clear, maintainable organization for our tournament configurations.