Bli medlem idag
ProBacktest/probacktest · proorder

STRATEGYPROFIT

STRATEGYPROFIT returnerar den kumulativa vinsten eller förlusten, i pengar, för varje stängd affär i en ProBacktest- eller ProOrder-strategi. Öppna positioner är uteslutna.

Syntax

probuilder
myCurrentProfit = STRATEGYPROFIT

Så fungerar det

Varje gång strategin stänger en affär läggs det realiserade resultatet av den affären till en löpande summa. STRATEGYPROFIT exponerar den summan på varje bar, uttryckt i pengar i stället för i punkter eller procent. Ett värde på 0 på de första barerna betyder helt enkelt att ingen affär har stängts än.

Endast stängda affärer bidrar. En position som fortfarande är öppen, hur långt i vinst den än är, ändrar inte värdet förrän den stängs. För att läsa den orealiserade utvecklingen för den aktuella positionen, använd POSITIONPERF i stället. De två kompletterar varandra: STRATEGYPROFIT beskriver det förflutna, POSITIONPERF beskriver nuet.

Variabeln används ofta för equity-beroende logik, till exempel att stoppa systemet efter en drawdown-tröskel, minska storleken efter en förlustserie, eller låsa en session när ett vinstmål har nåtts. När positioner ackumuleras över flera barer, sätt DEFPARAM CumulateOrders = true så att motorn håller den kombinerade positionen öppen och realiserar vinst på det sätt logiken förväntar sig.

Exempel

Exempel 1, Skala ur när ett vinsttröskelvärde nås (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true  // allow accumulated positions

myCurrentProfit = STRATEGYPROFIT
IF myCurrentProfit > 1000 THEN
  SELL 100 SHARES AT MARKET
ENDIF

När den realiserade vinsten från alla stängda affärer överstiger 1000 valutaenheter säljer strategin 100 aktier till marknadspris. Detta är det kanoniska användningsmönstret från den officiella referensen.

Exempel 2, Equity-stop som stoppar strategin (ProOrder)

probuilder
// Stop the system permanently after 500 units of realized loss
IF STRATEGYPROFIT < -500 THEN
  SELL AT MARKET
  EXITSHORT AT MARKET
  QUIT
ENDIF

Ett skydd för kapitalbevarande. När den realiserade förlusten passerar gränsen stängs varje öppen position och QUIT hindrar strategin från att lägga fler ordrar.

Exempel 3, Plotta den realiserade equity-kurvan (ProBacktest)

probuilder
// Inspect the realized equity curve while backtesting
GRAPH STRATEGYPROFIT AS "Realized PnL"

IF NOT onmarket AND close > average[50](close) THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP LOSS 30
  SET TARGET PROFIT 60
ENDIF

GRAPH ritar den löpande realiserade vinsten under backtest-diagrammet, vilket gör det enkelt att se när strategin tjänade eller gav tillbaka pengar.

Vanliga fel och fallgropar

  • Öppna positioner är osynliga. STRATEGYPROFIT ändras bara när en affär stängs. En strategi som läser den medan en stor position är öppen ser inaktuell information. Kombinera med POSITIONPERF när den aktuella affären spelar roll.
  • Pengar, inte punkter. Värdet anges i kontovalutan, så tröskelvärden som > 1000 betyder 1000 valutaenheter, inte 1000 punkter. Samma tröskel beter sig mycket olika på instrument med olika punktvärden.
  • Backtest- och live-värden skiljer sig. I en live-körning av ProOrder börjar totalen om från noll när strategin startas, den ärver inte backtest-historiken. Equity-baserade regler beter sig därför annorlunda direkt efter driftsättning.
  • GRAPH is backtest only. GRAPH STRATEGYPROFIT fungerar i ProBacktest men ignoreras vid live-exekvering i ProOrder, så diagnostiska plottar försvinner när systemet handlar live.
  • POSITIONPERF, orealiserad utveckling för den position som just nu är öppen.
  • PROFIT, take profit-konfiguration i procent för en position.
  • LOSS, stop loss-konfiguration i procent för en position.
  • CumulateOrders, DEFPARAM som styr om ordrar ackumuleras till en position.
  • GRAPH, plottar ett värde under backtest-diagrammet för granskning.
  • ONMARKET, sant så länge någon position är öppen.
  • TRADEPRICE, entrypriset för den nuvarande positionen.
  • COUNTOFPOSITION, storleken på den position som är öppen just nu.