Alpha Research: Difference between revisions
No edit summary |
No edit summary |
||
| (92 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
= | = Multi_Timeframe Dynamic Trend (MTFDR) = | ||
---- | |||
= PART 1: STRATEGY OVERVIEW = | = PART 1: STRATEGY OVERVIEW = | ||
== What Is This Strategy? == | == What Is This Strategy? == | ||
''' | '''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) == | ||
<pre> | |||
┌─────────────────────────────────────────────────────────────┐ | |||
│ │ | |||
│ 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 | |||
│ │ | |||
│ │ | |||
└─────────────────────────────────────────────────────────────┘ | |||
</pre> | |||
= | = PART 2: Core Concept (Why This Works) = | ||
The edge comes from '''requiring multiple independent confirmations''' before trading. Each layer filters out bad trades: | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | |||
== The | |||
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: | = PART 3: LAYER 1 - MULTI-TIMEFRAME ANALYSIS (The Foundation) = | ||
<div style="background:# | <div style="background:#e6ffe6; border:1px solid #00cc00; padding:10px; margin:10px 0;"> | ||
'''THIS IS THE | '''THIS IS THE FOUNDATION''' - Everything else builds on top of MTF alignment. If timeframes disagree, we don't trade. | ||
</div> | </div> | ||
== | == The 5 Timeframes == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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: | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
<pre> | |||
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 | |||
</pre> | |||
</ | |||
= | == Why MTF Matters == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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: | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! # !! Algorithm !! What It Detects !! Impact | ||
|- | |- | ||
| | | 1 || '''Railroad Tracks''' || Strong momentum bars in sequence || +15% bonus | ||
|- | |- | ||
| Creeper Move || -50 penalty | | 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 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
=== 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" | {| 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> | <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> | </pre> | ||
=== Crash Bar Detection === | |||
= | |||
Identifies structural breaks via unusually large bars: | |||
{| class="wikitable" | {| 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" | {| 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 = | |||
- | == The 5-Factor Scoring System == | ||
Every potential trade is scored on 5 factors: | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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? | ||
|} | |} | ||
<div style="background:#e6f3ff; border:1px solid #3399ff; padding:10px; margin:10px 0;"> | |||
'''Note:''' Weights sum to 100%. Timeframe Alignment has highest weight (30%) because MTF is the foundation. | |||
</div> | |||
== | == Grade Thresholds == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
<pre> | |||
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 | |||
</pre> | |||
---- | ---- | ||
= PART | = PART 6: HARD LAYER 4 - FILTERS= | ||
= | <div style="background:#ffe6e6; border:1px solid #ff0000; padding:10px; margin:10px 0;"> | ||
'''HARD FILTERS''' block trades completely. If ANY hard filter fails, NO TRADE happens regardless of how good the setup looks. | |||
</div> | |||
== 3 Hard Filters == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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) == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Grade !! Action | ||
|- | |- | ||
| | | A+, A, B || '''PASS''' - Proceed to entry | ||
|- | |- | ||
| | | C, D, F || '''BLOCKED''' - No trade | ||
|} | |} | ||
== | == Filter 3: Hour [work in progress examples] == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | |||
<blockquote> | |||
'''"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. | |||
</blockquote> | |||
== | == Why ±25 Points? == | ||
== | * Price rarely touches MA exactly | ||
* Allows for normal market noise | |||
== Entry Techniques == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Technique !! Description | ! Technique !! Direction !! Description | ||
|- | |- | ||
| '''NEAR_MA''' || | | '''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) == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
<div style="background:#ffffcc; border:1px solid #ffcc00; padding:10px; margin:10px 0;"> | |||
'''MINIMUM: 40 points''' | |||
</div> | |||
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 = | |||
== The 50% Rule == | |||
<div style="background:#e6f3ff; border:1px solid #3399ff; padding:10px; margin:10px 0;"> | |||
'''Target = 50% of distance to MA21''' | |||
For mean reversion trades, we target halfway back to moving average. | |||
</div> | |||
== 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 == | |||
<pre> | |||
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) | |||
</pre> | |||
= PART 10: DYNAMIC STOP MANAGEMENT = | |||
== | == Two-Phase Protection == | ||
After entry, stops are managed dynamically in two phases: | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
<pre> | |||
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" | |||
</pre> | |||
== Phase 2: Trailing Stop == | |||
<pre> | <pre> | ||
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) | |||
</pre> | |||
== Why Both Phases? == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Phase !! Purpose | ||
|- | |- | ||
| | | Breakeven || Eliminate risk quickly once trade moves in favor | ||
|- | |- | ||
| | | Trailing || Let winners run while protecting accumulated profit | ||
|} | |} | ||
---- | ---- | ||
= PART | = PART 11: SLIPPAGE & COSTS = | ||
== | == Slippage Model == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 136 per round-trip lot for Crudeoil 1 lot, Nifty 158 | |||
---- | ---- | ||
= | = PART 12: EXIT RULES = | ||
== 3 Exit Conditions == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 = | |||
== Trade Flow == | |||
<pre> | <pre> | ||
Entry: | ┌─────────────────────────────────────────────────────────────────┐ | ||
│ 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 │ | |||
└─────────────────────────────────────────────────────────────────┘ | |||
</pre> | |||
---- | |||
= | = PART 14: HARD vs SOFT FILTERS = | ||
== Understanding the Difference == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 = | ||
== | == MTF Configuration == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Parameter !! Value | ! 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 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | |||
= | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 == | |||
== | |||
{| class="wikitable" | {| 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" | {| class="wikitable" | ||
|- | |- | ||
! Parameter !! Value !! Source | ! 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 1,211: | Line 892: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Parameter !! Value !! Source | ! Parameter !! Value !! Source File | ||
|- | |- | ||
| timeframe_alignment_weight || 30% || setup_quality_detection.py | | timeframe_alignment_weight || 30% || setup_quality_detection.py:44 | ||
|- | |- | ||
| trend_strength_weight || 20% || setup_quality_detection.py | | trend_strength_weight || 20% || setup_quality_detection.py:45 | ||
|- | |- | ||
| key_level_proximity_weight || 20% || setup_quality_detection.py | | key_level_proximity_weight || 20% || setup_quality_detection.py:47 | ||
|- | |- | ||
| entry_technique_weight || 15% || setup_quality_detection.py | | entry_technique_weight || 15% || setup_quality_detection.py:46 | ||
|- | |- | ||
| risk_reward_weight || 15% || setup_quality_detection.py | | 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 == | |||
= | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! 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 | ||
|} | |} | ||
---- | ---- | ||
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:
- 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 |