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/offhigherTimeframe: The confirmation timeframeconfirmationRequired: 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
Recommended Ratios
The higher timeframe should be 4-5 times larger than the lower timeframe:
| Lower Timeframe | Higher Timeframe | Ratio | Use Case |
|---|---|---|---|
| 1m | 5m | 1:5 | Scalping |
| 5m | 15m or 30m | 1:3-6 | Day Trading |
| 15m | 1h | 1:4 | Swing Trading |
| 30m | 2h | 1:4 | Swing Trading |
| 1h | 4h | 1:4 | Position Trading |
| 4h | 1d | 1:6 | Position Trading |
| 1d | 1w | 1:5 | Long-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
| Strategy | Lower TF | Higher TF | Why |
|---|---|---|---|
| Scalping | 1m | 5m | Quick confirmation |
| Day Trading | 5m-15m | 15m-1h | Intraday trends |
| Swing Trading | 15m-1h | 1h-4h | Multi-day trends |
| Position Trading | 1d | 1w | Long-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:
-
Timeframe ratio is appropriate
- 1:4 to 1:6 is ideal
- Not too close or too far
-
Higher timeframe conditions make sense
- Define clear trend criteria
- Not too complex
- Testable
-
Confirmation settings match strategy
- Strict for conservative
- Flexible for aggressive
-
Misalignment handling is defined
- skip_entry for filtering
- alert_only for monitoring
- enter_anyway to disable
-
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"
}
}