Jump to content

Alpha Research: Difference between revisions

From PlusEV Wiki Page
No edit summary
No edit summary
 
(48 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Multi_Timeframe Dynamic Trend Reversion (MTF_DTR) =
= Multi_Timeframe Dynamic Trend (MTFDR) =
----
----


Line 6: Line 6:
== What Is This Strategy? ==
== 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.
'''Multi_Timeframe Dynamic Trend(MTFDR)''' is a systematic intraday trading strategy that requires multiple analytical layers to align before taking a trade. Each layer must be present for a valid setup. Market behavior is probabilistic, not predictive. The goal is positioning with asymmetric probabilities, not prediction.


== Layered Architecture (Top-Down) ==
== Layered Architecture (Top-Down) ==
Line 13: Line 13:
┌─────────────────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────────────────┐
│                                                            │
│                                                            │
│  LAYER 1: MULTI-TIMEFRAME ANALYSIS  ◄── THE FOUNDATION    │
│  LAYER 1: MULTI-TIMEFRAME ANALYSIS  - FOUNDATION LAYER   │
│  5 timeframes analyzed for trend alignment                │
│  5 timeframes analyzed for trend alignment                │ context
│  Daily → 4H → 1H → 15M → 5M                              │
│  Daily → 4H → 1H → 15M → 5M                              │
│                                                            │
│                                                            │
Line 30: Line 30:
├─────────────────────────────────────────────────────────────┤
├─────────────────────────────────────────────────────────────┤
│                                                            │
│                                                            │
│  LAYER 4: FILTERS (Trade/No_Trade)            
│  LAYER 4: FILTERS (Trade/No_Trade)                      
│  • Direction: MA21 slope must match trade direction        │Filters
│  • Direction: MA21 slope must match trade direction        │Filters
│  • Grade: Only A+, A, B grades can trade                  │
│  • Grade: Only A+, A, B grades can trade                  │
Line 208: Line 208:
|}
|}


----
== Probability Zone Analysis ==
 
=== The Asymmetric Probability Edge ===
 
When odds are low on one outcome, '''the opposite side usually carries high odds''':
* If new high probability drops to 15%, then '''85% odds favor reversal'''
* We position ourselves on high-probability side where price position within recent range determines continuation probability:
* Every large move is divided into '''halves and thirds''', creating probability zones.
=== Odds of Continuation After Pullback ===
<pre>
┌─────────────────────────────────────────────────────┐
│  SWING HIGH                                        │
├─────────────────────────────────────────────────────┤
│  TOP THIRD        →  ~80% chance of new high        │ 
├─────────────────────────────────────────────────────┤
│  TOP HALF        →  ~66% chance of new high        │
├─────────────────────────────────────────────────────┤
│  BOTTOM HALF      →  ~33% chance of new high        │
├─────────────────────────────────────────────────────┤
│  BOTTOM THIRD    →  ~15% chance of new high        │ 
├─────────────────────────────────────────────────────┤
│  SWING LOW                                          │
└─────────────────────────────────────────────────────┘
</pre>
 
{| class="wikitable"
|-
! Zone !! Position !! Continuation Probability !! Action
|-
| '''Top Third''' || >66.6% of range || '''80%''' likely to continue higher || Favor LONG
|-
| '''Top Half''' || >50% of range || '''65%''' continuation || Moderate LONG bias
|-
| '''Bottom Half''' || <50% of range || '''35%''' continuation higher || Moderate SHORT bias
|-
| '''Bottom Third''' || <33.3% of range || '''15%''' continuation ('''85% reversal''') || Favor SHORT
|}
 
=== 3-Finger Spread ===
 
Measures separation between Price, 21 MA, and 200 MA:
 
<pre>
Three-Finger Spread Detection:
  - Large spread between Price/21MA/200MA
  - Indicates profit-taking pressure imminent
  - Minimum spread threshold: 2% of price
 
Structure Types:
  UPTREND:    Price > 21 MA > 200 MA (bullish stack)
  DOWNTREND:  Price < 21 MA < 200 MA (bearish stack)
  SIDEWAYS:  No clear MA separation
</pre>
 
=== Crash Bar Detection ===
 
Identifies structural breaks via unusually large bars:
 
{| class="wikitable"
|-
! Parameter !! Value !! Meaning
|-
| crash_bar_multiplier || 2.0 || Bar must be 2× average size
|-
| crash_bar_lookback || 10 bars || Average calculated over 10 bars
|-
| crash_bar_close_threshold || 30% || Close within 30% of bar extreme
|}
 
=== Pullback Classification ===
 
{| class="wikitable"
|-
! Type !! Characteristics !! Action
|-
| '''Healthy Pullback''' || 45° drift, holds above halfway point || Good entry opportunity
|-
| '''Collapse''' || Vertical drop (>60% retracement) || Avoid entry, wait for structure
|-
| '''Bounce''' || Recovery after crash bar || Short opportunity
|}
 
=== Signal Filtering ===
 
Probability zones filter signals:
 
# Zone-based filtering (soft filter - affects score, doesn't block)
 
if zone_position < 33.3%:  # Bottom third
    # Block LONG signals (only 15% chance of continuation)
    # Allow SHORT signals
 
if zone_position > 66.7%:  # Top third
    # Allow LONG signals (80% continuation)
    # Block SHORT signals


= PART 5: LAYER 3 - SETUP QUALITY GRADING =
= PART 5: LAYER 3 - SETUP QUALITY GRADING =
Line 287: Line 381:
----
----


= PART 6: LAYER 4 - FILTERS=
= PART 6: HARD LAYER 4 - FILTERS=


<div style="background:#ffe6e6; border:1px solid #ff0000; padding:10px; margin:10px 0;">
<div style="background:#ffe6e6; border:1px solid #ff0000; padding:10px; margin:10px 0;">
Line 318: Line 412:
| '''Flat''' (→) || Use MTF direction || Higher timeframes decide
| '''Flat''' (→) || Use MTF direction || Higher timeframes decide
|}
|}
<pre>
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)
</pre>


== Filter 2: Grade ==
== Filter 2: Grade ==
Line 370: Line 454:
* Allows for normal market noise
* Allows for normal market noise


== Available Entry Techniques ==
== Entry Techniques ==


{| class="wikitable"
{| class="wikitable"
Line 390: Line 474:
| BOS_ENTRY_SHORT || Short || Break of structure to downside
| BOS_ENTRY_SHORT || Short || Break of structure to downside
|}
|}
== Entry Selection Logic ==
<source lang="python">
def select_entry_technique(price, ma21, direction, market_state):
    """
    Select best entry technique based on conditions.
    Source: signal_generation_trade_management.py
    """
    ma_distance = abs(price - ma21)
    # Most common: price in MA zone
    if ma_distance <= 25:  # ±25 points
        return NEAR_MA
    # Break of structure detected
    if market_state.has_bos:
        return BOS_ENTRY_LONG if direction == LONG else BOS_ENTRY_SHORT
    # Pullback/Rally pattern
    if market_state.has_pullback:
        return GREEN_BAR_AFTER_PULLBACK if direction == LONG else RED_BAR_AFTER_RALLY
    return NEAR_MA  # Default
</source>
----


= PART 8: STOP LOSS CALCULATION =
= PART 8: STOP LOSS CALCULATION =
Line 436: Line 493:


<div style="background:#ffffcc; border:1px solid #ffcc00; padding:10px; margin:10px 0;">
<div style="background:#ffffcc; border:1px solid #ffcc00; padding:10px; margin:10px 0;">
'''MINIMUM: 40 points''' - Stops closer than 40 points are automatically widened to 40.
'''MINIMUM: 40 points'''
</div>
</div>


Line 442: Line 499:
* Getting stopped out by normal noise
* Getting stopped out by normal noise
* Excessive trading costs from tight stops
* Excessive trading costs from tight stops
* Whipsaws in volatile Crude Oil market
* Whipsaws in market manipulations, this varies depending on markets, nature of that trade
 
== Stop Calculation Algorithm ==
 
<source lang="python">
def calculate_stop_loss(entry_price, direction, market_state):
    """
    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
 
    # ENFORCE 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
 
    return stop
</source>
 
----


= PART 9: TARGET CALCULATION =
= PART 9: TARGET CALCULATION =
Line 489: Line 508:
'''Target = 50% of distance to MA21'''
'''Target = 50% of distance to MA21'''


For mean reversion trades, we target halfway back to the moving average.
For mean reversion trades, we target halfway back to moving average.
</div>
</div>


Line 513: Line 532:
   Final Target: 5760 (60 points)
   Final Target: 5760 (60 points)
</pre>
</pre>
== Target Calculation ==
<source lang="python">
def calculate_target(entry_price, stop_price, ma21, direction):
    """
    PDF-based target: 50% of distance to MA, with minimum.
    Source: signal_generation_trade_management.py
    """
    risk_distance = abs(entry_price - stop_price)
    min_target = risk_distance * 1.5  # Minimum 1.5:1 R:R
    # Calculate 50% move toward MA
    distance_to_ma = abs(entry_price - ma21)
    target_distance = distance_to_ma * 0.5
    # Enforce minimum
    target_distance = max(target_distance, min_target)
    if direction == LONG:
        return entry_price + target_distance
    else:
        return entry_price - target_distance
</source>
----


= PART 10: DYNAMIC STOP MANAGEMENT =
= PART 10: DYNAMIC STOP MANAGEMENT =
Line 606: Line 599:
= PART 11: SLIPPAGE & COSTS =
= PART 11: SLIPPAGE & COSTS =


== Realistic Slippage Model ==
== Slippage Model ==


{| class="wikitable"
{| class="wikitable"
Line 639: Line 632:
* Prevents over-optimistic performance estimates
* Prevents over-optimistic performance estimates
* Stop loss slippage is higher because stops often trigger during fast moves
* Stop loss slippage is higher because stops often trigger during fast moves
* Total costs ~Rs 79 per round-trip lot
* Total costs ~Rs 136  per round-trip lot for Crudeoil 1 lot, Nifty 158


----
----
Line 645: Line 638:
= PART 12: EXIT RULES =
= PART 12: EXIT RULES =


== Three Exit Conditions ==
== 3 Exit Conditions ==


{| class="wikitable"
{| class="wikitable"
|-
|-
! Exit Type !! Condition !! % of Exits
! Exit Type !! Condition
|-
|-
| '''Stop Loss''' || Price hits stop (original or trailing) || 72.3%
| '''Stop Loss''' || Price hits stop (original or trailing)
|-
|-
| '''Target''' || Price hits take profit level || 22.8%
| '''Target''' || Price hits take profit level
|-
|-
| '''Timeout''' || End of day (no overnight holds) || 5.0%
| '''Timeout''' || End of day (no overnight holds)
|}
|}
== 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 ==
<pre>
All positions closed before market close:
  - Market closes at 11:30 PM IST
  - 15-minute buffer before close
  - Prevents overnight gap risk
</pre>
----


= PART 13: PUTTING IT ALL TOGETHER =
= PART 13: PUTTING IT ALL TOGETHER =
Line 781: Line 756:


= APPENDIX A: CONFIGURATION VALUES =
= APPENDIX A: CONFIGURATION VALUES =
== MTF Configuration ==
{| class="wikitable"
|-
! Parameter !! Value !! Source File !! Description
|-
| context_timeframe || DAILY || main.py:162 || Highest timeframe for overall bias
|-
| primary_timeframe || 1-HOUR || main.py:163 || Primary trend direction
|-
| confirmation_timeframe || 15-MIN || main.py:164 || Entry timing confirmation
|-
| entry_timeframe || 5-MIN || main.py:165 || Execution timeframe
|-
| require_all_timeframes_aligned || '''False''' || main.py:166 || Allow partial alignment
|-
| min_alignment_score || '''0.70 (70%)''' || main.py:167 || Minimum MTF alignment score
|-
| wait_for_15min_alignment || '''True''' || main.py:168 || Wait for 15M confirmation
|-
| min_15min_confirmation_bars || '''2 bars''' || main.py:169 || Bars needed for 15M confirmation
|}


== Entry Configuration ==
== Entry Configuration ==
Line 793: Line 791:
|-
|-
| blocked_hours || [9, 22, 23] || signal_generation_trade_management.py:137
| blocked_hours || [9, 22, 23] || signal_generation_trade_management.py:137
|-
| enable_hour_filter || True || signal_generation_trade_management.py:89
|-
| enable_ma_direction_filter || True || signal_generation_trade_management.py:97
|}
|}


Line 840: Line 842:
|-
|-
| base_slippage_points || 1.0 point || trade_execution_engine.py:38
| base_slippage_points || 1.0 point || trade_execution_engine.py:38
|-
| volatility_slippage_factor || 0.5 || trade_execution_engine.py:39
|-
| market_impact_factor || 0.1 || trade_execution_engine.py:40
|-
| max_market_impact_slippage || 2.0 points || trade_execution_engine.py:43
|-
|-
| stop_loss_slippage || 2.0 points || trade_execution_engine.py:50
| stop_loss_slippage || 2.0 points || trade_execution_engine.py:50
|-
|-
| take_profit_slippage || 0.5 points || trade_execution_engine.py:51
| take_profit_slippage || 0.5 points || trade_execution_engine.py:51
|}
== Trade Execution Limits ==
{| class="wikitable"
|-
! Parameter !! Value !! Source File !! Description
|-
| max_holding_period_minutes || '''480 (8 hours)''' || trade_execution_engine.py:46 || Maximum time a trade can stay open
|-
| min_holding_period_minutes || '''5 minutes''' || trade_execution_engine.py:47 || Minimum holding before exit
|-
| max_position_size || '''200 lots''' || trade_execution_engine.py:54 || Maximum lots per single trade
|-
| max_concurrent_trades || '''3''' || trade_execution_engine.py:55 || Maximum simultaneous open trades
|-
| market_close_buffer_minutes || '''15 minutes''' || trade_execution_engine.py:75 || Close trades before market close
|-
| avoid_news_minutes || 30 minutes || trade_execution_engine.py:74 || Buffer around news events
|}
== Cost Configuration ==
{| class="wikitable"
|-
! Parameter !! Value !! Source File !! Description
|-
| commission_per_lot || '''Rs 20/lot/leg''' || signal_generation_trade_management.py:49 || Dhan broker commission
|-
| transaction_tax_rate || '''0.005% per leg''' || signal_generation_trade_management.py:55 || CTT (0.01% round-trip)
|-
| lot_size_multiplier || '''100 barrels''' || signal_generation_trade_management.py:56 || MCX Crude lot size
|-
| initial_capital || '''Rs 1,00,000''' || main.py:1131 || Starting capital for backtest
|}
|}


Line 869: Line 911:
|}
|}


----
== Probability Zone Configuration ==
 
= APPENDIX B: SOURCE CODE REFERENCE =


{| class="wikitable"
{| class="wikitable"
|-
|-
! File !! Purpose
! Parameter !! Value !! Source File
|-
|-
| <code>main.py</code> || Entry point, timeframe configuration
| enable_probability_zone_filter || True || signal_generation_trade_management.py:104
|-
|-
| <code>trend_analysis_core.py</code> || MA calculation, slope detection, trend direction
| probability_zone_swing_lookback || 20 bars || signal_generation_trade_management.py:105
|-
|-
| <code>multi_timeframe_analysis.py</code> || MTF alignment scoring across 5 timeframes
| probability_zone_min_range || 20 points || signal_generation_trade_management.py:106
|-
|-
| <code>market_state_analysis.py</code> || 7 market state detection algorithms
| top_third_threshold || 66.7% || probability_zone_analysis.py:125
|-
|-
| <code>setup_quality_detection.py</code> || 5-factor grading system with penalties/bonuses
| top_third_probability || 80% || probability_zone_analysis.py:131
|-
|-
| <code>probability_zone_analysis.py</code> || Halves/Thirds, Three-Finger Spread, Crash Bar
| bottom_third_probability || 15% || probability_zone_analysis.py:134
|-
|-
| <code>signal_generation_trade_management.py</code> || Entry/Exit logic, stop/target calculation
| crash_bar_multiplier || 2.0 || probability_zone_analysis.py:145
|-
|-
| <code>trade_execution_engine.py</code> || Breakeven, Trailing stop, Slippage modeling
| 3_finger_min_spread_pct || 2% || probability_zone_analysis.py:141
|-
 
| <code>data_manager.py</code> || OHLCV data loading and management
|}
|}


----
----
''Document generated from source code analysis - January 2026''
''Strategy: Multi-Layer Confluence (MLC) v1.0''
[[Category:Trading Strategies]]
[[Category:Systematic Trading]]
[[Category:MCX Crude Oil]]

Latest revision as of 06:40, 6 January 2026

Multi_Timeframe Dynamic Trend (MTFDR)

[edit]

PART 1: STRATEGY OVERVIEW

[edit]

What Is This Strategy?

[edit]

Multi_Timeframe Dynamic Trend(MTFDR) is a systematic intraday trading strategy that requires multiple analytical layers to align before taking a trade. Each layer must be present for a valid setup. Market behavior is probabilistic, not predictive. The goal is positioning with asymmetric probabilities, not prediction.

Layered Architecture (Top-Down)

[edit]
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   LAYER 1: MULTI-TIMEFRAME ANALYSIS  - FOUNDATION LAYER    │
│   5 timeframes analyzed for trend alignment                 │ context
│   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)

[edit]

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

[edit]

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)

[edit]

THIS IS THE FOUNDATION - Everything else builds on top of MTF alignment. If timeframes disagree, we don't trade.

The 5 Timeframes

[edit]
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

[edit]

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

[edit]
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

[edit]
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

[edit]

The 7 Market State Algorithms

[edit]

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

[edit]
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

[edit]
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

Probability Zone Analysis

[edit]

The Asymmetric Probability Edge

[edit]

When odds are low on one outcome, the opposite side usually carries high odds:

  • If new high probability drops to 15%, then 85% odds favor reversal
  • We position ourselves on high-probability side where price position within recent range determines continuation probability:
  • Every large move is divided into halves and thirds, creating probability zones.

Odds of Continuation After Pullback

[edit]
┌─────────────────────────────────────────────────────┐
│  SWING HIGH                                         │
├─────────────────────────────────────────────────────┤
│  TOP THIRD        →  ~80% chance of new high        │  
├─────────────────────────────────────────────────────┤
│  TOP HALF         →  ~66% chance of new high        │
├─────────────────────────────────────────────────────┤
│  BOTTOM HALF      →  ~33% chance of new high        │
├─────────────────────────────────────────────────────┤
│  BOTTOM THIRD     →  ~15% chance of new high        │  
├─────────────────────────────────────────────────────┤
│  SWING LOW                                          │
└─────────────────────────────────────────────────────┘
Zone Position Continuation Probability Action
Top Third >66.6% of range 80% likely to continue higher Favor LONG
Top Half >50% of range 65% continuation Moderate LONG bias
Bottom Half <50% of range 35% continuation higher Moderate SHORT bias
Bottom Third <33.3% of range 15% continuation (85% reversal) Favor SHORT

3-Finger Spread

[edit]

Measures separation between Price, 21 MA, and 200 MA:

Three-Finger Spread Detection:
  - Large spread between Price/21MA/200MA
  - Indicates profit-taking pressure imminent
  - Minimum spread threshold: 2% of price

Structure Types:
  UPTREND:    Price > 21 MA > 200 MA (bullish stack)
  DOWNTREND:  Price < 21 MA < 200 MA (bearish stack)
  SIDEWAYS:   No clear MA separation

Crash Bar Detection

[edit]

Identifies structural breaks via unusually large bars:

Parameter Value Meaning
crash_bar_multiplier 2.0 Bar must be 2× average size
crash_bar_lookback 10 bars Average calculated over 10 bars
crash_bar_close_threshold 30% Close within 30% of bar extreme

Pullback Classification

[edit]
Type Characteristics Action
Healthy Pullback 45° drift, holds above halfway point Good entry opportunity
Collapse Vertical drop (>60% retracement) Avoid entry, wait for structure
Bounce Recovery after crash bar Short opportunity

Signal Filtering

[edit]

Probability zones filter signals:

  1. Zone-based filtering (soft filter - affects score, doesn't block)

if zone_position < 33.3%: # Bottom third

   # Block LONG signals (only 15% chance of continuation)
   # Allow SHORT signals

if zone_position > 66.7%: # Top third

   # Allow LONG signals (80% continuation)
   # Block SHORT signals

PART 5: LAYER 3 - SETUP QUALITY GRADING

[edit]

The 5-Factor Scoring System

[edit]

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

[edit]
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

[edit]

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

[edit]
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: HARD LAYER 4 - FILTERS

[edit]

HARD FILTERS block trades completely. If ANY hard filter fails, NO TRADE happens regardless of how good the setup looks.

3 Hard Filters

[edit]
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)

[edit]
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

Filter 2: Grade

[edit]
Grade Action
A+, A, B PASS - Proceed to entry
C, D, F BLOCKED - No trade

Filter 3: Hour [work in progress examples]

[edit]
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

[edit]

MA21 Zone Principle

[edit]

"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?

[edit]
  • Price rarely touches MA exactly
  • Allows for normal market noise

Entry Techniques

[edit]
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

[edit]

Stop Loss Methods (Priority Order)

[edit]
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

[edit]

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

PART 9: TARGET CALCULATION

[edit]

The 50% Rule

[edit]

Target = 50% of distance to MA21

For mean reversion trades, we target halfway back to moving average.

Why 50%?

[edit]
  • 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

[edit]
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

[edit]

Two-Phase Protection

[edit]

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

[edit]
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

[edit]
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?

[edit]
Phase Purpose
Breakeven Eliminate risk quickly once trade moves in favor
Trailing Let winners run while protecting accumulated profit

PART 11: SLIPPAGE & COSTS

[edit]

Slippage Model

[edit]
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

[edit]
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?

[edit]
  • 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 136 per round-trip lot for Crudeoil 1 lot, Nifty 158

PART 12: EXIT RULES

[edit]

3 Exit Conditions

[edit]
Exit Type Condition
Stop Loss Price hits stop (original or trailing)
Target Price hits take profit level
Timeout End of day (no overnight holds)

PART 13: PUTTING IT ALL TOGETHER

[edit]

Trade Flow

[edit]
┌─────────────────────────────────────────────────────────────────┐
│  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

[edit]

Understanding the Difference

[edit]
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

[edit]
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

[edit]

MTF Configuration

[edit]
Parameter Value Source File Description
context_timeframe DAILY main.py:162 Highest timeframe for overall bias
primary_timeframe 1-HOUR main.py:163 Primary trend direction
confirmation_timeframe 15-MIN main.py:164 Entry timing confirmation
entry_timeframe 5-MIN main.py:165 Execution timeframe
require_all_timeframes_aligned False main.py:166 Allow partial alignment
min_alignment_score 0.70 (70%) main.py:167 Minimum MTF alignment score
wait_for_15min_alignment True main.py:168 Wait for 15M confirmation
min_15min_confirmation_bars 2 bars main.py:169 Bars needed for 15M confirmation

Entry Configuration

[edit]
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
enable_hour_filter True signal_generation_trade_management.py:89
enable_ma_direction_filter True signal_generation_trade_management.py:97

Stop/Target Configuration

[edit]
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

[edit]
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

[edit]
Parameter Value Source File
base_slippage_points 1.0 point trade_execution_engine.py:38
volatility_slippage_factor 0.5 trade_execution_engine.py:39
market_impact_factor 0.1 trade_execution_engine.py:40
max_market_impact_slippage 2.0 points trade_execution_engine.py:43
stop_loss_slippage 2.0 points trade_execution_engine.py:50
take_profit_slippage 0.5 points trade_execution_engine.py:51

Trade Execution Limits

[edit]
Parameter Value Source File Description
max_holding_period_minutes 480 (8 hours) trade_execution_engine.py:46 Maximum time a trade can stay open
min_holding_period_minutes 5 minutes trade_execution_engine.py:47 Minimum holding before exit
max_position_size 200 lots trade_execution_engine.py:54 Maximum lots per single trade
max_concurrent_trades 3 trade_execution_engine.py:55 Maximum simultaneous open trades
market_close_buffer_minutes 15 minutes trade_execution_engine.py:75 Close trades before market close
avoid_news_minutes 30 minutes trade_execution_engine.py:74 Buffer around news events

Cost Configuration

[edit]
Parameter Value Source File Description
commission_per_lot Rs 20/lot/leg signal_generation_trade_management.py:49 Dhan broker commission
transaction_tax_rate 0.005% per leg signal_generation_trade_management.py:55 CTT (0.01% round-trip)
lot_size_multiplier 100 barrels signal_generation_trade_management.py:56 MCX Crude lot size
initial_capital Rs 1,00,000 main.py:1131 Starting capital for backtest

Grading Configuration

[edit]
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

Probability Zone Configuration

[edit]
Parameter Value Source File
enable_probability_zone_filter True signal_generation_trade_management.py:104
probability_zone_swing_lookback 20 bars signal_generation_trade_management.py:105
probability_zone_min_range 20 points signal_generation_trade_management.py:106
top_third_threshold 66.7% probability_zone_analysis.py:125
top_third_probability 80% probability_zone_analysis.py:131
bottom_third_probability 15% probability_zone_analysis.py:134
crash_bar_multiplier 2.0 probability_zone_analysis.py:145
3_finger_min_spread_pct 2% probability_zone_analysis.py:141