Files
the_information_nexus/financial_docs/vwap_atr.md

19 KiB
Raw Blame History

2SD VWAP Trading System

Simple Reference Guide

Chart Setup

Timeframe: 15-minute
Markets: ES1! and BTC/USDT
Indicators:
- VWAP (blue line)
- 2SD Bands (upper=red, lower=green)
- ATR (14 period)

Trading Patterns

Long Setup (Green Light)

  1. Price touches lower band
  2. Candle closes back above band
  3. Clear path to VWAP exists
  4. Enter next candle
  5. Stop below rejection
  6. Target at VWAP

Short Setup (Red Light)

  1. Price touches upper band
  2. Candle closes back below band
  3. Clear path to VWAP exists
  4. Enter next candle
  5. Stop above rejection
  6. Target at VWAP

Position Sizing

Position = Account Risk ÷ Current ATR

Example:
Risk = $100
ATR = $2.50
Position = 40 units

Exit Rules

  1. Hit VWAP = Take profit
  2. Stop hit = Exit
  3. Pattern breaks = Exit

Trading Checklist

Pre-Trade:

  • Price touched band
  • Clean rejection visible
  • Clear path to VWAP
  • ATR noted
  • Position size calculated

Entry:

  • Place entry order
  • Set stop loss
  • Set VWAP target

Key Principles

  1. Pattern exists or doesn't
  2. No extra conditions needed
  3. Let VWAP handle target
  4. Honor all stops
  5. Next setup always comes

Remember: Simple. Mechanical. Consistent.


2SD VWAP Trading System Checklist

Setup Process

1. Initial Setup

  • Open TradingView
  • Create two charts side by side
  • Left: ES1! 15-minute
  • Right: BTC/USDT 15-minute
  • Clear all existing indicators

2. Add Indicators

  • Add VWAP (standard settings)
  • Add 2SD bands (using code provided)
  • Add ATR (14 period)
  • Make VWAP blue, upper band red, lower band green
  • Verify indicators are updating correctly

3. Alert Setup

  • Create band touch alert (upper)
  • Create band touch alert (lower)
  • Set alerts to 'Once Per Bar'
  • Include ATR value in alert message
  • Test alerts are working

Trade Process

Pre-Trade Checklist

  • Alert received
  • Check which band was touched
  • Note current ATR value
  • Calculate position size (Risk/ATR)
  • Verify pattern exists:
    • Price touched band
    • Clear rejection visible
    • Room to VWAP exists

Trade Execution

  • Enter after rejection confirms
  • Place stop beyond rejection point
  • Set target at VWAP
  • Record entry details:
    • Entry price
    • Position size
    • Stop level
    • Target level
  • Monitor for pattern break

Quick Reference

Long Setup 🟢

  • → Touch lower band
  • → Rejection upward
  • → Target: VWAP
  • → Stop: Below rejection

Short Setup 🔴

  • → Touch upper band
  • → Rejection downward
  • → Target: VWAP
  • → Stop: Above rejection

Position Sizing Formula

Position Size = Account Risk / Current ATR
Example:
- Risk: $100
- ATR: $2.50
- Position = $100/$2.50

Pattern Requirements

  1. Clean move to band
  2. Clear rejection
  3. Room to VWAP
  4. No pattern = No trade

Remember

  • Pattern exists or doesn't - no maybes
  • Use ATR for position sizing only
  • Exit at VWAP or pattern break
  • Keep it simple

Note: Check all boxes ([ ]) as you complete each step. Reset checklist for each new trading session.


Let me check our explicit verification against the original system design and identify any biases or misalignments.

ORIGINAL CORE SYSTEM:

1. Basic Elements:
- VWAP + 2SD bands
- ATR for position sizing
- ES 15m primary, BTC 15m secondary

2. Simple Signal:
- Price touches 2SD
- Rejection occurs
- No other conditions needed

3. Position Size:
Position = Account Risk / ATR

4. Management:
- Exit at VWAP or pattern break

IDENTIFIED MISALIGNMENTS/BIASES:

  1. Over-Specification:
Removed:
- "At least 10 bars since last band touch"
- "Closes in upper/lower 50% of range"
- Specific wick requirements
  1. Added Complexity:
Removed:
- Multiple validation layers
- Excessive disqualifiers
- Detailed space checks

2SD VWAP Trading System Checklist

Setup Process

  • Open TradingView
  • Create two charts:
    • ES1! 15-minute
    • BTC/USDT 15-minute
  • Add indicators:
    • VWAP (standard)
    • 2SD bands
    • ATR (14)

Pattern Verification

LONG Setup

  1. Band Touch:
  • Price touches/crosses lower band
  • Clean, single move to band
  1. Rejection:
  • Candle closes back above band
  • Clear reversal visible
  1. Target Space:
  • VWAP visible above
  • Clear path to VWAP

SHORT Setup

  1. Band Touch:
  • Price touches/crosses upper band
  • Clean, single move to band
  1. Rejection:
  • Candle closes back below band
  • Clear reversal visible
  1. Target Space:
  • VWAP visible below
  • Clear path to VWAP

Trade Implementation

Position Sizing

Position = Account Risk / Current ATR
Example:
- Risk: $100
- ATR: $2.50
- Position = 40 units

Entry

  • Enter after rejection confirms
  • Stop beyond rejection point
  • Target at VWAP

Exit

  • Hit VWAP = Exit
  • Pattern breaks = Exit
  • Stop hit = Exit

Pattern Examples

Valid Pattern

1. Clean touch of band
2. Clear rejection
3. Room to VWAP

Invalid Pattern

1. Multiple touches
2. No clear rejection
3. Blocked path to VWAP

Core Principles

  1. Pattern exists or doesn't
  2. No additional conditions needed
  3. ATR sizes position
  4. VWAP or break exits
  5. Keep it simple

Note: This is a complete checklist. If pattern exists, trade. If not, wait.


2SD/3SD VWAP Trading System

Complete System Documentation

I. System Overview

Core Concept

A mechanical mean reversion system trading rejections from statistical deviation bands back to VWAP.

Statistical Foundation

Price Distribution Zones:
- 2SD captures 95% of price movement
- 3SD captures 99.7% of price movement
- VWAP represents mean price path

II. Technical Implementation

Core Calculations

// VWAP and Standard Deviation
vwap = ta.vwap
stdev = ta.stdev(vwap, 15)
atr = ta.atr(14)

// Band Calculations
upper_2sd = vwap + 2 * stdev
lower_2sd = vwap - 2 * stdev
upper_3sd = vwap + 3 * stdev
lower_3sd = vwap - 3 * stdev

// Entry Conditions
long_2sd = low <= lower_2sd and close > lower_2sd
short_2sd = high >= upper_2sd and close < upper_2sd
long_3sd = low <= lower_3sd and close > lower_3sd
short_3sd = high >= upper_3sd and close < upper_3sd

Alert Conditions

// Primary Alerts
alertcondition(long_2sd or short_2sd, "2SD Touch + Reject")
alertcondition(long_3sd or short_3sd, "3SD Touch + Reject")

// Alert Message Format
"{{ticker}} - Zone: {{band}} - ATR: {{atr}}"

III. Trading Mechanics

Position Sizing

2SD Trades:
Position = Risk ÷ ATR

3SD Trades:
Position = (Risk ÷ ATR) × 0.5

Example:
Risk = $100
ATR = $2.50
2SD Position = 40 units
3SD Position = 20 units

Entry Rules

2SD Long:
- Price touches lower 2SD band
- Candle closes above band
- Enter next candle open

2SD Short:
- Price touches upper 2SD band
- Candle closes below band
- Enter next candle open

3SD Rules:
- Same entry mechanics
- Half position size
- Wider stops typical

Stop Placement

All Trades:
- Behind rejection candle
- Account for volatility
- No adjustments after entry

Target Selection

2SD Trades:
- Target = VWAP
- Exit on pattern break

3SD Trades:
- Primary Target = VWAP
- Secondary Target = 2SD band
- Exit on pattern break

IV. Implementation Details

Python Components

class VWAPSystem:
    def __init__(self):
        self.lookback = 15
        self.atr_period = 14
        
    def calculate_bands(self, data):
        # VWAP calculation
        data['vwap'] = self.calculate_vwap(data)
        
        # Standard deviation
        data['stdev'] = data['vwap'].rolling(self.lookback).std()
        
        # Band calculations
        data['upper_2sd'] = data['vwap'] + 2 * data['stdev']
        data['lower_2sd'] = data['vwap'] - 2 * data['stdev']
        data['upper_3sd'] = data['vwap'] + 3 * data['stdev']
        data['lower_3sd'] = data['vwap'] - 3 * data['stdev']
        
        return data
    
    def check_signals(self, data):
        # Entry conditions
        data['long_2sd'] = (data['low'] <= data['lower_2sd']) & 
                          (data['close'] > data['lower_2sd'])
        data['short_2sd'] = (data['high'] >= data['upper_2sd']) & 
                           (data['close'] < data['upper_2sd'])
        data['long_3sd'] = (data['low'] <= data['lower_3sd']) & 
                          (data['close'] > data['lower_3sd'])
        data['short_3sd'] = (data['high'] >= data['upper_3sd']) & 
                           (data['close'] < data['upper_3sd'])
        
        return data

Pine Script Structure

//@version=5
indicator("2SD/3SD VWAP System")

// Core calculations
vwap = ta.vwap
stdev = ta.stdev(vwap, 15)
atr = ta.atr(14)

// Bands
var float[] bands = calculate_bands(vwap, stdev)
var float[] signals = check_signals(bands)

// Plotting
plot(vwap, "VWAP", color=color.blue)
plot(bands[0], "Upper 2SD", color=color.red)
plot(bands[1], "Lower 2SD", color=color.green)

V. Process Flow

Trading Session Flow

1. Setup Phase:
   → Load charts (ES 15min, BTC 15min)
   → Verify indicators
   → Activate alerts

2. Monitoring Phase:
   → Wait for alerts
   → Identify band touch
   → Confirm rejection

3. Execution Phase:
   → Calculate position size
   → Place entry order
   → Set stop loss
   → Set target

4. Management Phase:
   → Monitor for target hit
   → Watch for pattern break
   → Exit on either condition

Decision Tree

Alert Received
    ↓
Check Zone (2SD or 3SD)
    ↓
Verify Rejection
    ↓
Calculate Position
    ↓
Execute Trade
    ↓
Monitor to Exit

VI. System Rules Summary

Core Rules

  1. Trade rejections only
  2. Size by ATR
  3. Enter after rejection
  4. Exit at target or break
  5. No exceptions

Position Rules

  1. 2SD = full size
  2. 3SD = half size
  3. No averaging
  4. No scaling

Exit Rules

  1. Hit VWAP = win
  2. Pattern breaks = exit
  3. Stop hit = exit
  4. No adjustments

VII. Implementation Checklist

Setup

  • Install indicators
  • Configure alerts
  • Test calculations
  • Verify data feed

Trading

  • Monitor alerts
  • Check zone
  • Calculate position
  • Execute mechanically
  • Record results

End of Documentation.


Let me create a React component version of the checklist that will render properly.

import React from 'react';
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';

const TradingChecklist = () => {
  return (
    <div className="max-w-4xl mx-auto space-y-6 p-6">
      <Card className="border border-gray-200">
        <CardHeader className="bg-gray-50 border-b border-gray-200">
          <CardTitle className="text-lg font-semibold">2SD/3SD VWAP Trading System Checklist</CardTitle>
        </CardHeader>
        <CardContent className="p-4 space-y-6">
          <div>
            <h2 className="text-lg font-semibold mb-3">Pre-Session Setup</h2>
            <div className="space-y-2">
              <div>
                <h3 className="font-medium">TradingView Charts</h3>
                <ul className="ml-4 space-y-1">
                  <li> ES1! 15-minute</li>
                  <li> BTC/USDT 15-minute</li>
                </ul>
              </div>
              <div>
                <h3 className="font-medium">Indicators</h3>
                <ul className="ml-4 space-y-1">
                  <li> VWAP (blue)</li>
                  <li> 2SD bands (red upper, green lower)</li>
                  <li> 3SD bands (visible)</li>
                  <li> ATR (14 period)</li>
                </ul>
              </div>
              <div>
                <h3 className="font-medium">Alerts</h3>
                <ul className="ml-4 space-y-1">
                  <li> 2SD touches</li>
                  <li> 3SD touches</li>
                  <li> Once per bar</li>
                  <li> ATR value included</li>
                </ul>
              </div>
            </div>
          </div>

          <div>
            <h2 className="text-lg font-semibold mb-3">Trading Process</h2>
            <div className="space-y-4">
              <div>
                <h3 className="font-medium">On Alert</h3>
                <ul className="ml-4 space-y-1">
                  <li> Identify zone hit (2SD or 3SD)</li>
                  <li> Verify rejection candle</li>
                  <li> Note current ATR</li>
                </ul>
              </div>
              <div>
                <h3 className="font-medium">Position Sizing</h3>
                <ul className="ml-4 space-y-1">
                  <li> 2SD: Risk ÷ ATR</li>
                  <li> 3SD: (Risk ÷ ATR) × 0.5</li>
                </ul>
              </div>
            </div>
          </div>

          <div>
            <h2 className="text-lg font-semibold mb-3">Pattern Reference</h2>
            <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
              <div className="p-3 bg-green-50 rounded-lg">
                <h3 className="font-medium text-green-700">2SD Long</h3>
                <ul className="ml-4 space-y-1">
                  <li> Price touches lower 2SD</li>
                  <li> Candle closes above band</li>
                  <li> Clear path to VWAP</li>
                  <li> Full position size</li>
                </ul>
              </div>
              <div className="p-3 bg-red-50 rounded-lg">
                <h3 className="font-medium text-red-700">2SD Short</h3>
                <ul className="ml-4 space-y-1">
                  <li> Price touches upper 2SD</li>
                  <li> Candle closes below band</li>
                  <li> Clear path to VWAP</li>
                  <li> Full position size</li>
                </ul>
              </div>
              <div className="p-3 bg-green-50 rounded-lg">
                <h3 className="font-medium text-green-700">3SD Long</h3>
                <ul className="ml-4 space-y-1">
                  <li> Price touches lower 3SD</li>
                  <li> Candle closes above band</li>
                  <li> Path to VWAP/2SD clear</li>
                  <li> Half position size</li>
                </ul>
              </div>
              <div className="p-3 bg-red-50 rounded-lg">
                <h3 className="font-medium text-red-700">3SD Short</h3>
                <ul className="ml-4 space-y-1">
                  <li> Price touches upper 3SD</li>
                  <li> Candle closes below band</li>
                  <li> Path to VWAP/2SD clear</li>
                  <li> Half position size</li>
                </ul>
              </div>
            </div>
          </div>

          <div>
            <h2 className="text-lg font-semibold mb-3">Exit Rules</h2>
            <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
              <div>
                <h3 className="font-medium">2SD Trades</h3>
                <ul className="ml-4 space-y-1">
                  <li> Hit VWAP = Take profit</li>
                  <li> Pattern breaks = Exit</li>
                  <li> Stop hit = Exit</li>
                </ul>
              </div>
              <div>
                <h3 className="font-medium">3SD Trades</h3>
                <ul className="ml-4 space-y-1">
                  <li> Hit VWAP/2SD = Take profit</li>
                  <li> Pattern breaks = Exit</li>
                  <li> Stop hit = Exit</li>
                </ul>
              </div>
            </div>
          </div>

          <div className="p-4 bg-gray-50 rounded-lg">
            <h2 className="text-lg font-semibold mb-3">Key Reminders</h2>
            <ul className="space-y-1">
              <li> No additional filters</li>
              <li> No timeframe restrictions</li>
              <li> No extra indicators</li>
              <li> Pattern exists or doesn't</li>
              <li> Next setup always comes</li>
            </ul>
          </div>

          <div className="text-center font-medium">
            Alert  Pattern  Size  Trade  Exit
            <div className="mt-2 text-gray-600">Everything else is noise.</div>
          </div>
        </CardContent>
      </Card>
    </div>
  );
};

export default TradingChecklist;


The half position size at 3SD is based on statistical principles and risk management, but let me analyze this in detail.

3SD Position Size Analysis

Statistical Context

Price Distribution:
2SD = 95% of moves (1 in 20 events)
3SD = 99.7% of moves (1 in 370 events)

Current Rule:
2SD = Full size (Risk/ATR)
3SD = Half size (Risk/ATR × 0.5)

Examining The Logic

Arguments FOR Half Size

  1. Volatility Consideration

    • 3SD moves indicate higher volatility
    • May need wider stops
    • Higher ATR during these moves
  2. Statistical Rarity

    • Much rarer events
    • Less historical precedent
    • Harder to validate pattern
  3. Risk of Continuation

    • Strong momentum to reach 3SD
    • Could signal trend change
    • Higher probability of continuation

Arguments AGAINST Half Size

  1. Violates System Mechanics

    • Adds complexity
    • Introduces discretion
    • Breaks ATR sizing logic
  2. Statistical Edge

    • Stronger mean reversion potential
    • Clearer extreme condition
    • More defined edge
  3. ATR Already Adjusts

    • Higher volatility = Higher ATR
    • Position size naturally reduces
    • Built-in risk management

Position Sizing Reality

Example with $100 Risk:

Normal Market:
ATR = $2.50
2SD Position = $100/$2.50 = 40 units
3SD Position = $100/$2.50 × 0.5 = 20 units

High Volatility Market:
ATR = $5.00
2SD Position = $100/$5.00 = 20 units
3SD Position = $100/$5.00 × 0.5 = 10 units

BUT: ATR is likely already higher at 3SD!
If ATR = $5.00 at 3SD naturally:
Position = $100/$5.00 = 20 units
(Natural reduction without arbitrary halving)

Recommendation

Remove Half-Size Rule

New Rule: Position = Risk ÷ ATR
Reasoning:
1. ATR captures volatility
2. Keeps system mechanical
3. Removes complexity
4. Maintains consistency

Updated Position Logic

ALL Trades (2SD and 3SD):
1. Note current ATR
2. Calculate Position = Risk ÷ ATR
3. Place trade
4. No additional adjustments

Key Points

  1. ATR naturally adapts to volatility
  2. System should remain mechanical
  3. Arbitrary adjustments add bias
  4. Consistency breeds confidence

Conclusion

The half-size rule at 3SD appears to be:

  1. Redundant (ATR already adjusts)
  2. Adds complexity
  3. Breaks mechanical nature
  4. Introduces bias

Recommendation: Remove the half-size rule and maintain pure ATR-based sizing for all trades.


Remember: The best trading system is one you can execute consistently. Adding rules needs strong justification.

After this analysis, I believe we should:

  1. Remove the half-size rule
  2. Let ATR handle volatility naturally
  3. Maintain system simplicity
  4. Keep position sizing mechanical

Would you like me to:

  1. Update the system documentation?
  2. Provide example calculations?
  3. Add risk analysis metrics?
  4. Detail volatility adjustments?

The goal is to keep the system purely mechanical while letting the ATR handle position sizing naturally.