TRADEINDEX
TRADEINDEX(N) returnerar barindexet där en tidigare affär utfördes i ProBacktest och ProOrder, vilket låter strategier räkna barer sedan det N:te senaste entryt.
Syntax
TRADEINDEX(N)Parametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
N | heltal | 1 | Affärsnummer räknat bakåt i tiden. 1 är den senaste affären, 2 den närmast föregående, och så vidare. |
Så fungerar det
Varje utförd order registreras tillsammans med indexet för den bar den fylldes på. TRADEINDEX(N) hämtar det indexet för den N:te senaste affären. Värdet är ett absolut barindex, samma numrering som BARINDEX använder för den aktuella baren, inte ett antal förflutna barer.
Frågan om förfluten tid besvaras därför med en subtraktion: BARINDEX - TRADEINDEX(1) är antalet barer sedan den senaste exekveringen. Det driver tidsbaserad hantering av affärer, till exempel att gå ur en position som står stilla efter ett fast antal barer, att kräva en vilotid mellan entryer, eller att tillåta pyramidering först när det föregående avslutet har åldrats.
Med DEFPARAM CumulateOrders = true, varje delentry räknas som en egen affär, så TRADEINDEX(1) syftar på det senaste tillskottet, inte det ursprungliga entryt i den ackumulerade positionen. TRADEPRICE(N) följer samma numrering och returnerar exekveringspriset i stället för barindexet, och de två används ofta tillsammans.
Exempel
Exempel 1, Tidsstopp efter fem barer i affären (ProOrder)
// Close everything once 5 bars have passed since the last execution
IF onmarket AND BARINDEX - TRADEINDEX(1) >= 5 THEN
SELL AT MARKET
EXITSHORT AT MARKET
ENDIFOavsett vilken riktning positionen har stängs den när fem barer har förflutit sedan den senaste fyllningen. Detta är referensexemplet för instruktionen.
Exempel 2, Pyramidering styrd av barantal och prisutveckling (ProBacktest)
DEFPARAM CumulateOrders = true
myMACD = MACD[12,26,9](close)
long = myMACD crosses over 0
exit = myMACD crosses under 0
// Initial entry
IF NOT LongOnMarket AND long THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
IF LongOnMarket AND exit THEN
SELL AT MARKET
ENDIF
// Add only if 5 bars have passed and price is 10 points beyond the last fill
IF BARINDEX - TRADEINDEX(1) > 5 AND Close - TRADEPRICE(1) > 10 AND LongOnMarket THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
// One trailing stop protects the whole accumulated position
SET STOP %TRAILING 1.5Ytterligare kontrakt köps bara när det senaste avslutet är minst fem barer gammalt och priset har avancerat tio punkter bortom det, ett standardfilter för pyramidering som kombinerar TRADEINDEX med TRADEPRICE.
Exempel 3, Cooldown mellan på varandra följande entries (ProOrder)
// No new trade within 20 bars of the previous execution
signal = close crosses over average[20](close)
coolingDown = BARINDEX - TRADEINDEX(1) < 20
IF NOT onmarket AND signal AND NOT coolingDown THEN
BUY 1 CONTRACT AT MARKET
SET STOP LOSS 25
ENDIFEfter varje utförande vägrar strategin nya entries under 20 barer, vilket förhindrar snabb omsättning av återinträden i hackiga marknadsförhållanden.
Vanliga fel och fallgropar
- Index, inte ålder.
TRADEINDEX(1)returnerar ett barindex, inte antalet barer sedan affären. Att jämföra det direkt med en liten konstant är meningslöst, subtrahera det alltid frånBARINDEX. - Omvänd numrering. N räknar bakåt, 1 är den senaste affären. Att anta att 1 betyder sessionens första affär inverterar logiken tyst.
- Inga affärer än. På de första barerna i en backtest, innan någon exekvering skett, är värdet inte meningsfullt. Skydda tidsbaserade villkor med
onmarketeller en flagga som slår om efter första entryt. - CumulateOrders ändrar innebörden. Med ackumulerade positioner är varje delavslut en affär, så
TRADEINDEX(1)följer det senaste påslaget snarare än positionens ursprungliga entry. Använd en sparad variabel vid första entry om den ursprungliga baren har betydelse.
Relaterade instruktioner
BarIndex, index för den aktuella baren, referensen för beräkningar av förflutna barer.TRADEPRICE, utförandepris för den N:te senaste affären.POSITIONPRICE, genomsnittspriset för den öppna positionen.ONMARKET, sant så länge någon position är öppen.CumulateOrders, DEFPARAM som gör att varje delentry räknas som en affär.BarsSince, räknar barer sedan ett villkor var sant.COUNTOFPOSITION, storleken på den position som är öppen just nu.LONGONMARKET, sant så länge en long-position är öppen.