Beregningsverktøy Analogt har DataFrame en metode for å beregne parvise kovarianer blant seriene i DataFrame, også unntatt NAnull-verdier. Forutsatt at manglende data mangler tilfeldig, resulterer dette i et estimat for kovariansmatrisen som er objektiv. For mange anvendelser kan dette estimatet imidlertid ikke være akseptabelt fordi den estimerte kovariansmatrisen ikke er garantert å være positiv semi-bestemt. Dette kan føre til estimerte korrelasjoner med absolutte verdier som er større enn en, og eller en ikke-inverterbar kovariansmatrise. Se Estimering av kovariansmatriser for flere detaljer. DataFrame. cov støtter også et valgfritt søkeord for minperioder som angir ønsket minimum antall observasjoner for hvert kolonnepar for å få et gyldig resultat. Vektene som brukes i vinduet er spesifisert av wintype søkeordet. Listen over anerkjente typer er: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (trenger beta) gaussian (needs std) generalgaussian (trenger kraft, bredde) slepian (trenger bredde). Merk at bokservinduet er lik gjennomsnittet (). For noen vindufunksjoner må ytterligere parametere angis: For. sum () med en wintype. Det er ingen normalisering gjort til vekter for vinduet. Ved å sende tilpassede vekter på 1, 1, 1 vil det gi et annet resultat enn passerende vekter på 2, 2, 2. for eksempel. Når du passerer en wintype i stedet for å spesifisere tyngden, er vektene allerede normalisert slik at den største vekten er 1. I motsetning er naturen av. mean () beregningen slik at vektene normaliseres i forhold til hverandre. Vekter på 1, 1, 1 og 2, 2, 2 gir det samme resultatet. Time-aware Rolling Ny i versjon 0.19.0. Ny i versjon 0.19.0 er muligheten til å overføre en forskyvning (eller konvertibel) til en. rolling () - metode og få den til å produsere variabelstørrelsesvinduer basert på passet tidsvindu. For hvert tidspunktspunkt inkluderer dette alle tidligere verdier som forekommer innen det angitte tidspunktet delta. Dette kan være spesielt nyttig for en ikke-vanlig tidsfrekvensindeks. Dette er en vanlig frekvensindeks. Ved å bruke et heltallsparameter virker parameteren å rulle langs vinduets frekvens. Angi en forskyvning gir en mer intuitiv spesifikasjon av rullfrekvensen. Ved å bruke en ikke-vanlig, men likevel monotonisk indeks, gir det ikke noen spesiell beregning å rulle med et heltallvindu. Ved bruk av tidsspesifikasjonen genereres variabelvinduer for denne sparsomme data. Videre tillater vi nå en valgfri parameter for å spesifisere en kolonne (i stedet for standardindeksen) i en DataFrame. Time-aware Rolling vs Resampling Using. rolling () med en tidsbasert indeks er ganske lik resampling. De opererer og utfører reduktiv operasjon på tidindekserte pandasobjekter. Når du bruker. rolling () med en forskyvning. Forskjellen er et tids-delta. Ta et bakover-i-tid-ser vindu, og aggregat alle verdiene i vinduet (inkludert sluttpunktet, men ikke startpunktet). Dette er den nye verdien på det tidspunktet i resultatet. Dette er vinduer med variabel størrelse i tidsrom for hvert punkt på inngangen. Du får samme resultat som inngangen. Når du bruker. resample () med en forskyvning. Konstruer en ny indeks som er frekvensen av forskyvningen. For hver frekvensfylle peker aggregatet fra inngangen i et bakover-i-tid-ser vindu som faller i boksen. Resultatet av denne aggregeringen er utgangen for det aktuelle frekvenspunktet. Vinduene er fast størrelse i frekvensområdet. Resultatet ditt vil ha formen på en vanlig frekvens mellom min og maksimum for det opprinnelige inngangsobjektet. Å oppsummere. rullende () er en tidsbasert vindusoperasjon, mens. resample () er en frekvensbasert vindusoperasjon. Sentering av Windows Som standard er etikettene satt til høyre kant av vinduet, men et senter søkeord er tilgjengelig slik at etikettene kan settes i sentrum. Binære vindufunksjoner cov () og corr () kan beregne flyttbar vinduestatistikk om to serier eller en kombinasjon av DataFrameSeries eller DataFrameDataFrame. Her er oppførselen i hvert tilfelle: to serier. beregne statistikken for paringen. DataFrameSeries. beregne statistikken for hver kolonne i DataFrame med den bestått serien, og returnerer dermed en DataFrame. DataFrameDataFrame. beregner som standard statistikken for å tilpasse kolonnenavn, og returnerer en DataFrame. Hvis søkeordet argumentet pairwiseTrue er bestått beregner du statistikken for hvert par kolonner, og returnerer et panel hvis elementer er de aktuelle datoene (se neste avsnitt). Computing rolling parvis covariances og korrelasjoner I økonomisk data analyse og andre felt it8217s vanlig å beregne kovarians og korrelasjon matriser for en samling av tidsserier. Ofte er man også interessert i flyttevindukovarians og korrelasjonsmatriser. Dette kan gjøres ved å passere argumentet for parvis søkeord, som i tilfelle av DataFrame-innganger vil gi et panel hvis gjenstander er datoene i spørsmålet. I tilfelle av et enkelt DataFrame-argument kan det parvisvise argumentet utelates: Manglende verdier ignoreres, og hver oppføring beregnes ved hjelp av de parvis fullstendige observasjonene. Vennligst se kovarianseksjonen for advarsler knyttet til denne metoden for beregning av kovarians - og korrelasjonsmatriser. Bortsett fra ikke å ha en vindusparameter, har disse funksjonene de samme grensesnittene som deres. rolling-kolleger. Som ovenfor er parametrene de alle aksepterer: minperiodene. terskel for ikke-null datapunkter å kreve. Standard er nødvendig for å beregne statistikk. Ingen NaNs vil bli sendt ut når minperioder ikke-null datapunkter er blitt sett. senter. boolsk, om du vil sette etikettene i midten (standard er False) Utgangene til. rolling og. expanding-metodene returnerer ikke en NaN hvis det er minst minverdier ikke-nullverdier i det nåværende vinduet. Dette er forskjellig fra cumsum. cumprod. cummax. og cummin. som returnerer NaN i utgangen hvor et NaN oppstår i inngangen. En ekspanderende vinduestatistikk vil være mer stabil (og mindre responsiv) enn den rullende vinduesmodellen, da den økende vindustørrelsen reduserer den relative effekten av et individuelt datapunkt. Eksempel: Her er gjennomsnittlig () - utgangen for den tidligere tidsseriensdatasettet: Eksponentielt vektet Windows Et tilhørende sett av funksjoner er eksponentielt vektede versjoner av flere av ovennevnte statistikker. Et lignende grensesnitt for. rolling og. expanding er tilgjengelig gjennom. ewm-metoden for å motta et EWM-objekt. En rekke ekspanderende EW-metoder (eksponentielt vektet) er gitt: Utgivelsesmerknader 8. september 2016 Forbedringer Legger til forutfylte kontrollpunkttabeller for brennkjernelaster. Dette gjør det mulig for lasteren å videresende dataene på en effektiv måte ved å capping den nedre datoen den må søke etter når du spørrer data. Kontrollpunktene skal ha nye deltasaker (1276). Oppdatert VagrantFile for å inkludere alle dev krav og bruk et nyere bilde (1310). Tillat korrelasjoner og regresjoner å beregnes mellom to 2D-faktorer ved å gjøre beregninger asset-wise (1307). Filtre har blitt gjort windowsafe som standard. Nå kan de sendes inn som argumenter til andre filtre, faktorer og klassifiserere (1338). Lagt til en valgfri groupby parameter til rangering (). topp(). og bunn (). (1349). Lagt til nye rørfiltre, Alle og Alle. som tar et annet filter og returnerer True hvis et aktiv produserte en True for noen dager i de forrige vindulengdene (1358). Lagt til nytt pipelinefilter AtLeastN. som tar et annet filter og en int N og returnerer True hvis en eiendel produserte en True på N eller flere dager i de foregående vindulengdedager (1367). Bruk eksternt bibliotek empirisk for risikobalkninger. Empirisk sammenstiller risikometriske beregninger mellom pyfolio og ziplin. Empirisk legger til tilpassede annualiseringsalternativer for retur av tilpassede frekvenser. (855) Legg til Aroon faktor. (1258) Legg til rask stokastisk oscillatorfaktor. (1255) Legg til en Dockerfil. (1254) Ny handelskalender som støtter sesjoner som spenner over midnatt, f. eks. 24 timer 6:01 til 6:00 PM sesjoner for futures trading. zipline. utils. tradingcalendar er nå utdatert. (1138) (1312) Tillat å skli en enkelt kolonne ut av en FactorFilterClassifier. (1267) Gi Ichimoku Cloud-faktor (1263) Tillat standardparametere på Pipeline-vilkår. (1263) Gi hastighet på endringsprosentfaktor. (1324) Tilveiebringe lineær vektet glidende gjennomsnittlig faktor. (1325) Legg til NotNullFilter. (1345) Tillat at kapitalendringer defineres av en målverdi. (1337) Legg til TrueRange-faktor. (1348) Legg til punkt i tid oppslag til assets. db. (1361) Gjør cantrade oppmerksom på asset8217s utveksling. (1346) Legg til downsample metode for alle beregbare vilkår. (1394) Legg til QuantopianUSFuturesCalendar. (1414) Aktiver publisering av gamle assets. db versjoner. (1430) Aktiver tidsplan for Futures trading kalender. (1442) Tillat regresjoner av lengde 1. (1466) Eksperimentell Legg til støtte for comingled Future og Equity History windows, og aktivere annen Fremtidig datatilgang via dataportalen. (1435) (1432) Feilfeilendringer GjennomsnittligDollarVolume innebygd faktor for å behandle manglende lukkede eller volumverdier som 0. Tidligere ble NaNs enkelt kassert før gjennomsnittet, og ga de gjenværende verdiene for mye vekt (1309). Fjern risikofri rente ved beregning av skarphet. Forholdet er nå gjennomsnittet av risikojustert avkastning over brudd på justert avkastning. (853) Sortino-forholdet vil returnere beregning i stedet for np. nan når nødvendig retur er lik null. Forholdet returnerer nå gjennomsnittet av risikojustert avkastning over nedsiderisiko. Fast mislabeled API ved å konvertere mar til downsiderisk. (747) Nedadrettingsrisiko returnerer nå kvadratroten av gjennomsnittet av nedre forskjellskvadratene. (747) Informasjonsforhold oppdatert til å returnere gjennomsnitt av risikojustert avkastning over standardavviket av risikojustert avkastning. (1322) Alfa - og sharpe-forhold er nå årlig. (1322) Fix enheter under lesing og skriving av daglig bar firsttradingday attributt. (1245) Valgfrie forsendelsesmoduler, når de mangler, forårsaker ikke lenger et NameError. (1246) Behandle tidsplanfunksjon argument som en tidsregel når en tidsregel, men ingen dataarkel leveres. (1221) Beskytt mot grenseforhold ved begynnelse og slutt handelsdag i tidsplanfunksjon. (1226) Bruk justeringer til forrige dag når du bruker historie med en frekvens på 1d. (1256) Mislykkes raskt på ugyldige rørledningskolonner, i stedet for å prøve å få tilgang til den ikke-eksisterende kolonnen. (1280) Fix AverageDollarVolume NaN håndtering. (1309) Ytelsesforbedringer til flammekjernelaster. (1227) Tillat samtidige blazeforespørsler. (1323) Forhindre manglende ledende bcolz-minuttdata fra å gjøre gjentatte unødvendige oppslag. (1451) Cache fremtidige kjedeoppslag. (1455) Vedlikehold og refactorings Fjernet gjenværende nevner av addhistory. (1287) Dokumentasjon Legg til testfixtur som kilder daglig prisinformasjon fra minuttinformasjon for prisinformasjon. (1243) Dataformatendringer BcolzDailyBarReader og BcolzDailyBarWriter bruker trading calendar instance, i stedet for trading dager serialisert til JSON. (1330) Endre formatet for assets. db for å støtte tidssøk. (1361) Endre BcolzMinuteBarReaderand BcolzMinuteBarWriter for å støtte varierende tikkestørrelser. (1428) Release 1.0.1 Dette er en mindre bugfix-frigivelse fra 1.0.0 og inneholder et lite antall feilrettinger og dokumentasjonsforbedringer. Forbedringer Lagt til støtte for brukerdefinerte kommisjonsmodeller. Se zipline. financemissionmissionModel-klassen for mer informasjon om implementering av en kommisjonsmodell. (1213) Lagt til støtte for ikke-flytende kolonner til Blaze-backed Pipeline datasett (1201). Lagt til zipline. pipeline. slice. Slice. en ny pipeline term designet for å trekke ut en enkelt kolonne fra en annen term. Skiver kan opprettes ved å indeksere inn i et begrep, tastet av aktiva. (1267) Feilrettelser Fikset en feil der rørledningslastere ikke var riktig initialisert av zipline. runalgorithm (). Dette har også påvirket invokasjoner av zipline-løp fra CLI. Fixed en feil som forårsaket zipline IPython celle magi å mislykkes (533233fae43c7ff74abfb0044f046978817cb4e4). Løst en feil i PerTrade-kommisjonsmodellen der provisjonene ble feilaktig brukt på hver delfylling av en ordre i stedet for på bestillingen selv, noe som resulterte i at algoritmer ble belastet for mye i provisjonene ved bestilling av store bestillinger. PerTrade bruker nå provisjoner på riktig måte (1213). Attributttilgang på CustomFactors som definerer flere utganger, returnerer nå en utgangsskive riktig når utdataene også er navnet på en faktormetode (1214). Erstatt utdatert bruk av pandas. io. data med pandasdatareader (1218). Løst et problem hvor. pyi stubfiler for zipline. api ble utelatt utelukkende fra PyPI-kildefordelingen. Conda-brukere bør være upåvirket (1230). Dokumentasjon Lagt til et nytt eksempel, zipline. examples. momentumpipeline. som utøver Pipeline API (1230). Høydepunkter Zipline 1.0 Rewrite (1105) Vi har omskrevet mye zipline og dets grunnleggende konsepter for å forbedre runtime ytelsen. Samtidig introduserte we8217ve flere nye APIer. På et høyt nivå, hentet tidligere versjoner av Zipline-simuleringer fra en multiplekset strøm av datakilder, som ble fusjonert via heapq. Denne strømmen ble matet til hovedsimuleringssløyfen og kjører klokken fremover. Denne sterke avhengigheten av å lese alle dataene gjorde det vanskelig å optimalisere simuleringsytelsen fordi det ikke var noen sammenheng mellom mengden data vi hentet og mengden data faktisk brukt av algoritmen. Nå henter vi bare data når algoritmen trenger det. En ny klasse, DataPortal. sender dataforespørsler til ulike datakilder og returnerer de forespurte verdiene. Dette gjør kjøretiden til en simuleringsskala mye tettere med kompleksiteten til algoritmen, i stedet for med antall ressurser som tilbys av datakildene. I stedet for datastrømmen som kjører klokken, gjenkjennes simuleringer nå gjennom et forhåndsberegnet sett med dag eller minutt tidsstempler. Tidsstemplene sendes ut av MinuteSimulationClock og DailySimulationClock. og forbrukes av hovedløkken i transform (). We8217ve pensjonerte datasidene (N) og historie-APIene, erstattet dem med flere metoder på BarData-objektet: nåværende (). historie(). cantrade (). og isstale (). Gamle APIer vil fortsette å fungere for nå, men vil utgjøre deprecasjonsvarsler. Du kan nå passere i en justeringskilde til DataPortal. og vi vil tilpasse prisinformasjonen når vi ser bakover på data. Priser og volumer for utførelse og presentert til algoritmen i data. current er eiendelenes as-omsatte verdi. Nye inngangspunkter (1173 og 1178) For å gjøre det enklere å bruke zipline har vi oppdatert inngangspunkter for en backtest. De tre støttede måtene å kjøre en backtest er nå: zipline. runalgo () zipline run zipline (IPython magic) Data Bundles (1173 og 1178) 1.0.0 introduserer databanker. Databasene er datagrupper som skal forhåndslastes og brukes til å kjøre backtests senere. Dette tillater at brukere ikke trenger å spesifisere hvilke tickers de er interessert i hver gang de kjører en algoritme. Dette tillater oss også å cache dataene mellom løpene. Som standard vil quantopian-quandl-bunken brukes som trekker data fra Quantopian8217s speil av Quandl WIKI datasettet. Nye bunter kan registreres med zipline. data. bundles. register () som: Denne funksjonen skal hente dataene den trenger, og bruk deretter forfatterne som har blitt sendt for å skrive dataene til disken på et sted som zipline kan finne senere. Disse dataene kan brukes i backtests ved å sende navnet som b-bundle argument til zipline run eller som bunt argument til zipline. runalgorithm (). For mer informasjon, se Data Bundles for mer informasjon. String Support in Pipeline (1174) Lagt til støtte for strengdata i Pipeline. zipline. pipeline. data. Column aksepterer nå objekt som en dtype, noe som betyr at lastere for den kolonnen skal sende ut vinduet iteratorer over den eksperimentelle nye LabelArray-klassen. Flere nye klassifiseringsmetoder har også blitt lagt til for å bygge Filter-forekomster basert på strengoperasjoner. De nye metodene er: elementof er definert for alle klassifiseringer. De gjenværende metodene er bare definert for streng-dtype klassifiserere. Forbedringer Gjøre dataladingsklassene har mer konsistente grensesnitt. Dette inkluderer egenkapitalboksforfattere, justeringsforfatter og db-forfatter for aktiva. Det nye grensesnittet er at ressursen som skal skrives til, er bestått på byggetiden, og dataene som skal skrives, leveres senere til skrivemetoden som dataframmer eller noen iterator av dataframmer. Denne modellen lar oss passere disse forfatterobjektene rundt som en ressurs for andre klasser og funksjoner for å konsumere (1109 og 1149). Lagt til maskeringen til zipline. pipeline. CustomFactor. Tilpassede faktorer kan nå bestås et filter ved instansiering. Dette forteller faktoren å bare beregne over aksjer som filteret returnerer True, i stedet for å alltid beregne over hele universet av aksjer. (1095) Lagt til zipline. utils. cache. ExpiringCache. Et cache som bryter inn oppføringer i en zipline. utils. cache. CachedObject. som styrer utløp av oppføringer basert på dt som leveres til get-metoden. (1130) Implementert zipline. pipeline. factors. RecarrayField. en ny pipeline term designet for å være output type av en CustomFactor med flere utganger. (1119) Lagt til ekstra utgangsparameter til zipline. pipeline. CustomFactor. Tilpassede faktorer er nå i stand til å beregne og returnere flere utganger, hver av dem er selv en faktor. (1119) Lagt til støtte for string-dtype pipeline kolonner. Lastere for disse kolonnene skal produsere forekomster av zipline. lib. labelarray. LabelArray når de krysses. siste () på strengkolonner produserer en streng-dtype zipline. pipeline. Classifier. (1174) Lagt til flere metoder for å konvertere Classifiers til Filters. De nye metodene er: - elementof () - startswith () - endswith () - hassubstring () - matches () elementof er definert for alle klassifikatorer. De gjenværende metodene er bare definert for strenger. (1174) Fetcher har blitt flyttet fra Quantopian intern kode til Zipline (1105). Eksperimentelle egenskaper Eksperimentelle funksjoner kan endres. Lagt til en ny zipline. lib. labelarray. LabelArray klasse for å effektivt representere og beregne på strengdata med numpy. Denne klassen er konseptuelt lik pandas. Categorical. ved at den representerer strengarrayer som arrayer av indekser i en (mindre) rekke unike strengverdier. (1174) Bug Fixes Highlights Lagt til et nytt EarningsCalendar datasett for bruk i Pipeline API. (905). AssetFinder speedups (830 og 817). Forbedret støtte for ikke-flytende dyptyper i rørledningen. Mest spesielt, vi støtter nå datetime64 og int64 dtypes for Factor. og BoundColumn. latest returnerer nå et riktig filterobjekt når kolonnen er av dtype bool. Zipline støtter nå numpy 1,10, pandas 0,17 og scipy 0,16 (969). Batchtransformasjoner har blitt utdatert og vil bli fjernet i en fremtidig utgave. Bruk av historie anbefales som et alternativ. Forbedringer Legger til en måte for brukerne å gi en kontekstbehandling til å bruke når de planlagte funksjonene utføres (inkludert håndledddata). Denne kontekstbehandleren vil bli bestått BarData-objektet for linjen og vil bli brukt i løpet av alle funksjonene som er planlagt å kjøre. Dette kan sendes til TradingAlgorithm ved søkeordet argument createeventcontext (828). Lagt til støtte for zipline. pipeline. factors. Factor forekomster med datetime64ns dtypes. (905) Lagt til et nytt EarningsCalendar datasett for bruk i Pipeline API. Dette datasettet gir et abstrakt grensesnitt for å legge inn inntjeningsmeldingsdata til en ny algoritme. En pandasbasert referanseimplementering for dette datasettet finnes i zipline. pipeline. loaders. earnings. og en eksperimentell blaze-basert implementering finnes i zipline. pipeline. loaders. blaze. earnings. (905). Lagt til nye innebygde faktorer, zipline. pipeline. factors. BusinessDaysUntilNextEarnings og zipline. pipeline. factors. BusinessDaysSincePreviousEarnings. Disse faktorene bruker det nye EarningsCalendar datasettet. (905). Lagt til isnan (). notnan () og isfinite () metoder til zipline. pipeline. factors. Factor (861). Lagt til zipline. pipeline. factors. Returns. en innebygd faktor som beregner prosentendringen i nær pris over den angitte vindulengden. (884). Lagt til en ny innebygd faktor: AverageDollarVolume. (927). Lagt til ExponentialWeightedMovingAverage og ExponentialWeightedMovingStdDev faktorer. (910). Tillat datasettklasser å være underklasse der underklasser arver alle kolonnene fra foreldrene. Disse kolonnene blir nye meldinger, slik at du kan registrere dem som egendefinert laster (924). Lagt til coerce () for å tvinge innganger fra en type til en annen før de overfører dem til funksjonen (948). Lagt til valgfritt () for å pakke inn andre preprosessorfunksjoner for å eksplisitt tillate None (947). Lagt til ensuretimezone () for å tillate at strengargumenter blir konvertert til datetime. tzinfo-objekter. Dette tillater også at tzinfo-objekter kan sendes direkte (947). Lagt til to valgfrie argumenter, dataquerytime og dataquerytz til BlazeLoader og BlazeEarningsCalendarLoader. Disse argumentene tillater brukeren å spesifisere noe cutoff-tid for data ved lasting fra ressursen. For eksempel, hvis jeg vil simulere å utføre min beforetradingstart-funksjon kl 8:45 USEastern så kunne jeg passere datetime. time (8, 45) og USEastern til lasteren. Dette betyr at data som er tidsstemplet på eller etter klokka 8:45, ikke blir sett på den dagen i simuleringen. Dataene vil bli gjort tilgjengelig neste dag (947). BoundColumn. latest returnerer nå et filter for kolonner av dtype bool (962). Lagt til støtte for Factor-forekomster med int64 dtype. Kolonne krever nå en missingvalue når dtype er integrert. (962) Det er også nå mulig å angi tilpassede manglende verdier for flyt. dato tid. og bool Pipeline vilkår. (962) Lagt til automatisk lukkestøtte for aksjer. Eventuelle stillinger i en egenkapital som når sin egenerklæring vil bli likvidert for kontanter i henhold til egenkapital8217s siste salgspris. Videre vil eventuelle åpne ordrer for egenkapitalen bli kansellert. Både futures og aksjer er nå automatisk stengt om morgenen på deres autokjøp. umiddelbart før beforetradingstart. (982) Eksperimentelle egenskaper Eksperimentelle funksjoner kan endres. Lagt til støtte for parameteriserte faktor-underklasser. Faktorer kan angi parametre som et klassenivåattributt som inneholder en tuple av parameternavn. Disse verdiene er da akseptert av konstruktøren og videresendt ved navn til faktor8217s beregningsfunksjon. Denne API-en er eksperimentell, og kan endres i fremtidige utgivelser. Feilrettelser Fikser et problem som vil føre til at den daglige metoden caches for å endre len til et SIDData-objekt. Dette ville få oss til å tro at objektet ikke var tomt selv når det var (826). Løser en feil hevet ved beregning av beta når referansedataene var sparsomme. I stedet blir numpy. nan returnert (859). Fikset en problemstilling () (872). Faste uregelmessige advarsler ved første nedlasting av egne data (: utgave 922). Korrigert feilmeldingene for setcommission () og setlippage () når de brukes utenfor initialiseringsfunksjonen. Disse feilene kalte funksjonene å overstyre i stedet for settet. Dette endret også unntakstypene som ble hentet fra OverrideSlippagePostInit og OverrideCommissionPostInit til SetSlippagePostInit og SetCommissionPostInit (923). Løst et problem i CLI som ville føre til at eiendeler ble lagt til to ganger. Dette ville kartlegge det samme symbolet til to forskjellige sider (942). Løst et problem hvor PerformancePeriod feilaktig rapporterte totalpositionsvalue når du opprettet en konto (950). Faste problemer rundt KeyErrors kommer fra historie og BarData på 32-biters python, hvor Assetene ikke sammenlignet riktig med int64s (959). Løst en feil hvor boolske operatører ikke ble riktig implementert på Filter (991). Installasjon av zipline nedgraderer ikke lenger numpy til 1.9.2 stille og ubetinget (969). Ytelse Fremskynder lookupsymbol () ved å legge til en utvidelse, AssetFinderCachedEquities. som laster aksjer i ordbøker og leder deretter lookupsymbol () til disse ordbøkene for å finne matchende aksjer (830). Forbedret ytelse av lookupsymbol () ved å utføre batchede spørringer. (817). Vedlikehold og refactorings Assetdatabaser inneholder nå versjoninformasjon for å sikre kompatibilitet med den nåværende Zipline-versjonen (815). Oppgrader forespørsler versjon til 2.9.1 (2ee40db) Oppgrader loggbok versjon til 0.12.5 (11465d9). Oppgrader Cython-versjonen til 0.23.4 (5f49fa2). Gjør zipline installasjonskrav mer fleksible (825). Bruk versioneer til å administrere prosjektversjonen og setup. py-versjonen (829). Fast integrering på travisbygging (840). Fast conda build, som nå bruker git kilde som kilde og leser krav ved å bruke setup. py, i stedet for å kopiere dem og la dem gå ut av synkronisering (937). Krev setuptools gt 18.0 (951). Dokumentasjon Dokument utgivelsesprosessen for utviklere (835). Lagt til referansedokumenter for Pipeline API. (864). Lagt til referansedokumenter for API-moduler for Asset Metadata. (864). Generert dokumentasjon inneholder nå koblinger til kildekoden for mange klasser og funksjoner. (864). Lagt til plattformspesifikk dokumentasjon som beskriver hvordan du finner binære avhengigheter. (883). Diverse Lagt til en showgraph () metode for å lage en pipeline som et bilde (836). Legger til subtest () decorator for å lage subtests uten noseparameterized. expand () som oppblåser testutgangen (833). Grenser Timerrapport i testutgang til 15 lengste tester (838). Treasury og benchmark nedlastinger vil nå vente opptil en time for å laste ned igjen hvis data returnert fra en ekstern kilde ikke strekker seg til forventet dato. (841). Lagt til et verktøy for å nedgradere eiendelene db til tidligere versjoner (941). Utgivelse 0.8.3 Høydepunkter Nytt dokumentasjonssystem med et nytt nettsted på zipline. io Større ytelsesforbedringer. Dynamisk historie. Ny brukerdefinert metode: Beforetradingstart. Ny api-funksjon: tidsplanfunksjon (). Ny api-funksjon: getenvironment (). Ny api-funksjon: setmaxleverage (). Ny api-funksjon: setdonotorderlist (). Pipeline API. Støtte for trading futures. Forbedringer Kontoobjekt: Legger til et kontoobjekt i kontekst for å spore informasjon om handelskontoen. Eksempel: Returnerer den oppgjorte kontantverdien som er lagret på kontoobjektet. Denne verdien oppdateres tilsvarende når algoritmen kjøres (396). HistoryContainer kan nå vokse dynamisk. Samtaler til historikk () vil nå kunne øke størrelsen eller endre formen på historikkbeholderen for å kunne betjene samtalen. addhistory () fungerer nå som et preformance-hint for forhåndsallokering av tilstrekkelig plass i beholderen. Denne endringen er bakoverkompatibel med historien. alle eksisterende algoritmer bør fortsette å fungere som påtenkt (412). Enkle transformasjoner ported fra quantopian og bruk historie. SIDData har nå metoder for: Disse metodene, med unntak av retur. godta flere dager. Hvis du kjører med minuttdata, beregner dette antall minutter i disse dager, regnskap for tidlig lukker og gjeldende tid og bruker transformasjonen over settet av minutter. Retur tar ingen parametere og returnerer den daglige avkastningen til den oppgitte eiendelen. Eksempel: Nye felt i ytelsesperiode. Ytelsesperioden har nye felt tilgjengelige i returverdi av todict. - brutto innflytelse - netto innflytelse - kort eksponering - lang eksponering - shorts count - longs count (464). Tillat rekkefølge () å jobbe med ulike markedsverdier (av Jeremiah Lowin). Foreløpig har orderpercent () og ordertarget% () begge operert som en prosentandel av self. portfolio. portfoliovalue. Denne PR lar dem fungere som prosentandeler av andre viktige MV'er. Legger også til context. getmarketvalue (). som gjør denne funksjonaliteten mulig. For eksempel: Kommandolinjealternativ for å skrive ut algo til stdout (av Andrea D8217Amore) (545). Ny brukerdefinert funksjon beforetradingstart. Denne funksjonen kan overstyres av brukeren til å bli kalt en gang før markedet åpner hver dag (389). Ny api funksjon tidsplanfunksjon (). Denne funksjonen lar brukeren planlegge en funksjon som skal kalles basert på mer kompliserte regler om dato og klokkeslett. For eksempel, ring funksjonen 15 minutter før markedet nærmer seg tidlig lukker (411). Ny api-funksjon setdonotorderlist (). Denne funksjonen aksepterer en liste over eiendeler og legger til en handelsvakt som forhindrer algoritmen i å handle dem. Legger til et listepunkt i tidsliste over leverte ETFer som folk kanskje vil markere som 8216 ikke handle8217 (478). Legger til en klasse for å representere verdipapirer. rekkefølge () og andre bestillingsfunksjoner krever nå en forekomst av sikkerhet i stedet for en int eller streng (520). Generaliser sikkerhetsklassen til aktiva. Dette er i preperation for å legge til støtte for andre typer eiendeler (535). Ny api funksjon getenvironment (). Denne funksjonen returnerer standardstrengen zipline som standard. Dette brukes slik at algoritmer kan ha forskjellig oppførsel på Quantopian og lokal zipline (384). Utvider getenvironment () for å avsløre mer av miljøet til algoritmen. Funksjonen aksepterer nå et argument som er feltet som skal returneres. Som standard er dette plattform som returnerer den gamle verdien av zipline, men følgende nye felt kan bli forespurt: arena. Er dette live trading eller backtesting datafrekvens. Er denne minuttmodus eller daglig modus startet. Simulerings startdato. slutt. Simulerings sluttdato. capitalbase. Startkapitalen for simuleringen. plattform. Plattformen som algoritmen kjører på. . En ordbok som inneholder alle disse feltene. Ny api-funksjon setmaxleveraged (). Denne metoden legger til en handelsvakt som forhindrer algoritmen i å overta seg selv (552). Eksperimentelle egenskaper Eksperimentelle funksjoner kan endres. Legger til ny pipeline-API. Rørledningen API er et declarativ API på høyt nivå som representerer etterfølgende vinduberegninger på store datasett (630). Legger til støtte for futures trading (637). Legger til rørlaster for blaze-uttrykk. Dette gjør det mulig for brukerne å trekke data fra et hvilket som helst format, blaze forstår og bruke det i Pipeline API. (775). Feilrettelser Løs en feil der de rapporterte avkastningene kan dyppe kraftig for tilfeldige tidsperioder (378). Løs en feil som forhindret debuggere fra å løse algoritmfilen (431). Videresend argumenter til brukerdefinert initieringsfunksjon (687). Løs en feil som ville føre til at treasury data blir lastet ned hver backtest mellom midnatt EST og tidspunktet da treasury data var tilgjengelig (793). Løs en feil som vil føre til at brukerdefinert analysefunksjon ikke blir kalt hvis den ble sendt som et søkeord-argument til TradingAlgorithm (819). Ytelse Store ytelsesforbedringer til historien (av Dale Jung) (488). Vedlikehold og refactorings Fjern enkel transformasjonskode. Disse er tilgjengelige som metoder for SIDData (550). Høydepunkter Kommandolinjegrensesnitt for å kjøre algoritmer direkte. IPython Magic zipline som kjører algoritmen definert i en IPython notisbokcelle. API-metoder for å bygge beskyttelsesforanstaltninger mot runaway-bestilling og uønskede korte stillinger. Ny historie () - funksjon for å få et Moving DataFrame av tidligere markedsdata (erstatter BatchTransform). En ny begynneropplæring. Forbedringer CLI: Legger til en CLI og IPython magi for zipline. Eksempel: Griper dataene fra yahoo finance, kjører filen dualmovingavg. py (og ser etter dualmovingavganalyze. py som, hvis funnet, vil bli utført etter at algoritmen har blitt kjørt), og gir ut dataFrame til dma. pickle (325) . IPython magic command (øverst på en IPython notisbokcelle). Eksempel: Er det samme som ovenfor unntatt i stedet for å utføre filen, ser etter algoritmen i cellen, og i stedet for å overføre perf df til en fil, oppretter en variabel i navneområdet som heter perf (325). Legger til Trading Controls til algoritmen API. Følgende funksjoner er nå tilgjengelige på TradingAlgorithm og for algo scripts: setmaxordersize (selv, sidNone, maxsharesNone, maxnotionalNone) Sett en grense på absolutt størrelse, i aksjer og eller total dollarverdi, av en enkelt rekkefølge plassert av denne algoritmen for et gitt sid . Hvis sid er None, brukes regelen til hvilken som helst rekkefølge som er plassert av algoritmen. Eksempel: setmaxpositionsize (selv, sidNone, maxsharesNone, maxnotionalNone) - Sett en grense på absolutt størrelse, i enten aksjer eller dollarverdi, av en hvilken som helst posisjon som holdes av algoritmen for et gitt sid. Hvis sid er None, blir regelen anvendt på hvilken som helst posisjon som holdes av algoritmen. Eksempel: setlongonly (self) Sett en regel som angir at algoritmen kanskje ikke har korte stillinger. Eksempel: Legger til en allapimethods klassemetode på TradingAlgorithm som returnerer en liste over alle TradingAlgorithm API-metoder (333). Utvidet rekord () - funksjonalitet for dynamisk navngivning. Funksjonen Record () kan nå ta posisjonsfeil før kvargene. All original bruk og funksjonalitet er det samme, men nå vil disse ekstra bruksområdene fungere: Kravene er ganske enkelt at de poritional args forekommer bare før kvargene (355). historien () er blitt portet fra Quantopian til Zipline og gir flyttende vindu med markedsdata. historien () erstatter BatchTransform. Det er raskere, fungerer for minuttnivådata og har et overlegen grensesnitt. For å bruke det, ring addhistory () innsiden av initialiseringen () og deretter motta en pandas DataFrame ved å ringe historie () fra innsiden av håndledata (). Se opp veiledningen og et eksempel. (345 og 357). Historien () støtter nå 1m vindu lengder (345). Feilrettelser Fiks justering av handelsdager og åpne og lukke i handelsmiljø (331). RollingPanel fikseres når du legger til nye felt (349). Prestasjonsvedlikehold og refactorings Fjernet uokumenterte og uprøvde HDF5- og CSV-datakilder (267). Refactor simparams (352). Refactoring av historien (340). Følgende avhengigheter har blitt oppdatert (zipline kan også fungere med andre versjoner): Høydepunkter Større reparasjoner til risikobalkninger, se Bug Fixes-delen. Funksjonshavn () - funksjonen, se Enhancements-delen Start av støtte for kvantopisk algoritme skript-syntaks, se ENH-seksjonen. support for conda pakkebehandling, se Bygg avdeling. Forbedringer Behandle alltid nye ordrer, dvs. på barer der håndledningsdata ern8217t kalles, men det er 8216clock8217 data, f. eks. en konsekvent referanse, prosessordrer. Tom posisjoner blir nå filtrert fra porteføljebeholderen. For å forhindre at algoritmer opererer på stillinger som ikke er i eksisterende lager av aksjer. Tidligere ville iterating over stillinger returnere stillinger for aksjer som hadde null aksjer holdt. (Hvor en eksplisitt innsjekkingsalgoritmkode for pos. amount 0 kan hindre at du bruker en ikke-eksisterende posisjon.) Legg til handelskalender for BMFampBovespa. Legg til begynnelsen av algo script-støtte. Starter på paritetsbanen med skript syntaksen i Quantopian8217s IDE på quantopian Eksempel: Legg til HDF5 og CSV kilder. Begrens håndledata til tider med markedsdata. For å hindre tilfeller der egendefinerte datatyper hadde ujusterte tidsstempler, kan du bare ringe håndleddsdata når markedsdata går gjennom. Tilpassede data som kommer før markedsdata vil fortsatt oppdatere datafeltet. Men håndteringen av disse dataene vil bare bli gjort når det er mulig markedsdata. Utvidet provisjon PerShare-metode for å tillate en minimumskostnad per handel. Legg til symbol api-funksjon En symbol () oppslagsfunksjon ble lagt til Quantopian. Ved å legge til samme API-funksjon til zipline kan vi gjøre kopieringsprogrammering av en Zipline algo til Quantopian enklere. Legg til simulert tilfeldig handelskilde. Lagt til en ny datakilde som avgir hendelser med bestemt brukerdefinert frekvens (minutt eller daglig). Dette tillater brukere å backtest og feilsøke en algoritme i minuttmodus for å gi en renere vei mot Quantopian. Fjern avhengighet av referanseindeks for handelsdagkalender. I stedet for benchmarks8217 indeksen, er handelskalenderen nå brukt til å fylle miljøet8217s handelsdager. Fjern ekstradate-feltet, siden i motsetning til referanselisten, kan handelskalenderen generere fremtidige datoer, så datoene for dagens dagshandel trenger ikke å bli vedlagt. Motivasjoner: Kilden til den åpne og nært nært lette kalenderen og handelsdagkalenderen er nå den samme som skal bidra til å forhindre potensielle problemer på grunn av feiljustering. Tillater konfigurasjoner der referansen er gitt som en generatorbasert datakilde som trenger å levere en andre referanseliste bare for å fylle ut datoer. Porthistorikk () API-metode fra Quantopian. Åpner kjernen i historien () - funksjonen som tidligere kun var tilgjengelig på Quantopian-plattformen. Historiemetoden er analog med batchtransform-funksjonskondensatoren, men med en forhåpentligvis mer presis spesifikasjon av frekvensen og perioden for de tidligere bardataene som er tatt. Eksempelbruk: N. B. Denne versjonen av historien mangler tilbakestillingskapasiteten som gjør det mulig å returnere en full DataFrame på den første linjen. Feilrettinger Juster referansehendelser for å matche markedstider (241). Tidligere ble referansehendelser utsendt klokken 0:00 den dagen referansen var relatert til: i 8216minute8217 utslippsmodus betydde dette at referansene ble utgitt før noen intradag-handler ble behandlet. Sørg for at perfstatistikk genereres for alle dager. Når du kjører med småutslipp, vil simulatoren rapportere til brukeren at den simulerte 8216n - 18217 dager (hvor n er antall dager angitt i simuleringsparametrene). Nå rapporteres det riktige antall handelsdager som simulert. Fix repr for kumulative risikometri. Repræsentanten for RiskMetricsCumulative refererte til en eldre struktur av klassen, noe som forårsaket et unntak når det ble skrevet ut. Også, skriver nå de siste verdiene i beregningene DataFrame. Prevent minute emission from crashing at end of available data. The next day calculation was causing an error when a minute emission algorithm reached the end of available data. Instead of a generic exception when available data is reached, raise and catch a named exception so that the tradesimulation loop can skip over, since the next market close is not needed at the end. Fix pandas indexing in trading calendar. This could alternatively be filed under Performance. Index using loc instead of the inefficient index-ing of day, then time. Prevent crash in vwap transform due to non-existent member. The WrongDataForTransform was referencing a self. fields member, which did not exist. Add a self. fields member set to price and volume and use it to iterate over during the check. Fix max drawdown calculation. The input into max drawdown was incorrect, causing the bad results. i. e. the compoundedlogreturns were not values representative of the algorithms total return at a given time, though calculatemaxdrawdown was treating the values as if they were. Instead, the algorithmperiodreturns series is now used, which does provide the total return. Fix cost basis calculation. Cost basis calculation now takes direction of txn into account. Closing a long position or covering a short shouldn8217t affect the cost basis. Fix floating point error in order(). Where order amounts that were near an integer could accidentally be floored or ceilinged (depending on being postive or negative) to the wrong integer. f. eks an amount stored internally as -27.99999 was converted to -27 instead of -28. Update perf period state when positions are changed by splits. Otherwise, self. positionamounts will be out of sync with position. amount, etc. Fix misalignment of downside series calc when using exact dates. An oddity that was exposed while working on making the return series passed to the risk module more exact, the series comparison between the returns and mean returns was unbalanced, because the mean returns were not masked down to the downside data points however, in most, if not all cases this was papered over by the call to. valid() which was removed in this change set. Check that self. logger exists before using it. self. logger is initialized as None and there is no guarantee that users have set it, so check that it exists before trying to pass messages to it. Prevent out of sync market closes in performance tracker. In situations where the performance tracker has been reset or patched to handle state juggling with warming up live data, the marketclose member of the performance tracker could end up out of sync with the current algo time as determined by the performance tracker. The symptom was dividends never triggering, because the end of day checks would not match the current time. Fix by having the tradesimulation loop be responsible, in minuteminute mode, for advancing the market close and passing that value to the performance tracker, instead of having the market close advanced by the performance tracker as well. Fix numerous cumulative and period risk calculations. The calculations that are expected to change are: cumulative. beta cumulative. alpha cumulative. information cumulative. sharpe period. sortino How Risk Calculations Are Changing Risk Fixes for Both Period and Cumulative Use sample instead of population for standard deviation. Add a rounding factor, so that if the two values are close for a given dt, that they do not count as a downside value, which would throw off the denominator of the standard deviation of the downside diffs. Standard Deviation Type Across the board the standard deviation has been standardized to using a 8216sample8217 calculation, whereas before cumulative risk was mostly using 8216population8217. Using ddof1 with np. std calculates as if the values are a sample. Cumulative Risk Fixes Use the daily algorithm returns and benchmarks instead of annualized mean returns. Use sample instead of population with standard deviation. The volatility is an input to other calculations so this change affects Sharpe and Information ratio calculations. The benchmark returns input is changed from annualized benchmark returns to the annualized mean returns. The benchmark returns input is changed from annualized benchmark returns to the annualized mean returns. Period Risk Fixes Now uses the downside risk of the daily return vs. the mean algorithm returns for the minimum acceptable return instead of the treasury return. The above required adding the calculation of the mean algorithm returns for period risk. Also, uses algorithmperiodreturns and tresauryperiodreturn as the cumulative Sortino does, instead of using algorithm returns for both inputs into the Sortino calculation. Performance Removed aliasdt transform in favor of property on SIDData. Adding a copy of the Event8217s dt field as datetime via the aliasdt generator, so that the API was forgiving and allowed both datetime and dt on a SIDData object, was creating noticeable overhead, even on an noop algorithms. Instead of incurring the cost of copying the datetime value and assigning it to the Event object on every event that is passed through the system, add a property to SIDData which acts as an alias datetime to dt. Eventually support for datafoo. datetime may be removed, and could be considered deprecated. Remove the drop of 8216null return8217 from cumulative returns. The check of existence of the null return key, and the drop of said return on every single bar was adding unneeded CPU time when an algorithm was run with minute emissions. Instead, add the 0.0 return with an index of the trading day before the start date. The removal of the null return was mainly in place so that the period calculation was not crashing on a non-date index value with the index as a date, the period return can also approximate volatility (even though the that volatility has high noise-to-signal strength because it uses only two values as an input.) Maintenance and Refactorings Allow simparams to provide data frequency for the algorithm. In the case that datafrequency of the algorithm is None, allow the simparams to provide the datafrequency . Also, defer to the algorithms data frequency, if provided. Added support for building and releasing via conda For those who prefer building with conda. pydata. org to compiling locally with pip. The following should install Zipline on many systems. Welcome to Quantopian The Getting Started Tutorial serves as an introduction to writing and backtesting an algorithm on Quantopian. This tutorial covers many of the basics of the Quantopian API, and is designed for those who are new to Quantopian. This tutorial is divided into a series of lessons, with each one focusing on a different part of the API. By the end, we will work up to a simple mean reversion algorithm. The video series also covers the same material. What is a Trading Algorithm On Quantopian, a trading algorithm is a Python program that defines two special functions: initialize() and handledata(). initialize() is called when the program is started, and handledata() is called once per minute during simulation or live-trading in events that well refer to as bars. The job of initialize() is to perform any one-time startup logic. The job of handledata() is to decide what orders, if any, should be placed each minute. The following is an example of an algorithm that allocates 100 of its portfolio in AAPL: To run this example algorithm, create a copy by clicking the Clone button in the upper right hand corner. Run a backtest by clicking Build Algorithm (top left) or Run Full Algorithm (top right). When writing an algorithm on Quantopian, you have access to free minute bar historical pricing and volume data for US equities (covered in this tutorial) as well as free Morningstar fundamentals data. and third-party datasets such as news sentiment, and earnings calendars. Futures data is coming soon but is not yet available. For more information on futures, click here. Continue on to lesson 2 to begin writing your first algorithm. The history() Function The data object has a function history() that allows us to get trailing windows of historical pricing or volume data. data. history() requires 4 arguments: an asset or list of assets, a field or list of fields, an integer lookback window length, and a lookback frequency. Possible fields include price. open. high. low. close. and volume. Possible frequencies are 1d for daily and 1m for minutely. The following example returns a pandas Series containing the price history of AAPL over the last 10 days and uses pandas. Series. mean() to calculate the mean. Note: With 1d frequency, the most recent value in the result from data. history() will include a value for the current date in the simulation, which can sometimes be a value for a partial day. For example, if data. history() is called in the first minute of the day, the last row of the returned DataFrame will represent values from 9:31AM, whereas the previous 9 rows will represent end-of-day values. To get the past 10 complete days of data, we can get an extra day of data, and drop the most recent row. The following example gets the trading volume of SPY from the last 10 complete days: Similar to the other data functions, the return type of data. history() depends on the input types. In the next example, the return type is a pandas DataFrame indexed by date, with assets as columns: And if we pass a list of fields, we get a pandas Panel indexed by field, having date as the major axis, and assets as the minor axis. The following example is clonable and can be backtested in the IDE. It prints the mean trading volume of a list of securities over the last 10 minutes:
No comments:
Post a Comment