One Percent A Week is the weekly strategy presented by Dion Kurczek in the March 2026 issue of Technical Analysis of Stocks & Commodities (“Trading Snapbacks In A Leveraged ETF”). It was designed for TQQQ, the leveraged Nasdaq-100 ETF, and its goal is modest on purpose: buy a small dip during the week and take a 1% gain before the weekend.
The system is fully rule based, holds at most one position per week and closes it before the weekend. This version is written for ProOrder, so it can be backtested in ProBacktest and run automatically.
Although it was designed for TQQQ, personally I like how it behaves on the Micro Gold future (MGC) on a 1 hour chart more. The rules do not depend on any particular market, so I encourage you to test it on other instruments and share your results in the comments.
Leveraged ETFs amplify the daily moves of their index, and short pullbacks inside a rising market tend to be bought quickly. The strategy tries to capture one of those snapbacks per week with five rules:
initCapital to a realistic amount and adjust equityPct as explained in the configuration below.bePct to 0 switches the break-even rule off, which shows how much it contributes to the results.
initCapital (default: 1000): starting capital used to size the positions.equityPct (default: 10): percentage of the equity invested in each trade, at the entry price (rounded down to whole units, minimum 1). The size assumes that one unit is worth its price, as with stocks and ETFs. On a future or a CFD whose contract is worth several times the price, lower equityPct accordingly: on the Micro Gold future (10 USD per point), equityPct = 1 invests about 10% of the equity. With a small capital the minimum of one contract applies.dipPct (default: 1): distance of the limit entry below the Monday open, in %.targetPct (default: 1): profit target above the entry price, in %.bePct (default: 0.5): drawdown below the entry, in %, that moves the exit to break-even. 0 switches the rule off.On stocks and ETFs the system expects an intraday chart with the regular session only: the first candle of the day is taken as the session open. On a future such as MGC the full session works as it is. The weekly exit needs no setting: the system takes the end of the session from the last gap in the data (the overnight close, or the daily break of a future) and, on Friday, sends a market order on the second to last candle, which is executed at the open of the last one.
//---------------------------------------------------------------
// PRC_One Percent A Week
// version = 0
// 05.10.2026
// Iván González @ www.prorealcode.com
// Author: Dion Kurczek
// Sharing ProRealTime knowledge
//--------------------------------------------------------------------//
DEFPARAM CumulateOrders = False
//-----Inputs---------------------------------------------------------//
initCapital = 100000 // starting capital used for position sizing
equityPct = 10 // percent of equity invested in each trade
dipPct = 1 // limit buy this % below Monday's opening price
targetPct = 1 // profit target, % above the entry price
bePct = 0.5 // drawdown (%) that moves the exit to break-even (0 = off)
//--------------------------------------------------------------------//
ONCE wOpen = 0
ONCE pt = 0
ONCE entryOn = 0
ONCE sendPT = 0
ONCE beSent = 0
ONCE exitPx = 0
ONCE prevLong = 0
ONCE sessEndMin = 0
ONCE lastEndMin = 0
ONCE plotWO = close
ONCE plotDip = close
ONCE plotBE = close
ONCE plotPT = close
// bar close time and bar length, in minutes of the day
closeMin = floor(time / 10000) * 60 + (floor(time / 100) MOD 100)
openMin = floor(opentime / 10000) * 60 + (floor(opentime / 100) MOD 100)
barMin = (closeMin - openMin + 1440) MOD 1440
// end of session = close of the last bar before a gap in the data (the overnight
// close, or the daily break of a future). No fixed hour, so it follows daylight
// saving changes, the time zone of the chart and markets whose day ends at midnight
IF barindex > 0 THEN
prevCloseMin = (floor(time[1] / 10000) * 60 + (floor(time[1] / 100) MOD 100)) MOD 1440
IF openMin <> prevCloseMin THEN
lastEndMin = prevCloseMin
IF lastEndMin = 0 THEN
lastEndMin = 1440
ENDIF
ENDIF
ENDIF
// each day uses the last session end seen before it starts
IF intradaybarindex = 0 THEN
sessEndMin = lastEndMin
ENDIF
// 1. Monday: first bar of the week, store its opening price
newSession = 0
IF dayofweek = 1 AND intradaybarindex = 0 THEN
newSession = 1
ENDIF
IF newSession = 1 THEN
wOpen = open
entryOn = 1
pt = 0
ENDIF
// 2. limit buy at a 1% dip from Monday's open (active until it fills)
down1 = wOpen * (1 - dipPct / 100)
// 3. once filled, the 1% target is placed at the first bar of the next day
newFill = 0
IF LONGONMARKET AND prevLong = 0 THEN
newFill = 1
ENDIF
IF newFill = 1 THEN
entryOn = 0
sendPT = 1
beSent = 0
exitPx = 0
ENDIF
IF sendPT = 1 AND intradaybarindex = 0 AND beSent = 0 THEN
IF LONGONMARKET THEN
pt = POSITIONPRICE * (1 + targetPct / 100)
exitPx = pt
ELSE
pt = 0
ENDIF
sendPT = 0
ENDIF
// 4. risk management: exit at break-even after a 0.5% drawdown
bet = 0
IF LONGONMARKET AND bePct > 0 THEN
bet = POSITIONPRICE * (1 - bePct / 100)
IF low < bet AND beSent = 0 THEN
pt = POSITIONPRICE
exitPx = pt
beSent = 1
ENDIF
ENDIF
// 5. hard exit at the end of the week. A market order fills at the open of the
// next bar, so it is sent on Friday's second to last bar
weekExit = 0
IF LONGONMARKET AND dayofweek = 5 AND sessEndMin > 0 AND closeMin >= sessEndMin - barMin THEN
weekExit = 1
ENDIF
// safety net: still long on Monday's first bar (Friday holiday or early close)
IF LONGONMARKET AND newSession = 1 AND prevLong = 1 THEN
weekExit = 1
ENDIF
//-----Orders---------------------------------------------------------//
// pending orders last one bar in ProOrder, so they are sent again on every bar
IF NOT ONMARKET AND entryOn = 1 AND wOpen > 0 THEN
qty = max(1, floor((initCapital + STRATEGYPROFIT) * equityPct / 100 / down1))
BUY qty CONTRACTS AT down1 LIMIT
ENDIF
IF weekExit = 1 THEN
SELL AT MARKET
ELSIF LONGONMARKET AND exitPx > 0 THEN
SELL AT exitPx LIMIT
ENDIF
prevLong = 0
IF LONGONMARKET THEN
prevLong = 1
ENDIF
//-----Plots----------------------------------------------------------//
// a GRAPHONPRICE line set to undefined keeps drawing its last value, so each
// level keeps its last value while hidden and is switched off with alpha 0.
// The first bar of each stretch is hidden too: no segment joins the old value
showWO = 0
IF newSession = 0 AND pt = 0 AND wOpen > 0 THEN
showWO = 1
ENDIF
showBE = 0
IF LONGONMARKET AND bePct > 0 THEN
showBE = 1
ENDIF
showPT = 0
IF LONGONMARKET AND pt > 0 THEN
showPT = 1
ENDIF
IF showWO = 1 THEN
plotWO = wOpen
plotDip = down1
ENDIF
IF showBE = 1 THEN
plotBE = bet
ENDIF
IF showPT = 1 THEN
plotPT = pt
ENDIF
aWO = 0
IF showWO = 1 AND showWO[1] = 1 THEN
aWO = 255
ENDIF
aBE = 0
IF showBE = 1 AND showBE[1] = 1 THEN
aBE = 255
ENDIF
aPT = 0
IF showPT = 1 AND showPT[1] = 1 THEN
aPT = 255
ENDIF
GRAPHONPRICE plotWO COLOURED(230, 180, 0, aWO) AS "Weekly Open"
GRAPHONPRICE plotDip COLOURED(41, 98, 255, aWO) AS "Weekly 1% Dip"
GRAPHONPRICE plotBE COLOURED(255, 0, 0, aBE) AS "0.5% Drawdown"
GRAPHONPRICE plotPT COLOURED(0, 200, 0, aPT) AS "Profit Target"
One Percent A Week is a compact example of a rule based swing system: a reference, a limit entry on weakness, a fixed target, a break-even rule and a time exit. Its simplicity makes it a good starting point to study how a small weekly edge behaves on different instruments and parameters.