TRADEINDEX
TRADEINDEX(N) gibt den Bar-Index zurück, an dem ein vergangener Trade in ProBacktest und ProOrder ausgeführt wurde, sodass Strategien die Bars seit dem N-ten jüngsten Einstieg zählen können.
Syntax
TRADEINDEX(N)Parameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
N | Ganzzahl | 1 | Trade-Nummer, rückwärts in der Zeit gezählt. 1 ist der jüngste Trade, 2 der davor und so weiter. |
So funktioniert es
Jede ausgeführte Order wird zusammen mit dem Index des Bars festgehalten, auf dem sie ausgeführt wurde. TRADEINDEX(N) sucht diesen Index für den N-letzten Trade. Der Wert ist ein absoluter Bar-Index, dieselbe Nummerierung, die BARINDEX für den aktuellen Bar verwendet, nicht eine Zählung vergangener Bars.
Die Frage nach der verstrichenen Zeit wird daher durch eine Subtraktion beantwortet: BARINDEX - TRADEINDEX(1) ist die Anzahl der Bars seit der letzten Ausführung. Das treibt zeitbasiertes Trade-Management, etwa das Schließen einer stehengebliebenen Position nach einer festen Anzahl Bars, eine Abkühlphase zwischen Einstiegen oder das Pyramidisieren erst, wenn die vorherige Ausführung gealtert ist.
Mit DEFPARAM CumulateOrders = true, zählt jeder Teileinstieg als eigener Trade, also TRADEINDEX(1) bezieht sich auf die letzte Aufstockung, nicht auf den ursprünglichen Einstieg der aufgebauten Position. TRADEPRICE(N) folgt derselben Nummerierung und gibt den Ausführungskurs anstelle des Bar-Index zurück; die beiden werden häufig zusammen verwendet.
Beispiele
Beispiel 1, Zeit-Stop nach fünf Bars im Trade (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
ENDIFUnabhängig von der Richtung der Position wird sie geschlossen, sobald seit der jüngsten Ausführung fünf Bars verstrichen sind. Dies ist das Referenzbeispiel für den Befehl.
Beispiel 2, Pyramidisieren begrenzt durch Bar-Anzahl und Preisfortschritt (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.5Zusätzliche Kontrakte werden nur gekauft, wenn die letzte Ausführung mindestens fünf Bars alt ist und der Kurs zehn Punkte darüber hinaus gestiegen ist, ein Standardfilter für das Pyramidisieren, der kombiniert TRADEINDEX mit TRADEPRICE.
Beispiel 3, Abkühlphase zwischen aufeinanderfolgenden Einstiegen (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
ENDIFNach jeder Ausführung verweigert die Strategie 20 Bars lang neue Einstiege, was schnelles Hin und Her beim Wiedereinstieg in unruhigen Marktphasen verhindert.
Häufige Fehler und Stolperfallen
- Index, nicht Alter.
TRADEINDEX(1)gibt einen Bar-Index zurück, nicht die Anzahl der Bars seit dem Trade. Ein direkter Vergleich mit einer kleinen Konstante ist sinnlos, ziehen Sie ihn immer ab vonBARINDEX. - Umgekehrte Nummerierung. N zählt rückwärts, 1 ist der jüngste Trade. Die Annahme, 1 bedeute den ersten Trade der Sitzung, kehrt die Logik unbemerkt um.
- Noch keine Trades. Auf den ersten Bars eines Backtests, vor jeder Ausführung, ist der Wert nicht aussagekräftig. Sichern Sie zeitbasierte Bedingungen ab mit
onmarketoder ein Flag, das nach dem ersten Einstieg umschaltet. - CumulateOrders ändert die Bedeutung. Bei akkumulierten Positionen ist jede Teilausführung ein Trade, daher
TRADEINDEX(1)verfolgt die letzte Aufstockung und nicht den ursprünglichen Einstieg der Position. Verwenden Sie eine gespeicherte Variable beim ersten Einstieg, wenn die ursprüngliche Bar relevant ist.
Verwandte Befehle
BarIndex, Index des aktuellen Bars, die Referenz für die Berechnung verstrichener Bars.TRADEPRICE, Ausführungspreis des N-ten jüngsten Trades.POSITIONPRICE, durchschnittlicher Kurs der offenen Position.ONMARKET, wahr, solange eine Position offen ist.CumulateOrders, DEFPARAM, das jeden Teileinstieg als Trade zählen lässt.BarsSince, zählt Bars seit eine Bedingung wahr war.COUNTOFPOSITION, Größe der aktuell offenen Position.LONGONMARKET, wahr, solange eine Long-Position offen ist.