Denne artikel introducerer en backtesting-pakke til vores Værktøj til arbejdsbord. Workbench lader brugere hurtigt sammenligne eksisterende metrics, anvende formler og udlede nye brugerdefinerede metrics. Vi vil demonstrere, hvordan handelsstrategier kan defineres i Workbench, og hvordan en simulering af sådanne selvdefinerede handelsstrategier på historiske data kan køres.
Introduktion
I sin snævreste definition er en backtest en historisk simulering af, hvordan en investeringsstrategi ville have fungeret, hvis den var blevet kørt over en tidligere periode. En strategi er et sæt regler, der specificerer, hvornår et aktiv skal købes og sælges. En praktisk måde at repræsentere en investeringsstrategi på er i form af en såkaldt handelssignal. Et handelssignal er en funktion af tid med reel værdi, som returnerer værdier i området [0, 1] eller tilsvarende 0-100 %. Handelssignalet dikterer, hvor meget af handelsporteføljen, der skal investeres i det underliggende aktiv for hvert tilfælde af tid. For eksempel er HODL-strategien repræsenteret med et konstant signal på 1; vi besidder 100 % af vores investeringskapital i bitcoin over tid. For avancerede handlende er en kort position af et aktiv repræsenteret af et negativt handelssignal: et signal på -1 er lig med en kort position med en størrelse på 100 % af investeringsporteføljen. Inklusive korte positioner strækker det gyldige interval for handelssignalet sig til [-1, 1].
Det skal dog forstås, at en backtest aldrig vil falde sammen med live-performancen af en handelsstrategi. Den største faldgrube ved backtesting er backtest overfitting. At justere parametrene for en strategi mod den bedste historiske præstation (i stikprøven) vil sandsynligvis reducere strategiens generelle karakter og dermed mindske den fremtidige præstation (uden for stikprøven). Men mange vanskeligheder forbliver, selv når der tages højde for backtest-overfitting (så vidt muligt). Luo et al. tilbyder en oversigt over almindelige backtesting-fejl i deres artikel "Seven Sins of Quantitative Investing" (Luo et al. [2014]). Backtesting er ikke et forskningsværktøj og er uegnet til at udlede handelsstrategier. Det tjener blot som det sidste trin i en forskningsproces for i sidste ende at teste og potentielt ugyldiggøre en investeringshypotese.
Se Backtesting i aktion gennem videoguiden
Backtesting-pakken
Før vi ser på nogle konkrete eksempler, diskuterer vi den generelle oversigt over at definere handelsstrategier og simulere dem i fortiden. Kører en backtest ind Workbench følger altid samme procedure:
- Handelsstrategien skal oversættes til et handelssignal, som tildeler en værdi mellem nul og én til hvert tidspunkt. Lad os forkorte handelssignalet med
f1
. - Ring til den nye Workbench
backtest
fungere:
backtest(m1, f1, since, initial_capital_usd, rel_trading_costs)
Lad os nedbryde, hvad hvert argument står for:
m1
: den prisserie (f.eks. BTC), du ønsker at handle.f1
: handelssignalet fra første trin.since
: et tidsstempel, der angiver startdatoen for din handelssimulering, f.eks."2020-01-01"
initial_capital_usd
: hvor mange penge (USD) du allokerer til din strategi for handel, f.eks.1000
(USD). Over tid flyder ingen yderligere kapital ind eller ud af den simulerede handelsportefølje. Dette er i modsætning til f.eks. en strategi for gennemsnit af dollaromkostninger. I stedet vil handelssimuleringen variere eksponeringen for det handlede aktiv over tid, afhængigt af handelssignalet.rel_trading_costs
: en tilnærmelse af de forventede relative handelsomkostninger, som består af vekselgebyrer og glidning. En værdi på f.eks.0.001
refererer til handelsomkostninger på 0.1 % af volumen af hver handel.
backtest
funktionen genererer en såkaldt Net Asset Value (NAV) kurve. Dette repræsenterer din porteføljes værdi over tid (i USD). Din portefølje består til enhver tid af en blanding af USD og BTC. Handelssignalet bestemmer, hvilken brøkdel af porteføljen der er investeret i BTC, og resten (et minus handelssignal) repræsenterer USD-komponenten i din portefølje. NAV repræsenterer dog altid hele værdien af porteføljen denomineret i USD.
For eksperterne: under motorhjelmen, den backtest
funktion multiplicerer den foregående dags handelssignal med det (daglige) afkast af det underliggende (m1
, fx BTC) for hver dag, mens der tages hensyn til handelsomkostninger på signalændringer. Den resulterende afkastserie aggregeres derefter og justeres for initial investering og startdatoen for simuleringen.
Eksempler
I resten af dette dokument vil vi lede dig gennem et par legetøjseksempler på at definere handelsstrategier og køre de tilsvarende backtests. Vi vil især starte med den mest fundamentale strategi: køb og hold. Derefter ser vi på en standard teknisk indikator, det simple glidende gennemsnit cross-over. Til sidst vil vi dykke ned i et mere interessant eksempel; vi vil teste en handelshypotese baseret på SOPR on-chain-metrikken.
Eksempel 0: HODL
Vi starter med den mest grundlæggende og med rette mest populære handelsstrategi for Bitcoin: hodling. Forestil dig, at du havde et engangsbeløb i kontanter, du ville investere i bitcoin. Den mest ligetil måde er at købe bitcoin og aldrig sælge. Dette vil tjene som udgangspunkt for at sammenligne med andre strategier. I det følgende vil vi anvende denne grundlæggende investeringsstrategi som et første eksempel på at lave en backtest i Workbench.
Vi har forberedt en Forudindstillet arbejdsbænk der udgør HODL-strategiens handelssignal og backtest for dig.
Der har vi defineret handelsstrategien HODL-signal i formel f1
as m1/m1
Hvor m1
er prisen på BTC. Handelssignalet er således konstant et over tid. Når du definerer signalet, behøver du ikke bekymre dig om startdatoen for din simulering; dette kommer i næste trin.
Formula f2
som er mærket som HODL backtest [USD] indeholder opkaldet til backtest-funktionen:
backtest(m1, f1, "2020-01-01", 1000, 0.001)
Parametrene ovenfor definerer din backtest-simulering, som du skal bruge m1
som det underliggende handelsaktiv (BTC) og f1
som handelssignal, startende på "2020-01-01"
med en initial porteføljeværdi på $1000 og handelsomkostninger på 0.1%. Dette afslutter vores første backtest! Nedenfor er et diagram med strategiens resulterende NAV-kurve (mærket som HODL backtest [USD]) og det konstante handelssignal HODL-signal. Du kan aflæse det samlede afkast af din investering ved at sammenligne værdien af NAV-diagrammet på den seneste dato med startdatoen.
For at opsummere: vi har simuleret købet af $1000 af BTC den 1. januar 2020, med efterfølgende diamanthænder, der hoder indtil nu.
Eksempel 1: Enkelt glidende gennemsnits-krydsning
Du er her for at lære om backtesting. Der er således en rimelig chance for, at du ønsker at undersøge handelsstrategier ud over hodling. Strategier, der udgør en systematisk måde at købe og sælge et aktiv på. Lad os komme til det.
The Simple Moving Average (SMA) cross-over er vores første eksempel på en systematisk handelsstrategi. Denne populære trend-følgende indikator består af to SMA'er med forskellige perioder (f.eks. 20 dage og 50 dage). Motivationen er som følger: Når prisen er i en optrend, vil prisens SMA'er også være i alle perioder. Konstruktionsmæssigt er SMA med en kortere periode dog hurtigere til at reagere på en spirende optrend end SMA med en længere periode. Dette bringer os til vores sæt af handelsregler:
- Når den kortere SMA er over den længere SMA, hævder vi, at vi er i en bullish trend, og vi køber og holder bitcoin, dvs. handelssignalet er på en eller 100%.
- Ellers (jo kortere SMA er under den længere SMA), sælg bitcoin og hold kontanter. Det tilsvarende handelssignal er nul.
Rent for illustrationens skyld, lad os hurtigt se på en pseudo-kode i Python-stil for at formalisere disse handelsregler:
# SMA cross-over trading rules:
if sma20 > sma50: signal = 1
else: signal = 0
Hvis du er mere visuel, her er et plot af BTC-prisen (stænger) og de to simple glidende gennemsnit (SMA20 og SMA50). Vores sæt af handelsregler bestemmer farven på prisbjælkerne. Når handelssignalet er ét, er farven grøn; når signalet er nul, er farven rød.
Nu hvor handelsreglerne for SMA cross-over er blevet fastlagt, er vi parate til at teste dem igen! Denne Workbench-forudindstilling udvider det foregående eksempel. Vi vil bruge Workbench if
betinget (se Vejledning til arbejdsbord for detaljer). I overensstemmelse med de tidligere definerede handelsregler definerer vi handelssignalet f3
som:
if(sma(m1, 20), ">", sma(m1, 50), 1, 0)
Nu hvor vi har gjort det tunge løft ved at definere handelssignalet, er det ligetil at udføre en backtest på SMA cross-over handelsstrategien. Dette trin er identisk med at skabe backtesten af hodling-strategien; vi sender kun et andet signal. Lad os definere backtesten (i vores eksempel er det formel f4
) via:
backtest(m1, f3, "2020-01-01", 1000, 0.001)
Dette udsender direkte NAV-kurven for SMA cross-over-handelsstrategien, mærket i Forudindstillet arbejdsbænk as SMA cross-over backtest (blå kurve). Den tidligere indførte HODL backtest er inkluderet i rød farve til sammenligning.
Eksempel 2: en on-chain trading hypotese baseret på SOPR
Den simple glidende gennemsnits-cross-over bruger prisen som den eneste input-metrik. Givet kun denne grundlæggende information, gør den et rimeligt stykke arbejde med at identificere tendenser. Dog giver Bitcoins offentlige hovedbog langt dybere indsigt i investorernes adfærd end prisen alene. Spent Output Profit Ratio (SOPR)beregnes for eksempel ved at dividere den realiserede værdi (i USD) divideret med værdien ved oprettelse (USD) af et brugt output. Eller ganske enkelt: solgt pris / betalt pris. Dens værdi fortæller os, om den gennemsnitlige investor sælger med fortjeneste (SOPR > 1) eller med tab (SOPR < 1). Man kan udlede, at et miljø, hvor den gennemsnitlige investor sælger med fortjeneste, er at foretrække til at holde bitcoin sammenlignet med, når den gennemsnitlige investor sælger med tab. Derfor definerer vi den SOPR-baserede handelshypotese (i Python-stil pseudo-kode til illustration) som:
# SOPR-based trading rules:
if sopr > 1: signal = 1
else: signal = 0
Lad os se på en backtest. Vi har forberedt en Forudindstillet arbejdsbænk til dig med alle ingredienserne. SOPR-signalet er ret støjende; derfor udjævner vi det med et eksponentielt glidende gennemsnit (EMA). Den er indlæst som m2
i forudindstillingen. I analogi med det foregående eksempel adopterer vi if
betingelse for at formalisere SOPR-handelsreglerne i Workbench-syntaks:
if(m2, ">", 1, 1, 0)
Dette er vores handelssignal f3
. Vi ønsker at være lange bitcoin (signal et), når SOPR (m2
) er større end én og ellers nul. For at køre backtesten med det netop definerede SOPR handelssignal, har vi defineret formel f5
i en nøjagtig analogi til de foregående eksempler:
backtest(m1, f3, "2020-01-01", 1000, 0.001)
Dette vil direkte generere NAV-kurven for backtesten, mærket som SOPR backtest [USD] i skemaet nedenfor.
Eksempel 3: kombination af forskellige handelsstrategier
Vi har nu udforsket to handelsstrategier ud over ren hodling: SMA cross-over og en strategi baseret på SOPR on-chain metrikken. Som det sidste eksempel på at lave en backtest ser vi på, hvordan man kan kombinere forskellige handelsstrategikomponenter til én overordnet strategi. Med flere strategier kunne man forestille sig at opdele porteføljen i flere fraktioner og handle dem med forskellige strategier uafhængigt. Alternativt kan man kombinere strategierne baseret på de enkelte handelssignaler på forhånd og derefter handle det kombinerede handelssignal for hele porteføljen. På denne måde kan man spare handler, når de forskellige komponenter modsiger hinanden. Der er ingen begrænsninger for, hvordan man kombinerer forskellige handelssignaler. Den mest ligetil måde er dog at tage et gennemsnit af dem. Lad os prøve det her. I den Eksempel 3 Workbench forudindstilling, har vi defineret SMA cross-over signalet som f2
og SOPR-handelssignalet as f3
; derefter kan vi køre en kombineret backtest med:
backtest(m1, (f2+f3)/2, "2020-01-01", 1000, 0.001)
Bemærk, hvordan vi gennemsnittet de to individuelle handelssignaler som input til denne backtest.
I det følgende plotter vi de to individuelle backtests af SMA cross-over og SOPR, mærket som SMA cross-over backtest [USD] , SOPR backtest [USD], henholdsvis sammen med den kombinerede backtest. Bemærk, hvordan signalbjælkerne Kombineret strategisignal tager nu ikke kun værdierne 0 og 1, men 0.5 i tilfælde, hvor de to strategikomponenters signaler ikke er sammenfaldende.
Hvad er det næste?
Dette dækker det grundlæggende i den nye backtest-funktionalitet i Workbench. Du kan gøre dig bekendt og afprøve dine ideer. Du kan inkludere korte signaler i din strategi, hvis du er en avanceret trader.
Backtesting ender ikke med at skabe en NAV-kurve. NAV giver et overblik over, hvordan en investering ville have fungeret over tid. Men det tager ikke højde for risikoen ved en strategi, og man kan heller ikke direkte aflæse den relative præstation over forskellige perioder. Derfor introducerer vi følgende ledsagersæt af funktioner, som giver dig mulighed for at få en dybere forståelse af din backtests ydeevne og giver dig mulighed for at sammenligne forskellige backtests kvantitativt:
drawdown(m1)
Denne funktion tager et tilbagetestresultat, eller en hvilken som helst tidsserie, som input og returnerer den relative nedtrækning fra det højeste niveau nogensinde for hvert tidspunkt. Dette er analogt med Bitcoin: Prisnedsættelse fra ATH metrisk.mean_return(m1, period)
Det årlige rullende gennemsnitsafkast af en tidsserie over en given periode (i dage).realized_vol(m1, period)
Den annualiserede rullende realiserede volatilitet af en tidsserie over en given periode (i dage). Se også Annualiseret realiseret volatilitet.sharpe_ratio(m1, period)
Det annualiserede rullende Sharpe-forhold er forholdet mellem annualiseret rullende gennemsnitsafkast og annualiseret rullende realiseret volatilitet. Det er en af de mest anvendte metoder til at måle risikojusterede relative afkast.
Bemærk, at alle funktioner i backtest-pakken er beskrevet i Vejledning til arbejdsbord, også. I denne Workbench-forudindstilling, fremviser vi drawdown
, realized_vol
funktioner. Vi sammenligner dybden af nedtrækningerne fra HODL-strategien (eksempel 0) med SOPR-strategien (eksempel 2). Desuden sammenligner vi den årlige realiserede volatilitet for de to strategier. Vi finder, at SOPR-strategien har reduceret udtrækningerne betydeligt sammenlignet med en almindelig HODL-investering, og den realiserede volatilitet er også stærkt reduceret på et-års rullende basis.
Disclaimer: Indholdet af denne artikel og de introducerede backtesting-funktioner er kun til informationsformål, du bør ikke fortolke sådanne oplysninger eller andet materiale som juridisk, skat, investering, finansiel eller anden rådgivning. Tidligere præstationer er fiktive, kun til illustrative formål og ingen indikation af fremtidig præstation.
De introducerede funktioner og funktioner er i en gratis betaversion og kan ændres.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- Platoblokkæde. Web3 Metaverse Intelligence. Viden forstærket. Adgang her.
- Kilde: https://insights.glassnode.com/backtesting-in-workbench/
- :er
- $1000
- 1
- 2014
- 2020
- 7
- a
- Om
- over
- Konto
- Bogføring og administration
- Handling
- Yderligere
- Justeret
- vedtage
- Vedtagelsen
- fremskreden
- rådgivning
- Efter
- AL
- Alle
- alene
- altid
- ,
- annualiseret
- Indløs
- ER
- argument
- artikel
- AS
- aktiv
- At
- gennemsnit
- gennemsnit
- Backtest
- Backtesting
- barer
- baseret
- Baseline
- grundlæggende
- Grundlæggende
- grundlag
- BE
- jf. nedenstående
- BEDSTE
- beta
- Betaversion
- mellem
- Beyond
- Største
- Bitcoin
- Blå
- købte
- Pause
- Bringer
- BTC
- btc pris
- Bullish
- købe
- Køb bitcoin
- Købe
- by
- ringe
- CAN
- kapital
- tilfælde
- Kontanter
- chance
- lave om
- Ændringer
- Chart
- farve
- kombinerer
- kombineret
- kombinerer
- Fælles
- sammenligne
- sammenlignet
- sammenligne
- sammenligning
- komponent
- komponenter
- betingelse
- konstant
- udgøre
- opbygge
- indeholder
- indhold
- kontrast
- Tilsvarende
- Koste
- Omkostninger
- kunne
- Dækker
- Oprettelse af
- skabelse
- skøger
- skik
- dagligt
- data
- Dato
- dag
- Dage
- falde
- dybere
- definerede
- definere
- demonstrere
- Denomineret
- Afhængigt
- dybde
- beskrevet
- detaljer
- bestemmer
- dikterer
- forskellige
- vanskeligheder
- direkte
- diskutere
- Divided
- dokumentet
- Er ikke
- Dollar
- Dont
- ned
- e
- hver
- EMA
- indlejret
- smergel
- Hele
- Miljø
- Lig
- Endog
- eksempel
- eksempler
- udveksling
- eksisterende
- udvider
- forventet
- eksperter
- udforsket
- eksponentiel
- eksponentielt glidende gennemsnit
- Eksponering
- f1
- retfærdig
- bekendt
- Funktionalitet
- Gebyrer
- få
- fiktive
- Endelig
- finansielle
- Finde
- Fornavn
- strømme
- efter
- følger
- Til
- Formula
- fraktion
- Gratis
- fra
- funktion
- funktionalitet
- funktioner
- fundamental
- fremtiden
- Generelt
- generere
- genererer
- få
- given
- Glassnode
- Grøn
- Have
- tunge
- tunge løft
- link.
- Høj
- stærkt
- historisk
- Hödl
- HODLING
- hold
- bedrift
- hætte
- Hvordan
- How To
- Men
- HTTPS
- i
- ideer
- identisk
- identificere
- in
- omfatter
- medtaget
- Herunder
- uafhængigt
- tegn
- Indikator
- individuel
- oplysninger
- Informational
- initial
- indgang
- indsigt
- instans
- i stedet
- interessant
- indføre
- introduceret
- Introducerer
- Introduktion
- Invest
- investeret
- undersøge
- investering
- investeringsportefølje
- Investeringsstrategi
- investor
- IT
- ITS
- januar
- Job
- større
- Efternavn
- seneste
- LÆR
- Ledger
- Politikker
- Lets
- løft
- Sandsynlig
- begrænsninger
- Line (linje)
- leve
- Lang
- længere
- Se
- leder
- off
- M2
- lave
- mange
- materiale
- måling
- blot
- metoder
- metrisk
- Metrics
- måske
- fejl
- blanding
- penge
- mere
- Desuden
- mest
- Mest Populære
- Motivation
- flytning
- glidende gennemsnit
- glidende gennemsnit
- flere
- nav
- negativ
- Ingen
- netto
- indre værdi
- nettoværdi (NAV)
- Ny
- næste
- of
- tilbyde
- Tilbud
- on
- On-Chain
- ONE
- Andet
- Ellers
- skitse
- output
- oversigt
- betalt
- parametre
- særlig
- forbi
- ydeevne
- udfører
- periode
- perioder
- Almindeligt
- plato
- Platon Data Intelligence
- PlatoData
- Punkt
- Populær
- portefølje
- position
- positioner
- mulig
- potentielt
- Praktisk
- foretrækkes
- forberedt
- præsentere
- tidligere
- tidligere
- pris
- behandle
- Produkt
- Profit
- offentlige
- køb
- formål
- kvantitativ
- hurtigere
- hurtigt
- rækkevidde
- forholdet
- RE
- Reagerer
- Læs
- gik op for
- rimelige
- resumé
- Rød
- reducere
- Reduceret
- refererer
- frigive
- forblive
- repræsenteret
- repræsenterer
- repræsenterer
- forskning
- resultere
- resulterer
- afkast
- afkast
- Risiko
- risikojusteret
- Rullende
- regler
- Kør
- kører
- s
- skyld
- samme
- Gem
- sælger
- sælge bitcoin
- Salg
- Sells
- Series
- tjener
- tjener
- sæt
- flere
- Kort
- bør
- udstillingsvindue
- Signal
- signaler
- betydeligt
- Simpelt
- ganske enkelt
- simulation
- siden
- Størrelse
- glidning
- SMA
- SMA'er
- So
- solgt
- nogle
- SOPR
- brugt
- standard
- står
- starte
- Starter
- Tilstand
- Trin
- ligetil
- strategier
- Strategi
- emne
- efterfølgende
- sådan
- suite
- RESUMÉ
- syntaks
- Tag
- tager
- tager
- skat
- Teknisk
- vilkår
- prøve
- at
- Grundlæggende
- deres
- Them
- derfor
- Disse
- Gennem
- tid
- Tidsserier
- gange
- tidsstempel
- til
- sammen
- også
- værktøj
- I alt
- mod
- handle
- handles
- erhvervsdrivende
- Traders
- handler
- Trading
- Trading Strategies
- handelsstrategi
- Trend
- Tendenser
- Ultimativt
- under
- underliggende
- forståelse
- forstået
- optrend
- us
- USD
- brug
- brugere
- værdi
- Værdier
- udgave
- via
- video
- Volatilitet
- bind
- ønskede
- Vej..
- Hvad
- hvorvidt
- som
- mens
- Hele
- bredt
- vilje
- med
- inden for
- ville
- Du
- Din
- dig selv
- youtube
- zephyrnet
- nul