Pitchfork Breakout Strategy

PITCHFORK Pivot BREAKOUT Trend
Created on: 2025-10-29 15:41:18 Modified on: 2025-10-29 15:41:18
Copy: 11 Number of hits: 195
avatar of ianzeng123 ianzeng123
2
Follow
319
Followers

 Pitchfork Breakout Strategy  Pitchfork Breakout Strategy

🔱 What is the Pitchfork Strategy? Precise as Poseidon’s Trident!

Did you know? This strategy works like the ancient Greek sea god Poseidon’s trident - a powerful trading weapon built from three key points! 📈 It identifies three important market turning points (pivot points) and draws a “trident-shaped” channel to help you capture golden breakout opportunities.

Imagine setting up a simple tent at the beach with three sticks 🏕️ - one main support pole and two others forming the tent boundaries. When the wind (price) breaks through the tent boundaries, that’s our signal to act!

📊 Core Strategy Logic: Three Points Define Everything

Key Point! The essence of this strategy lies in: - 🎯 Smart Pivot Detection: Automatically finds market highs and lows, ensuring they alternate (no consecutive highs or lows) - 📐 Pitchfork Construction: Uses three points to draw median line, upper line, and lower line, forming a price channel - 💥 Breakout Signals: Go long when price breaks above upper line, go short when it breaks below lower line - 🛡️ Risk Control: Stop loss at median line, take profit at 1:1 ratio

It’s like observing crowd flow at a busy subway station 🚇, watching three key nodes to predict which direction the crowd will surge!

🎪 Entry Timing: Catching the Breakout Moment

Pitfall Guide: Not every breakout is worth chasing!

Long Conditions: - Price breaks above pitchfork upper line ⬆️ - Overall trend is upward (positive median line slope) - Like joining a fast-moving bubble tea queue when it suddenly accelerates!

Short Conditions: - Price breaks below pitchfork lower line ⬇️ - Overall trend is downward (negative median line slope) - Like following the crowd toward exits when a concert ends

💰 Risk Management: Only Risk 1% Per Trade

The most thoughtful aspect of this strategy is its built-in scientific money management! 🧮

  • Risk Control: Only risk 1% of account capital per trade
  • Stop Loss Placement: Set at pitchfork median line, giving price room to breathe
  • Profit Target: 1:1 risk-reward ratio, steady without being greedy
  • Position Sizing: Automatically adjusts trade size based on stop distance

It’s like riding a roller coaster at an amusement park 🎢 - you must fasten your safety belt (stop loss), but still leave room for excitement!

🌟 Strategy Advantages: Why Is It So Popular?

  1. High Objectivity: Purely based on price action, unaffected by emotions
  2. Great Adaptability: Works on any timeframe, from minutes to weekly charts
  3. Controllable Risk: Built-in money management prevents major losses from single mistakes
  4. Simple Operation: Clear signals that even beginners can quickly master

Remember, trading is like learning to ride a bicycle 🚴‍♀️ - you might fall at first, but once you find balance, you can ride freely! This pitchfork strategy serves as your “training wheels,” helping you maintain balance while navigating the markets.

Strategy source code
/*backtest
start: 2024-10-29 00:00:00
end: 2025-10-27 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Pitchfork Trading Friends", 
     overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100) // We will calculate size manually

// === 1. INPUTS ===
leftBars  = input.int(10, "Pivot Left Bars", minval=1)
rightBars = input.int(10, "Pivot Right Bars", minval=1)
riskPercent = input.float(1.0, "Risk Per Trade %", minval=0.1, step=0.1)

// === 2. PIVOT DETECTION & STORAGE ===
// Find pivot points
float ph = ta.pivothigh(high, leftBars, rightBars)
float pl = ta.pivotlow(low, leftBars, rightBars)

// Store the last 3 pivots (P1, P2, P3)
var float p1_price = na
var int   p1_bar   = na
var float p2_price = na
var int   p2_bar   = na
var float p3_price = na
var int   p3_bar   = na
var int   lastPivotType = 0 // 0=none, 1=high, -1=low

// Update pivots when a new one is found, ensuring they alternate
if not na(ph) and lastPivotType != 1
    p1_price := p2_price
    p1_bar   := p2_bar
    p2_price := p3_price
    p2_bar   := p3_bar
    p3_price := ph
    p3_bar   := bar_index[rightBars]
    lastPivotType := 1

if not na(pl) and lastPivotType != -1
    p1_price := p2_price
    p1_bar   := p2_bar
    p2_price := p3_price
    p2_bar   := p3_bar
    p3_price := pl
    p3_bar   := bar_index[rightBars]
    lastPivotType := -1

// === 3. PITCHFORK CALCULATION & DRAWING ===
// We need 3 valid points to draw
bool has3Pivots = not na(p1_bar) and not na(p2_bar) and not na(p3_bar)

// Declare lines
var line medianLine = na
var line upperLine = na
var line lowerLine = na

// Declare line prices for strategy logic
var float ml_price = na
var float ul_price = na
var float ll_price = na

if (has3Pivots)
    // P1, P2, P3 coordinates
    p1_y = p1_price
    p1_x = p1_bar
    p2_y = p2_price
    p2_x = p2_bar
    p3_y = p3_price
    p3_x = p3_bar

    // Calculate midpoint of P2-P3
    mid_y = (p2_y + p3_y) / 2.0
    mid_x = (p2_x + p3_x) / 2.0
    
    // Calculate Median Line (ML) slope
    float ml_slope = (mid_y - p1_y) / (mid_x - p1_x)
    
    // Calculate price on current bar for each line
    // y = m*(x - x_n) + y_n
    ml_price := ml_slope * (bar_index - p1_x) + p1_y
    
    // Identify which pivot is high (P2 or P3)
    float highPivot_y = p2_y > p3_y ? p2_y : p3_y
    int   highPivot_x = p2_y > p3_y ? p2_x : p3_x
    float lowPivot_y  = p2_y < p3_y ? p2_y : p3_y
    int   lowPivot_x  = p2_y < p3_y ? p2_x : p3_x

    // Upper/Lower line prices
    ul_price := ml_slope * (bar_index - highPivot_x) + highPivot_y
    ll_price := ml_slope * (bar_index - lowPivot_x) + lowPivot_y

    // === 4. STRATEGY LOGIC ===
    
    // Define trend by pitchfork slope
    bool trendUp = ml_slope > 0
    bool trendDown = ml_slope < 0
    
    // Entry Conditions
    bool longEntry  = ta.crossover(close, ul_price)  // Breakout
    bool shortEntry = ta.crossunder(close, ll_price) // Breakdown
    
    // Risk Calculation
    float capital = strategy.equity
    float riskAmount = (capital * riskPercent) / 100
    
    // --- LONG TRADE ---
    if (longEntry and trendUp)
        float sl_price = ml_price // SL at median line
        float stop_loss_pips = close - sl_price
        float tp_price = close + stop_loss_pips // 1:1 TP
        
        // Calculate position size
        float positionSize = riskAmount / (stop_loss_pips * syminfo.pointvalue)
        
        if (positionSize > 0)
            strategy.entry("Long", strategy.long, qty=positionSize)
            strategy.exit("SL/TP Long", from_entry="Long", stop=sl_price, limit=tp_price)
            
    // --- SHORT TRADE ---
    if (shortEntry and trendDown)
        float sl_price = ml_price // SL at median line
        float stop_loss_pips = sl_price - close
        float tp_price = close - stop_loss_pips // 1:1 TP
        
        // Calculate position size
        float positionSize = riskAmount / (stop_loss_pips * syminfo.pointvalue)
        
        if (positionSize > 0)
            strategy.entry("Short", strategy.short, qty=positionSize)
            strategy.exit("SL/TP Short", from_entry="Short", stop=sl_price, limit=tp_price)