Market Tournament Framework: A Multi-Perspective Approach to Finding Sweet Spots
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
- Pure Indicator Focus: Eliminate subjective candlestick patterns in favor of quantifiable indicators
- Multi-Factor Confirmation: Each setup requires multiple indicators to align
- Timeframe Optimization: Each tournament type is optimized for specific timeframes
- Risk Management Integration: Built-in position sizing and stop-loss guidelines
- 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
-
Volatility Cycle Pair
- Tournaments: [VOLATILITY_BREAKOUT, STRONG_TREND]
- Market Philosophy: Markets move from low volatility to high volatility
- Optimal Timeframe: 4H
- Trigger Sequence:
- VOLATILITY_BREAKOUT identifies compression phase
- STRONG_TREND confirms directional strength
- Use Case: Identifying early trend development
- Risk Management:
- Tighter stops during compression
- Wider stops during momentum phase
-
Technical Confirmation Pair
- Tournaments: [INDICATOR_DIVERGENCE, TECHNICAL_CONFLUENCE]
- Market Philosophy: Technical factors align with underlying strength
- Optimal Timeframe: 4H/1D
- Trigger Sequence:
- INDICATOR_DIVERGENCE spots hidden strength/weakness
- TECHNICAL_CONFLUENCE confirms with multiple factors
- Use Case: High-probability reversal conditions
- Risk Management:
- Build position during divergence
- Increase exposure on confirmation
-
Accumulation-Distribution Pair
- Tournaments: [PRICE_EQUILIBRIUM, SMART_MONEY_ACTIVITY]
- Market Philosophy: Smart money accumulates quietly and distributes loudly
- Optimal Timeframe: 4H/1D
- Trigger Sequence:
- PRICE_EQUILIBRIUM finds quiet accumulation
- 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
-
Psychology Shift Pair
- Tournaments: [VOLUME_EXHAUSTION, PRICE_EQUILIBRIUM]
- Market Philosophy: Markets move from extreme to balance
- Optimal Timeframe: 1H/4H
- Trigger Sequence:
- VOLUME_EXHAUSTION identifies extremes
- PRICE_EQUILIBRIUM confirms new balance
- Use Case: Counter-trend reversal trades
- Risk Management:
- Minimal exposure at extreme points
- Increase exposure during stabilization
-
Pattern Evolution Pair
- Tournaments: [VOLATILITY_BREAKOUT, PATTERN_COMPLETION]
- Market Philosophy: Patterns develop from consolidation
- Optimal Timeframe: 4H
- Trigger Sequence:
- VOLATILITY_BREAKOUT identifies consolidation
- 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
-
Volume Profile Pair
- Tournaments: [STRONG_TREND, SMART_MONEY_ACTIVITY]
- Market Philosophy: Strong trends end with distribution
- Optimal Timeframe: 4H/1D
- Trigger Sequence:
- STRONG_TREND identifies strong moves
- SMART_MONEY_ACTIVITY spots distribution phase
- Use Case: Trend strength to distribution transition
- Risk Management:
- Full position during momentum phase
- Reduce exposure on distribution
-
Reversal Anticipation Pair
- Tournaments: [VOLUME_EXHAUSTION, PRICE_EXTENSION]
- Market Philosophy: Extreme moves lead to reversals
- Optimal Timeframe: 1H/4H
- Trigger Sequence:
- PRICE_EXTENSION identifies extreme moves
- 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:
- Machine learning models to optimize tournament pair selection
- Dynamic timeframe adaptation based on market conditions
- 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
-
Clear Organization:
- Tournaments grouped by type (market condition, pattern, psychology)
- Each tournament type has its own directory
- Clear separation between types, pairs, and utilities
-
Version Control:
- Each version is a separate file
- Metadata tracks performance and changes
- Easy to roll back or compare versions
-
Reusability:
- Base configurations can be shared
- Common utilities centralized
- Types ensure consistency
-
Maintainability:
- Clear import paths
- Separated concerns
- Easy to find and modify configurations
-
Scalability:
- Easy to add new tournament types
- Simple to create new pairs
- Flexible for future extensions
-
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.
