Random
Random i ProBuilder genererer et tilfeldig heltall mellom to inklusive grenser. Nyttig for testdata, simuleringer og tilfeldige verdier i ProRealTime™-kode.
Syntaks
value = Random(limit1, limit2)Parametere
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
limit1 | heltall | påkrevd | Én grense for intervallet, inklusive. |
limit2 | heltall | påkrevd | Den andre grensen for intervallet, inklusive. |
Slik fungerer det
Random trekker et heltall fra intervallet som de to grensene definerer, begge grenser inkludert. Rekkefølgen på argumentene har ingen betydning, Random(-100, 1000) og Random(1000, -100) beskriver samme intervall, finner funksjonen ut hvilken grense som er den nedre.
Hver evaluering gir et nytt trekk. Siden et ProBuilder-skript kjører én gang per bar, gir et Random-kall i hoveddelen en ulik verdi på hver bar, og å kalle det to ganger på samme bar gir to uavhengige verdier. Det finnes ingen seed-kontroll, så resultatene er ikke reproduserbare mellom kjøringer, to backtester over identiske data kan gi ulike sekvenser.
Funksjonen returnerer bare heltall. For å simulere et desimaltrekk, generer et større heltallsintervall og divider, for eksempel Random(0, 1000) / 1000 tilnærmer en uniform verdi mellom 0 og 1.
Random har ingen prediktiv verdi. De praktiske bruksområdene er å generere syntetiske serier mens man utvikler visningskode, legge til jitter i testdata, og bygge tilfeldige referansegrunnlag som et regelbasert system kan kontrolleres mot i en backtest.
Eksempler
Eksempel 1, Generere et tilfeldig heltall (Indikator)
// Draw a new integer between -100 and 1000 on each bar
a = Random(-100, 1000)
RETURN aHver bar plotter et nytt trekk fra det inklusive intervallet, og produserer en støyserie som er nyttig for å teste visnings- og skaleringslogikk.
Eksempel 2, Tilfeldig inngang som sammenligningsgrunnlag (ProBacktest)
// 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 1Random gir et 50/50 inngangssignal. Å sammenligne en strategi mot denne referansen viser hvor mye av resultatet som kommer fra inngangslogikken snarere enn fra utgangsinnstillingene.
Eksempel 3, Simulert random walk-serie (Indikator)
// Build a cumulative random walk for testing chart code
ONCE walk = 0
walk = walk + Random(-10, 10)
RETURN walk AS "random walk"Hver bar legger et tilfeldig trinn mellom -10 og 10 til den løpende summen, og produserer en syntetisk prisliknende serie uten å laste inn reelle data.
Vanlige feil og fallgruver
- Bare heltall. Random returnerer aldri desimaler.
Random(0, 1)gir bare 0 eller 1, ikke verdier mellom. Divider et bredere heltallstrekk for å tilnærme desimalområder. - Ny verdi ved hver evaluering. To kall på samme bar returnerer uavhengige trekk. Lagre resultatet i en variabel når det samme trekket må gjenbrukes innenfor en bar.
- Ingen reproduserbarhet. Det finnes ingen seed-parameter, så backtester som inneholder Random er ikke reproduserbare. Identisk kode og data kan gi ulike equity-kurver ved hver kjøring.
- Omberegning endrer historikken. Når en indikator omberegnes, tegner tidligere barer nye verdier, så en Random-basert graf tegner om sin egen historikk og kan ikke behandles som en stabil serie.
Relaterte instruksjoner
ROUND, runder en desimalverdi til nærmeste heltall.FLOOR, runder en verdi ned til nærmeste heltall.CEIL, runder en verdi opp til nærmeste heltall.ABS, absoluttverdien til et tall.MAX, den største av to verdier, nyttig for å begrense trekk.MIN, den minste av to verdier, nyttig for å begrense trekk.MOD, resten av en heltallsdivisjon.SGN, fortegnet til en verdi som -1, 0 eller 1.