0bps

Strategy vault / Breakout

ARGO Range Breakout Strategy

The ARGO Range Breakout Strategy is a 4-hour range trading system inspired by channel breakout principles. It generates trading signals within a 4-hour timeframe to capture significant price movements.

Author
ChaoZhang
Complexity
Intermediate · 81 lines
Parameters
9
Backtest bar
3h · intraday
Tested on
BTC/USDT · futures

Overview

The ARGO Range Breakout Strategy is a 4-hour range trading system inspired by channel breakout principles. It generates trading signals within a 4-hour timeframe to capture significant price movements.

Strategy Logic

The strategy first calculates the highest high (upBound) and lowest low (downBound) over a defined period to form the channel range. It then computes the midline, upper band and lower band of the Bollinger Channel. Buy and sell signals are triggered when the channel direction changes.

Specifically, the strategy computes the upBound and downBound over N periods (default 47). It then sets a ratio point (default 1) and tolerance tol (default 1000), to calculate the upper limit limitBoundUp and lower limit limitBoundDown of the channel. A buy signal is triggered when the price breaks above the lower limit. A sell signal is triggered when the price breaks below the upper limit.

In addition, stop loss and take profit conditions are configured. The stop loss for long trades is set near the lower limit, while that for short trades is near the upper limit. The take profit is based on the input target profit/loss ratio.

Advantage Analysis

  • Utilizes Bollinger Channel principles to adapt to market volatility
  • 4-hour timeframe aims to capture significant price swings
  • Combining breakout strategy helps detect trend reversals
  • Stop loss and take profit controls risk/reward per trade

Risks and Solutions

  • Vulnerable to false breakouts and being trapped
  • Large timeframes may lead to widened losses
  • Improper trailing stop may cause unacceptable losses
  • Solutions:
    • Optimize channel parameters against false breakouts
    • Carefully determine position sizing and stop loss levels
    • Enhance stop loss/take profit for strict risk control

Optimization Directions

  • Optimize channel parameters for better fit to market volatility
  • Dynamically adjust stop loss/take profit for better risk/reward
  • Add trade filters to avoid traps and chasing highs
  • Incorporate additional factors to avoid false signals
  • Combine trend and volatility indicators for better decisions
  • Optimize capital management for different market conditions

Conclusion

The ARGO Range Breakout Strategy is a 4-hour medium-term trading system based on Bollinger Channel and breakout principles. Compared to short-term trading, it focuses more on catching trend reversals on medium-term timeframes. With proper optimization, it can adapt to different market environments and achieve significant profits while controlling risk. The strategy balances trend following and risk management. It is a recommended medium-term breakout trading system.

Parameters

NameDefaultWhat it controls
v_input_1trueRisk
v_input_247Length
v_input_310Previous
v_input_45Stop
v_input_52Tolerance
v_input_65Past
v_input_7falseTarget
v_input_890Stop
v_input_940Trailing

Source Pine Script

/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-06 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

// strategy("ARGO_BAND-STRATEGY", overlay=true,default_qty_value=10000,scale=true,initial_capital=100,currency=currency.USD)

// A 4hours Breakout Strategy work in progres..it's  a starting point, thanks to all tradingview community
//How to use: test it only on gbpjpy 240 min, wait the end of the candle to place next order, red and blue dots are short and long stop orders, Targets are Upper and lowerBands. Test it and enjoy but use at your own risk..
//2016 © F.Peluso


risk=input(title="Risk", defval=1)
length = input(title="Length",  minval=1, maxval=1000, defval=47)
stopBound=input(title="Previous",defval=10)
upBound = highest(high, length)
downBound = lowest(low, length)
point=1
tol=1000
stopT=input(title="Stop", defval=5,minval=1, maxval=5)
dev =input(title="Tolerance",defval=2,minval=1, maxval=5)
limitBoundUp=( highest(high, length))*(point-(dev/tol))
limitBoundDown=downBound/(point-(dev/tol))
plot(limitBoundUp[1],linewidth = 3,style = circles, color = navy,trackprice=true),transp=0
plot(limitBoundDown[1],linewidth = 3,style = circles, color = red,trackprice=true,transp=0)
mezzalinea=((upBound+downBound)/2)

// Color Bands

colo = ((close>limitBoundUp[1]) ? blue : (close<upBound[1]) ? white : na)
UpB = plot(upBound[1], title="Upper Bound", style=linebr, linewidth=1, color=colo)
DownB = plot(limitBoundUp[1] ,title="Lower Bound", style=linebr, linewidth=2, color=colo)
fill(UpB, DownB, color=colo, transp=90)

plot(limitBoundUp[2]/(point+(stopT/tol)),color=colo)

coloS = ((close<limitBoundDown[1]) ? red : (close>downBound[1]) ? white : na)
DB = plot(downBound[1], title="Upper Bound", style=linebr, linewidth=1, color=coloS)
DoB = plot(limitBoundDown[1] ,title="Lower Bound", style=linebr, linewidth=2, color=coloS)
fill(DB, DoB, color=coloS, transp=90)

plot(limitBoundDown[2]*(point+(stopT/tol)),color=coloS)

// Strategy

past=input(title="Past", defval=5)
buy=(crossover(close,limitBoundUp))
closebuy=cross(high[past],upBound[0])
stopbuy = limitBoundUp[2]/(point+(stopT/tol))

sell=crossunder(close,limitBoundDown)
closesell=cross(low[past],downBound[0])


if (not na(close[length]))
    if (buy)
        strategy.entry("ChBrkLE", strategy.long,stop=limitBoundUp - syminfo.mintick,comment="Long I")   

strategy.close("ChBrkLE",when=closebuy)

if (not na(close[length]))
    if (sell)
        strategy.entry("ChBrkSE", strategy.short,stop=limitBoundDown + syminfo.mintick,comment="Short I")   

strategy.close("ChBrkSE",when=closesell)

Target =input(0) * 10 
Stop = input(90) * 10 
Trailing = input(40) * 10
CQ = 100
TPP = (Target > 0) ? Target : na
SLP = (Stop > 0) ? Stop : na
TSP = (Trailing > 0) ? Trailing : na
strategy.exit("Out Short", "ChBrkSE", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP)
strategy.exit("Out Long", "ChBrkLE", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Published by ChaoZhang on the FMZ strategy square · last modified 2023-10-07. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.

Build this with AgenKit

A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.

in Claude Code, Cursor, Codex & 4 more
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/ARGO-Range-Breakout-Strategy.md
  1. npx agenkit install engineering-kit in your project
  2. Paste the command into your agent and approve each phase
  3. Get tests, backtest, risk controls and a paper-trading switch

Understand it first

Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.

Related specs

esc

Try , , or .

↑↓ move↵ open