Jag har ett litet problem. Jag har virtuellt laboratorium, en elev kommer att slutföra en enkät med 5 frågor, varje kostar 2 poäng. Dåligt val -2point, bra val 2punkt. Så i slutändan, när en student trycker på Visa mig resultaten, vill jag ha det skriptet för att uppdatera mediefältet från bordanvändare och uppdatera noteringsfältet från bordslaboratoriet. Den studenten får fler resultat men om han har resultat 4, måste medelvärdet vara 4, utan att ta hänsyn till andra resultat. Jag bifogade ett PHP-skript, det fungerar inte, det beräknade inte genomsnittet som jag vill ha. PS: media betyder medelvärde, not betyder resultat eller not, suma meningsumma, nej nej betyder antal anteckningar. Om jag kör väljer du (notalt4,4, AVG (nota)) som medie från laboratorium där studentteodorescuyahoo visar att 4 är fel. Jag har ingen 4 i mina anteckningar. vad är fel här Om jag har en 4, är den genomsnittliga avkastningen 4, bra här. frågade 3 juli kl 15:16 stängd som oklart vad du frågar av tripleee. andrewsi. HaveNoDisplayName. Himanshu. Alex dec 19 15 at 5:10 Vänligen klargör ditt specifika problem eller lägg till ytterligare information för att markera exakt vad du behöver. Som det är skrivet för närvarande är det svårt att berätta exakt vad du frågar. Se sidan Hur man frågar för hjälp för att förtydliga denna fråga. Om den här frågan kan omformuleras för att passa reglerna i hjälpcentret. snälla redigera frågan. citat fungerar inte, det beräknade inte genomsnittet som jag vill ha. quot Vad räknar det då Vad är resultatet? Finns det några fel? ndash user456814 Jul 3 11 vid 15: 25AFL Scripting Host VIKTIGT. Sedan introduktionen av native looping och flödesreglering uttalanden som om-annars och i version 4.40 har betydelsen av scripting minskat kraftigt. För närvarande hanteras de flesta av de uppgifter som kräver skript i tidigare versioner i ursprunglig AFL. Vad är fler AFL-slingor 3-6 gånger snabbare än JScriptVBScript. AFL-skriptvärd är ett gränssnitt mellan AFL-motor och JScriptVBScript-motorer (aka. Active Scripting-teknologier) som är en del av Internet Tools Amp Technologies-plattformen som tillhandahålls av Microsoft. Det låter dig bygga formler som har delar i AFL-kod och delar i JScriptVBScript. Krav AmiBroker 3.59 eller högre Microsoft JScriptVBScript-motorer installerade Microsoft JScriptVBScript-motorer kommer med Internet Explorer 4 eller senare (Windows 98, Millenium, 2000 har den med i operativsystemet). Det rekommenderas dock att installera den senaste versionen av Internet Explorer (5.5) eller ladda ner och installera den senaste versionen av Windows Scripting Host (5.5) från Microsoft: JScriptVBScript dokumentation finns på officiell skriptsida på: msdn. microsoftscripting Aktiverar AFL Scripting Host Om du vill använda skript i formulären måste du ringa EnableScript () - funktionen i början av din formel. Funktionen tar en ingångsparameter - motornamn: Från och med då kan du belysa delar skrivna på skriptspråk i dina formulär. Skriptets början och slut måste markeras med lt and gt-sekvenser, som visas i exemplet nedan: quotnormalquot AFL-satser köper cross (macd (), 0) sälj kors (0, macd ()) lt. din skriptkod här. gt quotnormalquot AFL-uttalanden köp ExRem (buy, sell) För närvarande är det enda sättet att utbyta informationen mellan quotnormalquot AFL-delen och scriptdelen att använda variabler. AFL-skriptvärd visar ett objekt (fördefinierad, ingen creationinitialization behövs) som heter AFL. AFL-objektet har en (standard) parametriserad egenskap som heter Var (varname) som kan användas för att få tillgång till AFL-variabler från manussidan: Eftersom Var är standardegenskap kan du utelämna sitt namn och skriv endast AFL (varname) som visas i exemplet nedan: I AFL finns tre datatyper möjliga: array (med flytande punktnummer), ett tal (flytpunkt) och en sträng. VBScript - och JScript-motorerna använder variantdatatyp som kan innehålla vilken typ av variabel som helst, tre som används av AFL. Som i AFL, förklarar du inte variabler i skriptspråk, typen bestäms av den första uppgiften. Vid VBScript kan du få AFL-variabler av vilken typ som helst som stöds med hjälp av syntaxen som visas ovan. Men i JScript måste du använda följande kod för att få värdet av AFL-arrayen till JScript-array: GetArray ) - funktionen som visas ovan gör det enkelt att konvertera en säkerhetstyp för automatiseringstyp till JScript-array. Det här exemplet visar också hur man definierar och använder funktioner i JScript. Att tilldela AFL-variabler från skriptsidans arrayer är mycket enklare, detekterar AFL-scripthanteraren JScript-arrays och kan hämta innehållet direkt: Alla andra datatyper hanteras på samma sätt i JScript och VBScript Iterering genom arrays En av de mest grundläggande uppgiften som alla troligen skulle göra är att iterera genom array. I VBScript kan detta göras med hjälp av For..To..Next-satsen, i JScript med () - uppsättningen. Båda dessa konstruktioner måste känna till array-storlek eller antal element i arrayen. I VBScript bör du använda Ubound (arrary) - funktionen för att få den övre gränsen för arrayen, i JScript använder du bara längd egenskapen i arrayen. Följande exempel visar detta. (Kom ihåg att i både VBScript - och JScript-arrays är nollbaserade.) A) Indikatorexempel - Exponentiell glidande medelvärde: b) Resultatprovstoppsexempel Här följer exemplet med formeln som realiserar vinstmålet stopp vid den fasta 10 procenten från köpeskillingen. Observera att köpvillkor är uppfyllda när priset når en ny hög, så det händer flera gånger efter första köp. Därför ValueWhen (buy, close) kan inte ge dig det ursprungliga köpeskillingen och den typen av handelsregeln kunde inte implementeras i AFL själv. Men med scripting finns det inget problem. Ytterligare information Fler skriptprover finns på AFLs onlinebibliotek på: amibrokerlibrarylist. php Vid eventuella ytterligare frågor, kommentarer och förslag, kontakta mig på: supportamibroker. Observera att AFL-skript är ganska avancerat ämne, och du bör spela lite med AFL först innan du går för djupt i scripting. Jag försöker hämta den senaste EMA-en av en stor dataset (15000 värden). Det är en väldigt resurshämmad algoritm eftersom varje värde beror på den tidigare. Här är min kod: Vad jag redan gjorde: Isolera k så det beräknas inte 10000 gånger Håll bara den senaste beräknade EMA, och håll dem inte i en arrayanvändning för () istället för foreach () datarrayen har inte nycklar det är en grundläggande array Detta gjorde det möjligt för mig att reducera körtiden från 2000ms till ca 500ms för 15000 värden. Vad fungerade inte: Använd SplFixedArray (), detta rakade bara 10ms som kör 1000.000 värden Använd PHPTrader-förlängningen. detta returnerar en matris som innehåller alla EMAs istället för bara det senaste och dess långsammare Skrivning och körning av samma algoritm i C och köra den över 2 000 000 värden tar bara 13 ms. Såklart, att använda ett kompilerat språk på lägre nivå verkar hjälpa P Where ska jag gå härifrån Koden kommer slutligen att köras på Ubuntu, så vilket språk ska jag välja Kommer PHP att kunna ringa och skicka ett så stort argument till manuset frågade 11 juli kl 19:21 Klart att implementera med en förlängning ger dig en betydande ökning. Dessutom kan kalkylen förbättras som sig själv och den vinst du kan lägga till i vilket språk du väljer. Det är lätt att se att sistaEMA kan beräknas enligt följande: Detta kan omskrivas på följande sätt för att ta bort slingan så mycket som möjligt: För att förklara extraktionen av k tror att i föregående formulering är som om alla ursprungliga rådata multipliceras med k så praktiskt kan du istället multiplicera slutresultatet. Observera att du har omskrivit på det här sättet 2 operationer i slingan istället för 3 (för att vara exakt inuti slingan finns också en ökning i jämförelse med sizeata - och lastEMA-värdetilldelning) så du kan förvänta dig att få ytterligare snabbare i intervallet mellan 16 och 33. Vidare finns det andra förbättringar som i vissa fall kan beaktas: Överväg endast de sista värdena De första värdena multipliceras flera gånger med k1m 1 - k så att deras bidrag kan vara små eller till och med gå under den flytande punktens precision (eller det acceptabla felet). Denna ide är speciellt användbar om du kan antas att äldre data har samma storleksordning som den nyare eftersom om du bara anser de sista n-värdena är felet EMAofdiscardeddata (1-k) n felaktigt. Så om storleksordningen är i stort sett densamma kan vi säga att det relativa felet som görs är omraderat sistEMA EMAofdiscardeddata (1-k) n lastEMA som är nästan lika med helt enkelt (1-k) n. Under antagandet att lastEMA nästan är lika med EMAofdiscardeddata: Vi säger att du kan acceptera en relativ felreferens kan du säkert överväga endast de sista n-värdena där (1 - k) n lt relerr. Medel som du kan förberäkna (före loop) n log (relerr) logg (1-k) och beräkna alla endast med tanke på de sista n-värdena. Om datasetet är mycket stort kan detta ge en förnuftig hastighet. Tänk på att för 64 bitars flytande punkttal har du en relativ precision (relaterad till mantissa) som är 2-53 (ca 1.1e-16 och endast 2-24 5.96e-8 för 32 bitar flytande punkttal) så att du inte kan få bättre än det här relativa felet så borde du aldrig ha en fördel vid att beräkna mer än n log (1.1e-16) logg (1-k) värden. för att ge ett exempel om intervall 2000 då n log (1.1e-16) log (1-22001) 36746. Jag tycker att det är intressant att veta att extra beräkningar skulle gå vilse i avrundningarna det är värdelöst är bättre att inte göra. nu ett exempel på det fall där du kan acceptera ett relativfel som är större än flytpunkts precision relerr 1ppm 1e-6 0.00001 6 signifikanta decimaler du har n logg (1.1e-16) logg (1-22001) 13815 Jag tycker är ganska en litet antal jämfört med dina sista prover siffror, så i så fall kan speedup vara uppenbart (jag antar att intervallet 2000 är meningsfullt eller högt för din ansökan men det jag inte vet). bara några få siffror eftersom jag inte vet vilka typiska siffror du har: relerr 1e-3-serien 2000 n 6907 relerr 1e-3-serien 200 n 691 relerr 1e-3-serien 20 n 69 relerr 1e-6-serien 2000 n 13815 relerr 1e - 6 intervall 200 n 1381 relerr 1e-6 intervall 20 n 138 Om antagandet sistEMA nästan är lika med EMAofdiscarddata kan inte tas är saker mindre enkla men eftersom fördelkammen är signifikant kan det vara meningsfullt att fortsätta: vi måste ompröva fullständig formel: relerr EMAofdiscardeddata (1-k) n sistEMA så n log (relerr lastEMA EMAofdiscardeddata) logg (1-k) (logg (relerr) logg (lastEMA EMAofdiscardeddata)) logg (1-k) centralpunkten är att beräkna lastEMA EMAofdiscardeddata (utan att faktiskt beräkna sistEMA eller EMAofdiscardeddata förstås) Ett fall är när vi vet a-priori att till exempel EMAofdiscardeddata lastEMA lt M (till exempel M 1000 eller M 1e6) i det här fallet n lt (log (relerrM)) logg - k) Om du inte kan ge något M-nummer måste du hitta ett bra ID ea att överskatta EMAofdiscardeddata lastEMA En snabb väg kan vara att ta M max (data) min (data) Parallellisering Beräkningen kan skrivas om i en form där det är ett enkelt tillägg av oberoende termer: Så om genomförandespråket stöder parallellisering datasetet kan delas in i 4 (eller 8 eller n. i princip antalet CPU-kärnor tillgängliga) bitar och det kan beräknas summan av termer på varje bit i parallell sammanfatta de enskilda resultaten i slutet. Jag går inte i detalj med detta eftersom det här svaret redan är fruktansvärt länge och jag tror att konceptet redan är uttryckt. Tack för den här 39-talet med hjälp av detta på aktiemarknadsdata, så det faktum att de äldre uppgifterna är i samma storleksordning som de nyare data beror på vilken tidsram som används. Antag att ett intervall på 200, det kommer att bli en mycket större variation i priserna på en daglig tidsram (200 dagar) än 5 minuters tidsram (16 timmar). Jag kommer att experimentera med olika scenarier på verkliga och simulerade data. På nya data, med en serie lt 200, använder jag en 1000-dataset. Men jag har också gjort några backtest under de senaste åren, så jag behöver fortfarande ladda hela datasetet. Du hjälpte till båda situationer, tack ndash Lykegenes Jul 16 14 kl 15:11 Bygga din egen förlängning förbättrar definitivt prestanda. Här är en bra handledning från Zend-webbplatsen. Några prestationsfigurer: Hårdvara: Ubuntu 14.04, PHP 5.5.9, 1-kärn Intel CPU3.3Ghz, 128MB RAM (det är en VPS). Innan (endast PHP, 16 000 värden). 500ms C Extension, 16.000 värden. 0,3 ms C förlängning (100 000 värden). 3,7 ms C förlängning (500 000 värden). 28,0 ms men jag minnet begränsat vid denna punkt, med 70 MB. Jag fixar det och uppdaterar numren i enlighet med detta.
No comments:
Post a Comment