Alpha Research: Difference between revisions
No edit summary |
No edit summary |
||
| Line 390: | Line 390: | ||
| BOS_ENTRY_SHORT || Short || Break of structure to downside | | BOS_ENTRY_SHORT || Short || Break of structure to downside | ||
|} | |} | ||
= PART 8: STOP LOSS CALCULATION = | = PART 8: STOP LOSS CALCULATION = | ||
Revision as of 17:54, 5 January 2026
Multi_Timeframe Dynamic Trend Reversion (MTF_DTR)
PART 1: STRATEGY OVERVIEW
What Is This Strategy?
Multi_Timeframe Dynamic Trend Reversion (MTF_DTR) is a systematic intraday trading strategy that requires multiple analytical layers to align before taking a trade. Think of it as a layered cake - each layer must be present for a valid setup.
Layered Architecture (Top-Down)
┌─────────────────────────────────────────────────────────────┐ │ │ │ LAYER 1: MULTI-TIMEFRAME ANALYSIS ◄── THE FOUNDATION │ │ 5 timeframes analyzed for trend alignment │ │ Daily → 4H → 1H → 15M → 5M │ │ │ ├─────────────────────────────────────────────────────────────┤ │ │ │ LAYER 2: MARKET STATE ANALYSIS │ ← regime/ market state conditions │ 7 algorithms: Railroad, Creeper, Phase, BOS, etc. │ │ Calculates penalties and bonuses │ │ │ ├─────────────────────────────────────────────────────────────┤ │ │ │ LAYER 3: SETUP QUALITY GRADING │ ← set up scoring │ 5-factor weighted scoring → Assigns grade A+ to F │ │ │ ├─────────────────────────────────────────────────────────────┤ │ │ │ LAYER 4: FILTERS (Trade/No_Trade) │ │ • Direction: MA21 slope must match trade direction │Filters │ • Grade: Only A+, A, B grades can trade │ │ • Hours: Block hours ]WIP] │ │ │ ├─────────────────────────────────────────────────────────────┤ │ │ │ LAYER 5: ENTRY TECHNIQUES │ ← Final trigger │ │ │ │ └─────────────────────────────────────────────────────────────┘
PART 2: Core Concept (Why This Works)
The edge comes from requiring multiple independent confirmations before trading. Each layer filters out bad trades:
| Layer | What It Filters Out |
|---|---|
| 1. MTF Analysis | Counter-trend trades, choppy markets |
| 2. Market State | Dangerous conditions (creeper moves, institutional fights) |
| 3. Quality Grading | Scores the setup (used by hard filter) |
| 4. Hard Filters | Wrong direction, low grades (C/D/F), blocked hours |
| 5. Entry Technique | Chasing price far from value areas |
The Math
If each layer has 70% accuracy independently:
- Single layer: 70% edge
- 2 layers: 70% × 70% = 49% of trades pass, but higher quality
- 5 layers: Only the best setups survive all filters
Result: Fewer trades, but each trade has multiple confluences supporting it.
PART 3: LAYER 1 - MULTI-TIMEFRAME ANALYSIS (The Foundation)
THIS IS THE FOUNDATION - Everything else builds on top of MTF alignment. If timeframes disagree, we don't trade.
The 5 Timeframes
| Timeframe | Role | Weight |
|---|---|---|
| Daily (1D) | Overall market bias | Highest |
| 4-Hour (4H) | Primary trend direction | High |
| 1-Hour (1H) | Trend confirmation | Medium |
| 15-Minute (15M) | Entry timing context | Lower |
| 5-Minute (5M) | Execution timeframe | Lowest |
What We Analyze Per Timeframe
For each of 5 timeframes, our system calculates:
| Analysis | Description |
|---|---|
| MA21 Value | 21-period Moving Average |
| MA21 Slope | Rising/Flat/Declining |
| MA200 Value | 200-period Moving Average |
| Price vs MA21 | Above/Below/At the MA |
| Trend Direction | UP/DOWN/NEUTRAL |
MTF Alignment Score
For each timeframe: 1. Determine trend direction (UP/DOWN/NEUTRAL) 2. Check if aligned with trade direction 3. Apply timeframe weight 4. Sum weighted alignment scores Example (LONG trade): Daily: UP (aligned) × 1.00 weight = 1.00 4H: UP (aligned) × 0.86 weight = 0.86 1H: UP (aligned) × 0.72 weight = 0.72 15M: DOWN (not aligned) × 0.58 weight = 0.00 5M: UP (aligned) × 0.44 weight = 0.44 ───────────────────────────────────────────── Total MTF Score: 3.02 / 3.60 = 83.9% aligned
Why MTF Matters
| Scenario | MTF Alignment | Action |
|---|---|---|
| All 5 timeframes aligned | ~90% | High conviction trade A+ 2lots |
| 4 of 5 aligned | ~80% | Trade with normal size A 1 lot |
| 3 of 5 aligned | ~70% | Proceed with caution B 1 lot |
| 2 or fewer aligned | <60% | No Trade |
PART 4: LAYER 2 - MARKET STATE ANALYSIS
The 7 Market State Algorithms
Our system runs 7 independent algorithms to understand current market context:
| # | Algorithm | What It Detects | Impact |
|---|---|---|---|
| 1 | Railroad Tracks | Strong momentum bars in sequence | +15% bonus |
| 2 | Creeper Move | Slow grinding trend (dangerous) | -50% penalty |
| 3 | Two-Day Trend | Trend visible on Daily for 2+ days | Required for A+ |
| 4 | Phase Analysis | Accumulation/Distribution/Markup/Markdown | Phase mismatch = -25% |
| 5 | Institutional Activity | Big player accumulation/distribution | Fight = 0.7× multiplier |
| 6 | Break of Structure (BOS) | Key level breaks | Affects stop placement |
| 7 | Volatility Regime | High/Normal/Low volatility | Adjusts expectations |
Penalty System
| Condition | Penalty | Rationale |
|---|---|---|
| Creeper Move Detected | -50 points | Slow trends often reverse suddenly |
| MA Struggle (price fighting MA) | -30 points | Indecision, likely to chop |
| No Two-Day Trend | -30 points | Trend not established enough |
| Phase Mismatch | -25 points | Trading against market phase |
| No Key Level Nearby | -50 points | No technical confluence |
| Institutional Fight | ×0.70 multiplier | Big players fighting each other |
Bonus System
| Condition | Bonus | Rationale |
|---|---|---|
| Railroad Tracks | +15 points | Strong momentum confirmation |
| At Key Level | +10 points | Technical confluence present |
| Clean Entry Setup | +10 points | Clear technical pattern |
PART 5: LAYER 3 - SETUP QUALITY GRADING
The 5-Factor Scoring System
Every potential trade is scored on 5 factors:
| Factor | Weight | What It Measures |
|---|---|---|
| Timeframe Alignment | 30% | How well all 5 timeframes agree |
| Trend Strength | 20% | Quality of the trend (Railroad vs Creeper) |
| Key Level Proximity | 20% | Is entry near significant S/R level? |
| Entry Quality | 15% | How clean is the entry technique? |
| Risk:Reward | 15% | Is the R:R ratio favorable? |
Note: Weights sum to 100%. Timeframe Alignment has highest weight (30%) because MTF is the foundation.
Grade Thresholds
| Grade | Score Range | Action | Position Size |
|---|---|---|---|
| A+ | 90-100 | Trade with full conviction | 2 lots |
| A | 80-89 | Trade with confidence | 1 lot |
| B | 70-79 | Trade normally | 1 lot |
| C | 60-69 | NO TRADE | - |
| D | 50-59 | NO TRADE | - |
| F | <50 | NO TRADE | - |
A+ Grade Special Requirements
To achieve A+ grade, ALL conditions must be true:
- Final score ≥ 90
- All 5 timeframes aligned with trade direction
- Entry within ±25 points of MA21
- Two-day trend present on Daily
- No institutional fight detected
Score Calculation Example
Trade Setup: LONG on 5-min chart
Factor Scores (0-100 each):
Timeframe Alignment: 85 × 0.30 = 25.5
Trend Strength: 90 × 0.20 = 18.0
Key Level Proximity: 70 × 0.20 = 14.0
Entry Quality: 80 × 0.15 = 12.0
Risk:Reward: 75 × 0.15 = 11.25
──────────
Base Score: 80.75
Penalties Applied:
- No Railroad Tracks: 0
- No Creeper: 0
- Has Two-Day: 0
──────────
Final Score: 80.75 → Grade: A
PART 6: LAYER 4 - FILTERS
HARD FILTERS block trades completely. If ANY hard filter fails, NO TRADE happens regardless of how good the setup looks.
3 Hard Filters
| Filter | Rule | Effect |
|---|---|---|
| 1. Direction Filter | MA21 slope must match trade direction | Wrong direction = BLOCKED |
| 2. Grade Filter | Only A+, A, B grades allowed | C/D/F grades = BLOCKED |
| 3. Hour Filter | Block hours [WIP] | Blocked hours = BLOCKED |
Filter 1: Direction (MA21 Slope)
| MA21 Slope | Allowed Direction | Logic |
|---|---|---|
| Rising (↗) | LONG only | Trade with uptrend, never short |
| Declining (↘) | SHORT only | Trade with downtrend, never long |
| Flat (→) | Use MTF direction | Higher timeframes decide |
Slope Calculation: Slope % = (MA21[current] - MA21[previous]) / MA21[previous] × 100 Thresholds: > +0.01% → RISING (LONG only) < -0.01% → DECLINING (SHORT only) ±0.01% → FLAT (use MTF consensus)
Filter 2: Grade
| Grade | Action |
|---|---|
| A+, A, B | PASS - Proceed to entry |
| C, D, F | BLOCKED - No trade |
Filter 3: Hour [work in progress examples]
| Hour | Status | Reason |
|---|---|---|
| 9 (9:00-9:59 AM) | BLOCKED | Market open volatility |
| 10-21 (10:00 AM - 9:59 PM) | ALLOWED | Normal trading hours |
| 22 (10:00-10:59 PM) | BLOCKED | Near market close |
| 23 (11:00-11:59 PM) | BLOCKED | Market close |
PART 7: LAYER 5 - ENTRY TECHNIQUE
MA21 Zone Principle
"The MA is a ZONE, not a thin line or exact value"
Entry is allowed within ±25 points of MA21, not just at the exact MA value.
Why ±25 Points?
- Price rarely touches MA exactly
- Allows for normal market noise
Available Entry Techniques
| Technique | Direction | Description |
|---|---|---|
| NEAR_MA | Both | Price within ±25 pts of MA21 (most common) |
| MA_BOUNCE_LONG | Long | Price touches MA21 and bounces up |
| MA_BOUNCE_SHORT | Short | Price touches MA21 and rejects down |
| GREEN_BAR_AFTER_PULLBACK | Long | Bullish candle after pullback to MA |
| RED_BAR_AFTER_RALLY | Short | Bearish candle after rally to MA |
| BOS_ENTRY_LONG | Long | Break of structure to upside |
| BOS_ENTRY_SHORT | Short | Break of structure to downside |
PART 8: STOP LOSS CALCULATION
Stop Loss Methods (Priority Order)
| Priority | Method | Description |
|---|---|---|
| 1 | BOS-Based Stop | Below/above break of structure level |
| 2 | Swing-Based Stop | Below recent swing low (LONG) or above swing high (SHORT) |
| 3 | Default Stop | Fixed 40 points from entry |
Minimum Stop Distance
MINIMUM: 40 points
This prevents:
- Getting stopped out by normal noise
- Excessive trading costs from tight stops
- Whipsaws in market manipulations, this varies depending on markets, nature of that trade
Stop Calculation Algorithm
""" Calculate stop loss with minimum enforcement. Source: signal_generation_trade_management.py """ MIN_STOP_DISTANCE = 40.0 # points
# Try BOS-based stop first
if market_state.bos_level:
stop = market_state.bos_level - 5 # 5pt buffer
# Try swing-based stop
elif market_state.swing_low and direction == LONG:
stop = market_state.swing_low - 5
# Default stop
else:
if direction == LONG:
stop = entry_price - MIN_STOP_DISTANCE
else:
stop = entry_price + MIN_STOP_DISTANCE
# MINIMUM
actual_distance = abs(entry_price - stop)
if actual_distance < MIN_STOP_DISTANCE:
if direction == LONG:
stop = entry_price - MIN_STOP_DISTANCE
else:
stop = entry_price + MIN_STOP_DISTANCE
PART 9: TARGET CALCULATION
The 50% Rule
Target = 50% of distance to MA21
For mean reversion trades, we target halfway back to the moving average.
Why 50%?
- Conservative target ensures higher hit rate
- Based on "divide the move in half" principle
- Captures partial reversion without being greedy
- Works well with trailing stop to capture more
Minimum Target Rule
Minimum Target = Risk × 1.5 Example: Entry: 5700 Stop: 5660 (40 points risk) 50% to MA might give: 30 points But minimum is: 40 × 1.5 = 60 points Final Target: 5760 (60 points)
PART 10: DYNAMIC STOP MANAGEMENT
Two-Phase Protection
After entry, stops are managed dynamically in two phases:
| Phase | Trigger | Action |
|---|---|---|
| Phase 1: Breakeven | +25 points profit | Move stop to entry + 2 points |
| Phase 2: Trailing | +20 points profit | Trail stop using ATR × 2 |
Phase 1: Breakeven Stop
Configuration: breakeven_activation = 25 points breakeven_buffer = 2 points Example (LONG from 5700): Price reaches 5725 (+25 pts profit) → Stop moves from 5660 to 5702 (entry + 2) → Trade is now "risk-free"
Phase 2: Trailing Stop
Configuration: trailing_stop_activation = 20 points trailing_stop_method = ATR_MULTIPLE atr_period = 14 bars atr_multiplier = 2.0 minimum_trail_distance = 15 points Example (LONG from 5700, ATR = 12): Trailing Distance = 12 × 2 = 24 points Price at 5740: → Trail stop = 5740 - 24 = 5716 Price at 5760: → Trail stop = 5760 - 24 = 5736 (moved UP) Price drops to 5736: → STOPPED OUT at 5736 (profit locked)
Why Both Phases?
| Phase | Purpose |
|---|---|
| Breakeven | Eliminate risk quickly once trade moves in favor |
| Trailing | Let winners run while protecting accumulated profit |
PART 11: SLIPPAGE & COSTS
Realistic Slippage Model
| Event | Slippage | Rationale |
|---|---|---|
| Entry | +1.0 point | Normal market fill |
| Stop Loss Exit | +2.0 points | Stops slip more in fast moves |
| Target Exit | +0.5 points | Limit orders have minimal slippage |
Cost Structure
| Cost Type | Value |
|---|---|
| Commission | Rs 20 per lot per side |
| STT | 0.01% on sell side |
| Exchange Fees | ~Rs 2 per lot |
| Stamp Duty | State-dependent |
Why Model Slippage?
- Backtest results must reflect real trading
- Prevents over-optimistic performance estimates
- Stop loss slippage is higher because stops often trigger during fast moves
- Total costs ~Rs 79 per round-trip lot
PART 12: EXIT RULES
Three Exit Conditions
| Exit Type | Condition | % of Exits |
|---|---|---|
| Stop Loss | Price hits stop (original or trailing) | 72.3% |
| Target | Price hits take profit level | 22.8% |
| Timeout | End of day (no overnight holds) | 5.0% |
Why 72% Stop Exits but 57% Win Rate?
This seems contradictory but makes sense:
- Trailing stops lock in profits - many "stop exits" are actually winning trades
- Breakeven stops trigger at +25 pts, trailing at +20 pts
- A trade can be stopped out at +30 pts profit (counted as stop exit but is a WIN)
End-of-Day Exit
All positions closed before market close: - Market closes at 11:30 PM IST - 15-minute buffer before close - Prevents overnight gap risk
PART 13: PUTTING IT ALL TOGETHER
Trade Flow
┌─────────────────────────────────────────────────────────────────┐
│ STEP 1: Load data for all 5 timeframes │
│ Daily, 4H, 1H, 15M, 5M OHLCV data │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 2: LAYER 1 - MTF Analysis (Foundation) │
│ Calculate MA21, MA200, trend direction for each timeframe │
│ Compute MTF alignment score │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 3: LAYER 2 - Market State Analysis │
│ Run 7 algorithms: Railroad, Creeper, Phase, BOS, etc. │
│ Calculate penalties and bonuses │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 4: LAYER 3 - Setup Quality Grading │
│ Score 5 factors, apply penalties/bonuses │
│ Assign grade: A+ / A / B / C / D / F │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 5: LAYER 4 - HARD FILTERS (The Gate) ◄── PASS/FAIL │
│ • Direction: MA21 slope matches trade direction? │
│ • Grade: Is grade A+, A, or B? │
│ • Hour: Is current hour allowed (not 9, 22, 23)? │
│ ANY FAIL → NO TRADE │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 6: LAYER 5 - Entry Technique │
│ Is price within ±25 points of MA21? │
│ Select entry technique (NEAR_MA, BOS_ENTRY, etc.) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 7: Calculate Stop Loss │
│ BOS-based → Swing-based → Default (40 pts minimum) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 8: Calculate Target │
│ 50% of distance to MA (minimum 1.5× risk) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 9: Execute Trade │
│ Apply entry slippage (+1 pt), create trade record │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ STEP 10: Manage Trade │
│ Monitor: Breakeven at +25 pts → Trail at +20 pts │
│ Exit: Stop hit | Target hit | Timeout │
└─────────────────────────────────────────────────────────────────┘
PART 14: HARD vs SOFT FILTERS
Understanding the Difference
| Filter Type | Behavior | Examples |
|---|---|---|
| HARD | Blocks trade completely | Direction filter, Hour filter, Grade C/D/F |
| SOFT | Affects quality score | MTF alignment, Market state penalties |
Complete Filter List
| Filter | Type | Effect |
|---|---|---|
| MA21 Direction | HARD | Wrong direction = NO TRADE |
| Hour Filter | HARD | Hours 9, 22, 23 = NO TRADE |
| Grade < B | HARD | C/D/F grades = NO TRADE |
| MTF Alignment | SOFT | Low alignment = reduced score (30% weight) |
| Creeper Move | SOFT | -50 points penalty |
| No Two-Day Trend | SOFT | -30 points penalty |
| Institutional Fight | SOFT | 0.7× score multiplier |
| Far from MA21 | SOFT | -40 points penalty |
APPENDIX A: CONFIGURATION VALUES
Entry Configuration
| Parameter | Value | Source File |
|---|---|---|
| entry_timeframe | 5-Minute | main.py:165 |
| ma_buffer_points | 25 points | signal_generation_trade_management.py:68 |
| blocked_hours | [9, 22, 23] | signal_generation_trade_management.py:137 |
Stop/Target Configuration
| Parameter | Value | Source File |
|---|---|---|
| min_stop_distance | 40 points | signal_generation_trade_management.py:59 |
| default_risk_reward | 1.5 | signal_generation_trade_management.py:62 |
| bos_stop_buffer_points | 5 points | signal_generation_trade_management.py:81 |
Dynamic Stop Configuration
| Parameter | Value | Source File |
|---|---|---|
| enable_trailing_stop | True | trade_execution_engine.py:58 |
| trailing_stop_method | ATR_MULTIPLE | trade_execution_engine.py:63 |
| atr_period | 14 bars | trade_execution_engine.py:64 |
| atr_multiplier | 2.0 | trade_execution_engine.py:65 |
| trailing_stop_activation | 20 points | trade_execution_engine.py:60 |
| enable_breakeven_stop | True | trade_execution_engine.py:69 |
| breakeven_activation | 25 points | trade_execution_engine.py:70 |
| breakeven_buffer | 2 points | trade_execution_engine.py:71 |
| minimum_trail_distance | 15 points | trade_execution_engine.py:370 |
Slippage Configuration
| Parameter | Value | Source File |
|---|---|---|
| base_slippage_points | 1.0 point | trade_execution_engine.py:38 |
| stop_loss_slippage | 2.0 points | trade_execution_engine.py:50 |
| take_profit_slippage | 0.5 points | trade_execution_engine.py:51 |
Grading Configuration
| Parameter | Value | Source File |
|---|---|---|
| timeframe_alignment_weight | 30% | setup_quality_detection.py:44 |
| trend_strength_weight | 20% | setup_quality_detection.py:45 |
| key_level_proximity_weight | 20% | setup_quality_detection.py:47 |
| entry_technique_weight | 15% | setup_quality_detection.py:46 |
| risk_reward_weight | 15% | setup_quality_detection.py:48 |
| a_plus_min_score | 90 | setup_quality_detection.py:51 |
| a_min_score | 80 | setup_quality_detection.py:52 |
| b_min_score | 70 | setup_quality_detection.py:53 |
APPENDIX B: SOURCE CODE REFERENCE
| File | Purpose |
|---|---|
main.py |
Entry point, timeframe configuration |
trend_analysis_core.py |
MA calculation, slope detection, trend direction |
multi_timeframe_analysis.py |
MTF alignment scoring across 5 timeframes |
market_state_analysis.py |
7 market state detection algorithms |
setup_quality_detection.py |
5-factor grading system with penalties/bonuses |
probability_zone_analysis.py |
Halves/Thirds, Three-Finger Spread, Crash Bar |
signal_generation_trade_management.py |
Entry/Exit logic, stop/target calculation |
trade_execution_engine.py |
Breakeven, Trailing stop, Slippage modeling |
data_manager.py |
OHLCV data loading and management |
Document generated from source code analysis - January 2026
Strategy: Multi-Layer Confluence (MLC) v1.0