Php Flytting Gjennomsnittet Script


Jeg har et lite problem. Jeg har virtuelt laboratorium, en student skal fullføre en undersøkelse med 5 spørsmål, hver koster 2 poeng. Dårlig valg -2poeng, godt valg 2poeng. Så til slutt, når en student trykker Vis meg resultatene, vil jeg ha det skriptet for å oppdatere mediefelt fra bordbrukere og oppdatere notatfelt fra bordlaboratoriet. Den studenten får flere resultater, men hvis han har fått 4, må gjennomsnittet være 4 uten å vurdere andre resultater. Jeg vedlagt et PHP-skript, det virker ikke, det gjorde ikke beregne gjennomsnittet som jeg vil ha. PS: media betyr gjennomsnittlig, merket betyr resultat eller notat, suma mening sum, nei nei betyr antall notater. Hvis jeg kjører velg hvis (notalt4,4, AVG (nota)) som medie fra laboratoriet hvor studentteodorescuyahoo det viser 4 dvs feil. Jeg har ingen 4 i notatene mine. hva er galt her hvis jeg har en 4, gjennomsnittlig avkastning 4, er bra her. spurte jul 3 11 kl 15:16 stengt som uklart hva du spør av tripleee. andrewsi. HaveNoDisplayName. Himanshu. Alex Des 19 15 på 5:10 Vennligst klargjør ditt spesifikke problem eller legg til flere detaljer for å markere nøyaktig hva du trenger. Som det er skrevet for øyeblikket, er det vanskelig å fortelle nøyaktig hva du spør. Se hvordan å spørre siden for å få hjelp til å klargjøre dette spørsmålet. Hvis dette spørsmålet kan omformuleres for å passe til reglene i brukerstøtten. Vennligst rediger spørsmålet. sitat virker ikke, det gjorde ikke beregne gjennomsnittet jeg vil ha. quot Hva beregner det da Hva er resultatene Er det noen feil ndash user456814 Jul 3 11 kl 15: 25AFL Scripting Host VIKTIG NOTE. Siden innføringen av native looping og flow kontroll uttalelser som if-else og mens i versjon 4.40 har betydningen av skripting blitt sterkt redusert. For øyeblikket kan de fleste oppgavene som krever skripting i tidligere versjoner, håndteres i opprinnelig AFL. Hva er flere AFL-sløyfer 3-6 ganger raskere enn JScriptVBScript. AFL scripting host er et grensesnitt mellom AFL-motor og JScriptVBScript-motorer (aka. Active Scripting-teknologier) som er en del av Internet Tools amp Technologies-plattformen som tilbys av Microsoft. Det lar deg bygge formler som har deler i AFL kode og deler i JScriptVBScript. Krav AmiBroker 3.59 eller høyere Microsoft JScriptVBScript-motorer installert Microsoft JScriptVBScript-motorer kommer med Internet Explorer 4 eller høyere (Windows 98, Millennium, 2000 har den inkludert i operativsystemet). Det anbefales imidlertid å installere den nyeste versjonen av Internet Explorer (5.5) eller laste ned og installere den nyeste versjonen av Windows Scripting Host (5.5) fra Microsoft: JScriptVBScript dokumentasjon finner du på offisiell skriptside på: msdn. microsoftscripting Aktiverer AFL Scripting Host Hvis du vil bruke skript i formlene dine, må du ringe EnableScript () - funksjonen i begynnelsen av formelen. Funksjonen tar en inngangsparameter - motornavn: Fra da av vil du kunne legemliggjøre deler skrevet på skriptspråk i formlene dine. Begynnelsen og slutten av skriptet må merkes med lt og gt-sekvensene, som vist i eksemplet nedenfor: quotnormalquot AFL-setninger kjøper kryss (macd (), 0) selger kryss (0, macd ()) lt. skriptkoden din her. gt quotnormalquot AFL-setninger kjøper ExRem (buy, sell) For tiden er den eneste måten å utveksle informasjonen mellom quotnormalquot AFL del og script-delen, å bruke variabler. AFL-scripting-vert avslører ett objekt (forhåndsdefinert, ingen creationinitialization nødvendig) kalt AFL. AFL-objektet har en (standard) parametrisert egenskap som heter Var (varnavn) som kan brukes til å få tilgang til AFL-variabler fra skriptsiden: Siden Var er standardegenskap kan du utelate navnet og skrive bare AFL (varnavn) som vist i eksemplet under: I AFL er det tre datatyper mulig: array (med flytende punktnumre), et tall (flytpunkt) og en streng. VBScript - og JScript-motorer bruker variantdatatype som kan inneholde hvilken som helst type variabelen, inkludert tre som brukes av AFL. Som i AFL, erklærer du ikke variabler i skriptspråk, typen bestemmes av den første oppdraget. I tilfelle av VBScript kan du få AFL-variabler av en hvilken som helst type støttet med syntaks vist ovenfor. Men i JScript, på grunn av den grunnleggende forskjellen i håndteringsarrayer i JScript (arrayelementer i JScript implementeres som dynamiske egenskaper til et arrayobjekt), må du bruke følgende kode for å få verdien av AFL array i JScript array: The GetArray ( ) - funksjonen som er vist ovenfor, gjør det enkelt å konvertere automatiserings-type sikker array til JScript-array. Dette eksemplet viser også hvordan du definerer og bruker funksjoner i JScript. Tilordne AFL-variabler fra script-side-arrays, er mye enklere. Avsl scripting host oppdager JScript-arrayer og kan få innholdet direkte. Alle andre datatyper håndteres det samme i JScript og VBScript. Iterering gjennom arrays En av de mest grunnleggende oppgavene som alle vil trolig gjøre er å lure gjennom array. I VBScript kan dette gjøres ved å bruke For..To..Next-setningen, i JScript ved bruk av () - etningen. Begge disse konstruksjonene må vite array størrelse eller antall elementer i gruppen. I VBScript skal du bruke UBound (arrary) - funksjonen for å få den øvre grensen til arrayet, i JScript bruker du bare lengdeegenskapen til arrayet. Følgende eksempler viser dette. (Vær oppmerksom på at i både VBScript og JScript-arrays er nullbasert.) A) Indikatoreksempel - Eksponentielt glidende gjennomsnitt: b) Resultatmål-stopp-eksempel Her kommer eksemplet på formelen som realiserer overskuddsmålet stopp ved den faste 10 prosent fra kjøpesummen. Vær oppmerksom på at kjøpstilstanden er oppfylt når prisen når en ny høy, så det skjer flere ganger etter opprinnelig kjøp. Derfor ValueWhen (buy, close) kan ikke gi deg opprinnelig kjøpskurs, og den slags handelsregel kunne ikke implementeres i AFL selv. Men med skripting er det ikke noe problem. Ytterligere informasjon Flere skriptprøver er tilgjengelig på AFLs online bibliotek på: amibrokerlibrarylist. php Hvis du har spørsmål, kommentarer og forslag, vennligst kontakt meg på: supportamibroker. Vær oppmerksom på at AFL-skripting er ganske avansert emne, og du bør spille litt med AFL først før du går for dypt inn i scripting. Im prøver å hente den siste EMA av et stort datasett (15000 verdier). Det er en veldig ressurs-sulten algoritme siden hver verdi avhenger av den forrige. Her er koden min: Hva jeg allerede gjorde: Isoler k så det ikke beregnes 10000 ganger Bare hold den siste beregnede EMAen, og ikke hold dem alle i en array bruk for () i stedet for foreach () data array har ikke nøkler det er en grunnleggende matrise Dette tillot meg å redusere kjøretid fra 2000m til 500md for 15000 verdier. Hva virket ikke: Bruk SplFixedArray (), dette barberte bare 10ms som utfører 1.000.000 verdier. Bruk PHPTrader-utvidelsen. Dette returnerer en matrise som inneholder alle EMAene i stedet for bare det siste, og dens langsommere Skriver og kjører den samme algoritmen i C og kjører den over 2.000.000 verdier tar bare 13ms. Så åpenbart, å bruke et kompilert språk på lavere nivå ser ut til å hjelpe P Hvor skal jeg gå herfra Koden vil til slutt kjøre på Ubuntu, så hvilket språk skal jeg velge Vil PHP kunne ringe og sende et så stort argument til skriptet som ble spurt 11. juli kl 19:21 Klart å implementere med en utvidelse gir deg en betydelig økning. I tillegg kan kalkulatoren forbedres som seg selv, og den gevinst du kan legge til i hvilket språk du velger. Det er lett å se at lastEMA kan beregnes som følger: Dette kan skrives på nytt for å ta ut av sløyfen så mye som mulig: For å forklare utvinningen av k tror det i den tidligere formuleringen er som om alle originale rådata blir multiplisert med k så praktisk at du i stedet kan multiplisere sluttresultatet. Legg merke til at det er omskrivet på denne måten at du har 2 operasjoner inne i sløyfen i stedet for 3 (for å være nøyaktig inne i sløyfen er det også en økning i sammenligning med sizeata og lastEMA verdi tildeling) slik at du kan forvente å oppnå en ekstra fart i området mellom 16 og 33. Videre er det andre forbedringer som i hvert fall kan vurderes under noen omstendigheter: Overvei bare siste verdier De første verdiene multipliseres flere ganger med k1m 1 - k, slik at deres bidrag kan være lite eller til og med gå under presisjonen for flytpunktet (eller den akseptable feilen). Denne ideen er spesielt nyttig hvis du kan anta at eldre data er av samme størrelsesorden som den nyere fordi hvis du bare anser de siste n-verdiene, er feilen du gjør er feil EMAofdiscardeddata (1-k) n. Så hvis størrelsesorden er stort sett den samme, kan vi fortelle at den relative feilen som er gjort, er gjenopprettet sistEMA EMAofdiscardeddata (1-k) n sistEMA som er nesten lik bare (1-k) n. Under antagelsen at lastEMA nesten lik EMAofdiscardeddata: La oss si at du kan godta en relativ feilreferanse, du kan trygt vurdere bare de siste n-verdiene der (1 - k) n lt relerr. Midler som du kan forhåndsberegne (før løkken) n log (relerr) logg (1-k) og beregne alle bare med tanke på de siste n-verdiene. Hvis datasettet er veldig stort, kan dette gi en fornuftig hastighet. Tenk på at for 64 bit flytende punktnumre har du en relativ presisjon (relatert til mantissaen) som er 2-53 (omtrent 1.1e-16 og bare 2-24 5.96e-8 for 32 bit flytende punktnumre) slik at du ikke kan få bedre enn denne relative feilen så i utgangspunktet burde du aldri ha en fordel ved å beregne mer enn n logg (1.1e-16) logg (1-k) verdier. å gi et eksempel hvis rekkevidde 2000 da n logg (1.1e-16) logg (1-22001) 36746. Jeg synes det er interessant å vite at ekstra beregninger ville gå tapt inne i avrundingene det er ubrukelig er bedre å ikke gjøre. nå et eksempel på tilfellet der du kan godta en relativ feil større enn flytpunkts presisjon relerr 1ppm 1e-6 0.00001 6 signifikante desimaltall du har n logg (1.1e-16) logg (1-22001) 13815 Jeg tror det er ganske en lite tall i forhold til de siste eksemplene dine, så i så fall kan speedupen være tydelig (Im antar at omfanget 2000 er meningsfullt eller høyt for søknaden din, men jeg vet ikke). bare andre få tall fordi jeg ikke vet hva som er typiske figurer: relerr 1e-3 rekkevidde 2000 n 6907 relerr 1e-3 rekkevidde 200 n 691 relerr 1e-3 rekkevidde 20 n 69 relerr 1e-6 rekkevidde 2000 n 13815 relerr 1e - 6 rekkevidde 200 n 1381 relerr 1e-6 rekkevidde 20 n 138 Hvis antagelsen sistEMA nesten lik EMAofdiscardeddata ikke kan tas, er ting mindre enkle, men siden fordelen kameraet er betydelig, kan det være meningsfylt å fortsette: vi må vurdere om full formel: relerr EMAofdiscardeddata (1-k) n sistEMA så n logg (relerr lastEMA EMAofdiscardeddata) logg (1-k) (logg (relerr) logg (lastEMA EMAofdiscardeddata)) logg (1-k) sentralpunktet er å beregne lastEMA EMAofdiscardeddata (uten faktisk beregning av sisteEMA eller EMAofdiscardeddata selvfølgelig) et tilfelle er når vi vet a-priori at for eksempel EMAofdiscardeddata lastEMA lt M (for eksempel M 1000 eller M 1e6) i så fall n lt (log (relerrM)) logg - K) Hvis du ikke kan gi noe M-nummer, må du finne et godt ID ea for å overskatte EMAofdiscardeddata lastEMA En rask måte kan være å ta M max (data) min (data) Parallellisering Beregningen kan skrives om på nytt i et skjema hvor det er et enkelt tillegg til uavhengige vilkår: Så hvis implementeringsspråket støtter parallellisering datasettet kan deles i 4 (eller 8 eller n. i utgangspunktet antall CPU-kjerner tilgjengelig) biter og det kan beregnes summen av termer på hver bit i parallell oppsummering av de enkelte resultatene på slutten. Jeg går ikke i detalj med dette siden dette svaret allerede er veldig lenge, og jeg tror at konseptet allerede er uttrykt. Takk for at denne I39m bruker dette på aksjemarkedsdata, så det faktum at de eldre dataene er i samme størrelsesorden som de nyere data, avhenger av hvilken tidsramme som brukes. Anta et utvalg på 200, det vil bli en mye større variasjon i prisene på en daglig tidsramme (200 dager) enn 5 minutters tidsramme (16 timer). Jeg vil eksperimentere med forskjellige scenarier på ekte og simulerte data. På nye data, med en rekkevidde lt 200, bruker jeg et 1000-datasett. Men jeg har også gjort noen tilbaketesting de siste årene, så jeg må fortsatt laste hele datasettet. Du hjalp for begge situasjoner, takk ndash Lykegenes Jul 16 14 kl 15:11 Bygg din egen forlengelse forbedrer ytelsen definitivt. Heres en god opplæring fra Zend nettsiden. Noen ytelsesfigurer: Maskinvare: Ubuntu 14.04, PHP 5.5.9, 1-kjerne Intel CPU3.3Ghz, 128MB RAM (det er en VPS). Før (kun PHP, 16.000 verdier). 500ms C forlengelse, 16.000 verdier. 0,3ms C forlengelse (100.000 verdier). 3,7 ms C forlengelse (500 000 verdier). 28.0ms Men Im minne begrenset på dette punktet, med 70MB. Jeg vil fikse det og oppdatere tallene tilsvarende.

Comments