Skip to main content
Skip to main content
Version: Next 🚧

How to Use Multi-Timeframe Analysis

Problem

You want to improve signal quality by confirming entry signals across multiple timeframes. Trading on a single timeframe can lead to false signals and whipsaws. Multi-timeframe analysis helps filter out noise and identify higher-probability setups.

Prerequisites

  • Basic algorithm configuration completed
  • Entry conditions configured (Step 3)
  • Understanding of technical indicators
  • Familiarity with different timeframes

What is Multi-Timeframe Analysis?

Multi-timeframe analysis (MTF) involves analyzing the same instrument across different timeframes to confirm trade signals. The principle is simple: trade in the direction of the higher timeframe trend.

Key Concepts:

  • Lower Timeframe: Your execution timeframe (where you enter trades)
  • Higher Timeframe: Your confirmation timeframe (validates the trend)
  • Alignment: When both timeframes agree on direction
  • Misalignment: When timeframes disagree

Example:

Lower Timeframe (15m): Bullish signal
Higher Timeframe (1h): Bullish trend
Result: Take the trade (aligned)

Lower Timeframe (15m): Bullish signal
Higher Timeframe (1h): Bearish trend
Result: Skip the trade (misaligned)

Basic Configuration

Enable Multi-Timeframe Analysis

{
"entryConditions": {
"multiTimeframe": {
"enabled": true,
"higherTimeframe": "1h",
"confirmationRequired": true,
"onMisalignment": "skip_entry"
}
}
}

Parameters:

  • enabled: Turn MTF analysis on/off
  • higherTimeframe: The confirmation timeframe
  • confirmationRequired: Must higher timeframe confirm?
  • onMisalignment: What to do when timeframes disagree

Available Higher Timeframes

{
"higherTimeframe": "5m" // 5 minutes
"higherTimeframe": "15m" // 15 minutes
"higherTimeframe": "30m" // 30 minutes
"higherTimeframe": "1h" // 1 hour
"higherTimeframe": "2h" // 2 hours
"higherTimeframe": "4h" // 4 hours
"higherTimeframe": "1d" // 1 day
"higherTimeframe": "1w" // 1 week
}

Timeframe Combinations

The higher timeframe should be 4-5 times larger than the lower timeframe:

Lower TimeframeHigher TimeframeRatioUse Case
1m5m1:5Scalping
5m15m or 30m1:3-6Day Trading
15m1h1:4Swing Trading
30m2h1:4Swing Trading
1h4h1:4Position Trading
4h1d1:6Position Trading
1d1w1:5Long-term Trading

Example Combinations

Scalping:

{
"timeframe": "1m",
"multiTimeframe": {
"higherTimeframe": "5m"
}
}

Day Trading:

{
"timeframe": "5m",
"multiTimeframe": {
"higherTimeframe": "15m"
}
}

Swing Trading:

{
"timeframe": "15m",
"multiTimeframe": {
"higherTimeframe": "1h"
}
}

Position Trading:

{
"timeframe": "1d",
"multiTimeframe": {
"higherTimeframe": "1w"
}
}

Higher Timeframe Conditions

Configuring Conditions

Define what constitutes a bullish or bearish higher timeframe:

{
"entryConditions": {
"multiTimeframe": {
"enabled": true,
"higherTimeframe": "1h",
"conditions": [
{
"type": "indicator_value",
"indicator": "ema",
"period": 20,
"comparison": "above",
"value": "close"
},
{
"type": "indicator_indicator",
"indicator1": "ema",
"period1": 9,
"indicator2": "ema",
"period2": 20,
"comparison": "above"
}
]
}
}
}

This configuration means:

  • Higher timeframe is bullish when:
    • Price is above 20 EMA
    • 9 EMA is above 20 EMA

Example: Trend Confirmation

Simple Trend Filter:

{
"multiTimeframe": {
"higherTimeframe": "1h",
"conditions": [
{
"type": "indicator_value",
"indicator": "ema",
"period": 50,
"comparison": "above",
"value": "close"
}
]
}
}

Advanced Trend Filter:

{
"multiTimeframe": {
"higherTimeframe": "1h",
"conditions": [
{
"type": "indicator_indicator",
"indicator1": "ema",
"period1": 20,
"indicator2": "ema",
"period2": 50,
"comparison": "above"
},
{
"type": "indicator_value",
"indicator": "macd",
"comparison": "above",
"value": 0
}
]
}
}

Confirmation Requirements

Confirmation Required (Strict)

{
"multiTimeframe": {
"confirmationRequired": true
}
}

Behavior:

  • Only enter when both timeframes align
  • Filters out counter-trend trades
  • Reduces trade frequency
  • Improves win rate

Example:

Lower TF (15m): Buy signal
Higher TF (1h): Bullish ✓
Action: Enter trade

Lower TF (15m): Buy signal
Higher TF (1h): Bearish ✗
Action: Skip trade

Confirmation Not Required (Flexible)

{
"multiTimeframe": {
"confirmationRequired": false
}
}

Behavior:

  • Enter regardless of higher timeframe
  • Higher timeframe is informational only
  • More trades
  • Lower win rate

Misalignment Handling

Skip Entry (Recommended)

{
"multiTimeframe": {
"onMisalignment": "skip_entry"
}
}

Behavior:

  • Don't enter when timeframes disagree
  • Wait for alignment
  • Most conservative approach

Example:

15m: Buy signal (RSI oversold)
1h: Downtrend (price below 50 EMA)
Action: Skip entry, wait for 1h to turn bullish

Alert Only

{
"multiTimeframe": {
"onMisalignment": "alert_only"
}
}

Behavior:

  • Enter the trade anyway
  • Log a warning about misalignment
  • Useful for monitoring

Example:

15m: Buy signal
1h: Downtrend
Action: Enter trade + log warning

Enter Anyway

{
"multiTimeframe": {
"onMisalignment": "enter_anyway"
}
}

Behavior:

  • Ignore higher timeframe
  • Enter all lower timeframe signals
  • Effectively disables MTF filtering

Complete Configuration Examples

Example 1: Conservative Swing Trading

{
"name": "Conservative Swing with MTF",
"timeframe": "15m",
"entryConditions": {
"positionType": "long",
"logicalOperator": "and",
"conditions": [
{
"type": "indicator_value",
"indicator": "rsi",
"period": 14,
"comparison": "below",
"value": 30
},
{
"type": "indicator_indicator",
"indicator1": "ema",
"period1": 9,
"indicator2": "ema",
"period2": 20,
"comparison": "crosses_above"
}
],
"multiTimeframe": {
"enabled": true,
"higherTimeframe": "1h",
"confirmationRequired": true,
"onMisalignment": "skip_entry",
"conditions": [
{
"type": "indicator_indicator",
"indicator1": "ema",
"period1": 20,
"indicator2": "ema",
"period2": 50,
"comparison": "above"
}
]
}
}
}

Strategy:

  • 15m: RSI oversold + EMA crossover
  • 1h: Must be in uptrend (20 EMA > 50 EMA)
  • Skip trades against 1h trend
  • Good for: High-probability swing trades

Example 2: Aggressive Day Trading

{
"name": "Aggressive Day Trading with MTF",
"timeframe": "5m",
"entryConditions": {
"positionType": "both",
"logicalOperator": "or",
"conditions": [
{
"type": "indicator_value",
"indicator": "macd",
"comparison": "crosses_above",
"value": 0
}
],
"multiTimeframe": {
"enabled": true,
"higherTimeframe": "15m",
"confirmationRequired": false,
"onMisalignment": "alert_only",
"conditions": [
{
"type": "indicator_value",
"indicator": "ema",
"period": 20,
"comparison": "above",
"value": "close"
}
]
}
}
}

Strategy:

  • 5m: MACD crossover signals
  • 15m: Trend awareness (not required)
  • Enter all signals, log misalignments
  • Good for: Active day trading

Example 3: Scalping with Quick Confirmation

{
"name": "Scalping with MTF",
"timeframe": "1m",
"entryConditions": {
"positionType": "long",
"conditions": [
{
"type": "indicator_indicator",
"indicator1": "ema",
"period1": 5,
"indicator2": "ema",
"period2": 10,
"comparison": "crosses_above"
}
],
"multiTimeframe": {
"enabled": true,
"higherTimeframe": "5m",
"confirmationRequired": true,
"onMisalignment": "skip_entry",
"conditions": [
{
"type": "indicator_value",
"indicator": "ema",
"period": 20,
"comparison": "above",
"value": "close"
}
]
}
}
}

Strategy:

  • 1m: Fast EMA crossover
  • 5m: Price above 20 EMA (trend filter)
  • Only scalp in direction of 5m trend
  • Good for: Quick scalps with confirmation

Example 4: Position Trading

{
"name": "Position Trading with MTF",
"timeframe": "1d",
"entryConditions": {
"positionType": "long",
"conditions": [
{
"type": "indicator_value",
"indicator": "rsi",
"period": 14,
"comparison": "below",
"value": 40
},
{
"type": "price_indicator",
"priceType": "close",
"indicator": "sma",
"period": 50,
"comparison": "above"
}
],
"multiTimeframe": {
"enabled": true,
"higherTimeframe": "1w",
"confirmationRequired": true,
"onMisalignment": "skip_entry",
"conditions": [
{
"type": "indicator_indicator",
"indicator1": "sma",
"period1": 20,
"indicator2": "sma",
"period2": 50,
"comparison": "above"
},
{
"type": "indicator_indicator",
"indicator1": "sma",
"period1": 50,
"indicator2": "sma",
"period2": 200,
"comparison": "above"
}
]
}
}
}

Strategy:

  • Daily: RSI pullback + price above 50 SMA
  • Weekly: Strong uptrend (20>50>200 SMA)
  • Only enter in strong weekly uptrends
  • Good for: Long-term position trades

Multi-Timeframe Strategy Examples

Example 1: Scalping (1m/5m)

Setup:

Lower: 1m chart
Higher: 5m chart
Ratio: 1:5

Entry Rules:

1m: Price crosses above 10 EMA
5m: Price is above 20 EMA (uptrend)
Action: Enter long

Example Trade:

5m Chart: Uptrend (price above 20 EMA)
1m Chart: Price crosses above 10 EMA at ₹500
Entry: ₹500
Target: ₹502 (0.4%)
Stop: ₹499 (0.2%)
Hold Time: 2-5 minutes

Example 2: Day Trading (15m/1h)

Setup:

Lower: 15m chart
Higher: 1h chart
Ratio: 1:4

Entry Rules:

15m: RSI oversold (<30) + MACD bullish cross
1h: Price above 50 EMA + MACD > 0
Action: Enter long

Example Trade:

1h Chart: Uptrend confirmed
- Price: ₹520 (above 50 EMA at ₹500)
- MACD: +5 (bullish)

15m Chart: Pullback complete
- RSI: 28 (oversold)
- MACD crosses above signal line

Entry: ₹515 (on 15m signal)
Target: ₹530 (3%)
Stop: ₹505 (2%)
Hold Time: 2-4 hours

Example 3: Swing Trading (1h/4h)

Setup:

Lower: 1h chart
Higher: 4h chart
Ratio: 1:4

Entry Rules:

1h: Bullish engulfing candle + volume spike
4h: 20 EMA > 50 EMA (uptrend)
Action: Enter long

Example Trade:

4h Chart: Strong uptrend
- 20 EMA: ₹510
- 50 EMA: ₹490
- Trend: Bullish

1h Chart: Reversal pattern
- Bullish engulfing at ₹505
- Volume: 2x average

Entry: ₹507 (next candle)
Target: ₹535 (5.5%)
Stop: ₹495 (2.4%)
Hold Time: 1-3 days

Example 4: Position Trading (1d/1w)

Setup:

Lower: Daily chart
Higher: Weekly chart
Ratio: 1:5

Entry Rules:

Daily: Price bounces off 50 SMA
Weekly: Golden cross (50 SMA > 200 SMA)
Action: Enter long

Example Trade:

Weekly Chart: Major uptrend
- 50 SMA: ₹480
- 200 SMA: ₹450
- Golden cross confirmed

Daily Chart: Pullback to support
- Price touches 50 SMA at ₹500
- RSI: 45 (neutral)

Entry: ₹505 (bounce confirmed)
Target: ₹600 (19%)
Stop: ₹475 (6%)
Hold Time: 2-6 months

Indicator Calculation on Higher Timeframe

How Indicators are Calculated

Indicators on the higher timeframe are calculated using higher timeframe candles:

Lower TF: 15m
Higher TF: 1h

1h EMA(20) is calculated from:
- Last 20 one-hour candles
- NOT from 15-minute candles

Example: EMA Calculation

15m Timeframe:
- EMA(20) uses last 20 fifteen-minute candles
- Covers 5 hours of data

1h Timeframe:
- EMA(20) uses last 20 one-hour candles
- Covers 20 hours of data

Synchronization

The system automatically synchronizes timeframes:

Current Time: 10:45 AM

15m Chart: Uses 10:45 candle
1h Chart: Uses 10:00-11:00 candle (in progress)

Indicators calculated from respective candles

Avoiding False Signals

Problem: Whipsaws on Lower Timeframe

15m Chart: Multiple false breakouts
1h Chart: Clear uptrend

Without MTF: Enter all 15m signals (many losses)
With MTF: Only enter signals aligned with 1h (fewer, better trades)

Example: Filtering Noise

Scenario: Choppy 15m chart in 1h downtrend

15m Signals:
- 9:00: Buy signal → Skip (1h bearish)
- 9:30: Sell signal → Take (1h bearish) ✓
- 10:00: Buy signal → Skip (1h bearish)
- 10:30: Sell signal → Take (1h bearish) ✓

Result: Only take high-probability trades

Best Practices

1. Use Appropriate Ratios

Good Ratios (1:4 to 1:6):

{
"timeframe": "15m",
"multiTimeframe": { "higherTimeframe": "1h" } // 1:4 ✓
}

Bad Ratios:

{
"timeframe": "15m",
"multiTimeframe": { "higherTimeframe": "30m" } // 1:2 ✗ (too close)
}
{
"timeframe": "5m",
"multiTimeframe": { "higherTimeframe": "1d" } // 1:288 ✗ (too far)
}

2. Keep Higher Timeframe Conditions Simple

Good:

{
"conditions": [
{
"type": "indicator_value",
"indicator": "ema",
"period": 50,
"comparison": "above",
"value": "close"
}
]
}

Too Complex:

{
"conditions": [
// 5+ conditions make it too restrictive
]
}

3. Match Strategy to Timeframe Combination

StrategyLower TFHigher TFWhy
Scalping1m5mQuick confirmation
Day Trading5m-15m15m-1hIntraday trends
Swing Trading15m-1h1h-4hMulti-day trends
Position Trading1d1wLong-term trends

4. Test Both Aligned and Misaligned Scenarios

Aligned Scenario:

15m: Buy signal
1h: Uptrend
Result: Should enter

Misaligned Scenario:

15m: Buy signal
1h: Downtrend
Result: Should skip (if confirmationRequired: true)

5. Monitor Alignment Rate

Track how often timeframes align:

Alignment Rate = Aligned Signals / Total Signals

High Rate (>70%): Good trend following
Low Rate (<30%): Choppy market or bad ratio

6. Adjust for Market Conditions

Trending Markets:

  • Use MTF confirmation
  • Higher win rate
  • Fewer trades

Ranging Markets:

  • Consider disabling MTF
  • Or use looser confirmation
  • More trades, lower win rate

Verification

After configuring MTF analysis, verify:

  1. Timeframe ratio is appropriate

    • 1:4 to 1:6 is ideal
    • Not too close or too far
  2. Higher timeframe conditions make sense

    • Define clear trend criteria
    • Not too complex
    • Testable
  3. Confirmation settings match strategy

    • Strict for conservative
    • Flexible for aggressive
  4. Misalignment handling is defined

    • skip_entry for filtering
    • alert_only for monitoring
    • enter_anyway to disable
  5. Test in paper trading

    • Verify alignment rate
    • Check win rate improvement
    • Monitor trade frequency

Troubleshooting

No Trades Generated

Problem: Timeframes never align.

Solution:

  • Reduce higher timeframe conditions
  • Use looser confirmation
  • Check timeframe ratio
{
"multiTimeframe": {
"confirmationRequired": false, // More flexible
"conditions": [
// Reduce from 3 conditions to 1
]
}
}

Too Many Trades

Problem: MTF not filtering enough.

Solution:

  • Enable confirmationRequired
  • Add more higher timeframe conditions
  • Use skip_entry for misalignment
{
"multiTimeframe": {
"confirmationRequired": true,
"onMisalignment": "skip_entry"
}
}

Conflicting Signals

Problem: Lower and higher timeframes constantly disagree.

Solution:

  • Check timeframe ratio (may be too close)
  • Simplify conditions
  • Consider if market is ranging
{
"timeframe": "15m",
"multiTimeframe": {
"higherTimeframe": "1h" // Changed from 30m (better ratio)
}
}

Delayed Entries

Problem: Missing moves waiting for higher timeframe confirmation.

Solution:

  • Use closer timeframe ratio
  • Reduce confirmation requirements
  • Consider alert_only mode
{
"multiTimeframe": {
"higherTimeframe": "15m", // Changed from 1h (faster)
"onMisalignment": "alert_only"
}
}