Bli medlem idag
Instruktioner/probuilder · probacktest · proorder · proscreener

Random

Random i ProBuilder genererar ett slumpmässigt heltal mellan två inklusiva gränser. Användbart för testdata, simuleringar och slumpmässiga värden i ProRealTime™-kod.

Syntax

probuilder
value = Random(limit1, limit2)

Parametrar

NamnTypStandardBeskrivning
limit1heltalobligatoriskDen ena gränsen för intervallet, inklusive.
limit2heltalobligatoriskDen andra gränsen för intervallet, inklusive.

Så fungerar det

Random drar ett heltal ur intervallet som definieras av dess två gränser, båda gränserna inkluderade. Argumentens ordning spelar ingen roll, Random(-100, 1000) och Random(1000, -100) beskriver samma intervall, funktionen avgör vilken gräns som är den nedre.

Varje utvärdering ger en ny dragning. Eftersom ett ProBuilder-skript körs en gång per bar ger ett Random-anrop i huvudkroppen ett annat värde på varje bar, och att anropa det två gånger på samma bar ger två oberoende värden. Det finns ingen seed-kontroll, så resultaten är inte reproducerbara mellan körningar, två backtest över identisk data kan ge olika sekvenser.

Funktionen returnerar endast heltal. För att simulera en dragning med decimaler, generera ett större heltalsintervall och dividera, till exempel Random(0, 1000) / 1000 approximerar ett likformigt värde mellan 0 och 1.

Random har inget prediktivt innehåll. Dess praktiska användningar är att generera syntetiska serier under utveckling av visningskod, att lägga till jitter i testdata, och att bygga slumpmässiga jämförelsebaser som ett regelbaserat system kan rimlighetskontrolleras mot i ett backtest.

Exempel

Exempel 1, Generera ett slumpmässigt heltal (Indikator)

probuilder
// Draw a new integer between -100 and 1000 on each bar
a = Random(-100, 1000)
RETURN a

Varje bar ritar en ny dragning ur det inklusiva intervallet, vilket ger en brusserie som är användbar för att testa visnings- och skalningslogik.

Exempel 2, Slumpmässig entry som jämförelsebas (ProBacktest)

probuilder
// Coin-flip entries with fixed exits, used as a neutral baseline
// against which a real entry rule can be compared
IF NOT onmarket THEN
  coin = Random(0, 1)
  IF coin = 1 THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 1
SET TARGET %PROFIT 1

Random ger en 50/50-entrysignal. Att jämföra en strategi mot den här basen visar hur mycket av resultatet som kommer från entrylogiken snarare än exitinställningarna.

Exempel 3, Simulerad random walk-serie (Indikator)

probuilder
// Build a cumulative random walk for testing chart code
ONCE walk = 0
walk = walk + Random(-10, 10)
RETURN walk AS "random walk"

Varje bar lägger ett slumpmässigt steg mellan -10 och 10 till den löpande summan, vilket ger en syntetisk prisliknande serie utan att verklig data laddas.

Vanliga fel och fallgropar

  • Endast heltal. Random returnerar aldrig decimaler. Random(0, 1) ger bara 0 eller 1, inte värden däremellan. Dividera en bredare heltalsdragning för att approximera decimalintervall.
  • Nytt värde vid varje utvärdering. Två anrop på samma bar returnerar oberoende dragningar. Lagra resultatet i en variabel när samma dragning måste återanvändas inom en bar.
  • Ingen reproducerbarhet. Det finns ingen seed-parameter, så backtest som innehåller Random är inte repeterbara. Identisk kod och data kan ge olika equity-kurvor vid varje körning.
  • Omräkning förändrar historiken. När en indikator räknas om ritar tidigare barer nya värden, så en Random-baserad kurva ritar om sin egen historik och kan inte behandlas som en stabil serie.
  • ROUND, avrundar ett decimalvärde till närmaste heltal.
  • FLOOR, avrundar ett värde nedåt till närmaste heltal.
  • CEIL, avrundar ett värde uppåt till närmaste heltal.
  • ABS, absolutvärdet av ett tal.
  • MAX, det större av två värden, användbart för att begränsa dragningar.
  • MIN, det mindre av två värden, användbart för att begränsa dragningar.
  • MOD, resten vid heltalsdivision.
  • SGN, tecknet på ett värde som -1, 0 eller 1.