Ho un piccolo problema. Ho laboratorio virtuale, uno studente completerà un sondaggio con 5 domande, ciascuna al costo di 2 punti. -2point Scelta Bad, buona scelta 2Punti. Quindi, in definitiva, quando un comunicato studente Mostrami i risultati, voglio che lo script per aggiornare settore dei media da parte degli utenti da tavolo e campo nota di aggiornamento da tavolo laborator. Quello studente riceverà più risultati, ma se ha risultato 4, la media deve essere di 4, senza considerare altri risultati. Ho attaccato uno script PHP, esso non funziona, che non ha ancora calcolare media che voglio. PS: i media che significa media, nota risultato significato o una nota, che significa Suma somma, il numero significato nrnote di note. Se eseguo selezionare if (notalt4,4, AVG (Nota)), come Medie da laborator dove studentteodorescuyahoo mostra 4 questo è sbagliato. Non ho 4 nei miei appunti. ciò che è sbagliato qui Se ho un 4, i rendimenti medi 4, è buono qui. chiesto 3 luglio 11 alle 15:16 chiuso da poco chiaro quello che stai chiedendo da tripleee. andrewsi. HaveNoDisplayName. Himanshu. Alex 19 dicembre 15 alle 5:10 Si prega di chiarire il problema specifico o aggiungere ulteriori dettagli per evidenziare esattamente ciò che serve. Come it39s attualmente scritta, la sua difficile dire esattamente che cosa you39re chiedendo. Vedere la pagina Come chiedere aiuto chiarire questa domanda. Se questa domanda può essere riformulato per adattarsi alle regole del centro di aiuto. si prega di modificare la domanda. quotit lavoro doesn39t, è didn39t calcolare media che want. quot cosa calcola allora che cosa ci sono i risultati sono errori ndash user456814 3 luglio 11 a 15: 25AFL Scripting Host NOTA IMPORTANTE. Dopo l'introduzione di dichiarazioni di loop e di controllo del flusso autoctone come if-else e mentre nella versione 4.40 il significato di scripting è stato notevolmente ridotto. Attualmente la maggior parte dei compiti che richiedono scripting nelle versioni precedenti potrebbe essere gestita in nativo AFL. Che cosa è più AFL cicli sono 3-6 volte più veloce di JScriptVBScript. AFL host di script è un'interfaccia tra il motore di AFL e motori JScriptVBScript (aka. Tecnologie di scripting attivi) disponibili come parte di strumenti Internet piattaforma amp Technologies fornito da Microsoft. Esso consente di costruire le formule che sono avere parti in codice AFL e parti in JScriptVBScript. Requisiti AmiBroker 3.59 o superiore motori Microsoft JScriptVBScript motori Microsoft JScriptVBScript installati sono dotati di Internet Explorer 4 o superiore (Windows 98, Millennium, 2000 sono è incluso nel sistema operativo). E 'comunque consigliato di installare l'ultima versione di Internet Explorer (5.5) o scaricare e installare la versione più recente di Windows Scripting Host (5.5) da Microsoft: JScriptVBScript documentazione può essere trovata sulla pagina ufficiale di script a: msdn. microsoftscripting attivazione di AFL Scripting Host Se si desidera utilizzare gli script all'interno di formule si deve chiamare la funzione ENABLESCRIPT () all'inizio della formula. La funzione accetta un parametro di ingresso - nome del motore: Da allora in poi, si sarà in grado di incarnare parti scritte in linguaggio di scripting nelle formule. L'inizio e la fine dello script deve essere contrassegnato con le sequenze lt e GT, come mostrato nell'esempio seguente: quotnormalquot dichiarazioni AFL acquistare croce (MACD (), 0) vendere croce (0, MACD) () lt. il codice di script qui. gt quotnormalquot dichiarazioni AFL acquistare ExRem (comprare, vendere) Attualmente l'unico modo per scambiare le informazioni tra quotnormalquot parte AFL e in parte lo script è quello di utilizzare le variabili. AFL host di script espone un oggetto (predefinito, senza creationinitialization necessario) chiamato AFL. L'oggetto AFL ha una proprietà (default) parametrizzata chiamato Var (varname) che può essere utilizzato per accedere alle variabili AFL dal lato script: Dal Var è proprietà di default è possibile omettere il suo nome e scrivere semplicemente AFL (varname), come mostrato nell'esempio qui di seguito: In AFL ci sono tre tipi di dati possibili: array (di numeri in virgola mobile), un numero (virgola mobile) e una stringa. I motori VBScript e JScript utilizzano il tipo di dati variante che può contenere qualsiasi tipo di variabile di cui tre usato da AFL. Come in AFL, voi non dichiarare le variabili in linguaggi di scripting, il tipo è determinata dalla prima assegnazione. In caso di VBScript è possibile GetSet variabili AFL di qualsiasi tipo supportato utilizzando la sintassi sopra indicato. Ma in JScript, a causa della differenza fondamentale in array di movimentazione in JScript (elementi dell'array in JScript sono implementate come properites dinamiche di un oggetto array) è necessario utilizzare il seguente codice per ottenere il valore della serie AFL in una matrice JScript: Il GetArray ( funzione di) mostrato sopra rende facile per convertire l'automazione di tipo matrice sicura in una matrice JScript. Questo esempio mostra anche come definire e utilizzare le funzioni di variabili JScript Assegnazione AFL da array di script lato è molto più semplice, AFL host di script rileva gli array JScript e può ottenere direttamente i loro contenuti: Tutti gli altri tipi di dati vengono gestiti gli stessi in JScript e VBScript scorrendo le matrici Uno dei compiti più elementari che tutti probabilmente sarebbe fare è scorrere array. In VBScript questo può essere fatto utilizzando dichiarazione For..To..Next, in JScript utilizzando istruzione for (). Entrambi questi costrutti bisogno di sapere dimensione della matrice o il numero di elementi nella matrice. In VBScript si dovrebbe utilizzare la funzione UBound (arrary) per ottenere il limite superiore della matrice, in JScript è sufficiente utilizzare proprietà length dell'array. I seguenti esempi mostrano questo. (Si ricorda che in entrambi gli array VBScript e JScript sono a base zero.) A) Indicatore esempio - media mobile esponenziale: b) esempio di arresto Profit-bersaglio Ecco l'esempio della formula che realizza fermata profitto bersaglio al 10 percentuale fissa dal prezzo di acquisto. Si noti che acquistare condizione è soddisfatta quando il prezzo raggiunge un nuovo massimo, così accade più volte dopo l'affare iniziale. Pertanto ValueWhen (comprare, vicino) non è possibile dare prezzo di acquisto iniziale e quel tipo di regola il commercio non poteva essere attuato in AFL sé. Ma, con gli script non c'è nessun problema. Ulteriori informazioni Più campioni di script sono disponibili presso l'AFL biblioteca on-line all'indirizzo: amibrokerlibrarylist. php In caso di domande ulteriori, commenti e suggerimenti si prega di contattare me a: supportamibroker. Si prega di notare che la AFL scripting è argomento abbastanza avanzato e si dovrebbe giocare un po 'con AFL prima di andare troppo in profondità nel scripting. Im cercando di recuperare l'ultimo EMA di un grande insieme di dati (15000 valori). Si tratta di un algoritmo molto avido di risorse poiché ogni valore dipende dal precedente. Ecco il mio codice: Quello che ho già fatto: Isolare k in modo che non si calcola 10000 volte Conservare soltanto l'ultima EMA calcolato, e non mantenerle tutte in un uso array per () al posto di foreach () la matrice di dati pretende molto hanno le chiavi la sua una matrice di base questo mi ha permesso di ridurre i tempi di esecuzione dal 2000 ms a circa 500ms per 15000 valori Cosa non ha funzionato: Usa SplFixedArray (), questo rasato solo 10ms esecuzione 1.000.000 valori d'uso di estensione PHPTrader. questo restituisce un array contenente tutti gli EMAs invece di solo l'ultima, e la sua scrittura più lenta e correre lo stesso algoritmo in C e in esecuzione sopra 2.000.000 valori richiede solo 13ms Così, ovviamente, utilizzando un compilato, linguaggio di basso livello sembra aiutare P Dove dovrei andare da qui il codice in ultima analisi, eseguito su Ubuntu, in modo che lingua devo scegliere Will PHP essere in grado di chiamare e passare un enorme argomento tale da script chiesto 11 luglio 14 alle 19:21 Chiaramente attuare con estensione ti dà una spinta significativa. Inoltre, il calcolo può essere migliorata come se stesso e che il guadagno è possibile aggiungere in qualsiasi lingua scelta. È facile vedere che lastEMA può essere calcolata come segue: Questo può essere riscritta come segue per estrarre del ciclo come più possibile: Per spiegare l'estrazione del k pensare che nella formulazione precedente è come se tutta la dati grezzi originali vengono moltiplicati per K in modo praticamente si può invece moltiplicare il risultato finale. Si noti che, riscritto in questo modo, si dispone di 2 operazioni all'interno del ciclo, invece di 3 (per la precisione all'interno del ciclo ci sono anche i incrementare, i confronti con sizedata e lastEMA valore assegnazione) quindi in questo modo ci si può aspettare di ottenere un ulteriore SpeedUp nell'intervallo compreso tra il 16 e 33. Inoltre ci sono altri miglioramenti che possono essere considerati, almeno in alcune circostanze: prendere in considerazione solo i valori ultimi I primi valori sono moltiplicati più volte da k1m 1 - k così il loro contributo può essere poco o anche andare sotto la precisione in virgola mobile (o l'errore accettabile). Questa idea è particolarmente utile se si può fare l'ipotesi che i dati più vecchi sono dello stesso ordine di grandezza del più recente, perché se si considera solo l'ultimo n valori l'errore che si può fare e sbagliare EMAofdiscardeddata (1-k) n. Quindi, se l'ordine di grandezza è sostanzialmente lo stesso possiamo dire che l'errore relativo fatto è relerr sbagliare lastEMA EMAofdiscardeddata (1-k) n lastEMA che è quasi uguale a semplice (1-k) n. Partendo dal presupposto che lastEMA quasi pari a EMAofdiscardeddata: Diciamo che si può accettare un errore relativo relerr si può tranquillamente considerare solo i valori ultimi n dove (1 - k) n lt relerr. Significa che è possibile pre-calcolare (prima del ciclo) n log (relerr) log (1-k) e calcolare tutte considerando solo gli ultimi valori n. Se il set di dati è molto grande questo può dare un aumento di velocità ragionevole. Si consideri che per i numeri in virgola mobile a 64 bit si ha una precisione relativa (relativa alla mantissa), che è 2-53 (circa 1.1e-16 e solo 2-24 5.96e-8 per 32 numeri in virgola bit floating), quindi non è possibile ottenere meglio di questo errore relativo in modo sostanzialmente non si dovrebbe mai avere un vantaggio nel calcolo più di n log di registro valori (1.1e-16) (1-k). per fare un esempio, se gamma 2000 quindi n log (1.1e-16) log (1-22.001) 36746. Credo che sia interessante sapere che i calcoli in più andrebbero persi all'interno delle arrotondamenti è inutile è meglio non fare. ora un esempio per il caso in cui è possibile accettare un errore relativo maggiore di precisione in virgola mobile relerr 1ppm 1E-6 0.00001 6 cifre decimali significative che hai n log (1.1e-16) log (1-22.001) 13815 Penso che è piuttosto una piccolo numero rispetto al vostro ultimo numero di campioni in modo che i casi l'aumento di velocità potrebbe essere evidente (Im supponendo che gamma 2000 è di significativo o elevato per la vostra applicazione, ma Thi non riesco a sapere). solo altri pochi numeri perché non so quali sono le sue figure tipiche: relerr 1e-3 gamma 2000 n 6907 relerr 1e-3 gamma 200 n 691 relerr 1e-3 serie 20 n 69 relerr 1e-6 gamma 2000 n 13815 relerr 1e - 6 gamma 200 n 1381 relerr 1e-6 serie 20 n 138 Se l'ipotesi lastEMA quasi uguale a EMAofdiscardeddata non può essere preso le cose sono meno facile, ma dal momento che la camma vantaggio essere significativo può essere significativo per andare avanti: abbiamo bisogno di riconsiderare il formula piena: relerr EMAofdiscardeddata (1-k) n lastEMA così n log (relerr lastEMA EMAofdiscardeddata) log (1-k) (log (relerr) log (lastEMA EMAofdiscardeddata)) log (1-k) il punto centrale è quello di calcolare lastEMA EMAofdiscardeddata (senza in realtà il calcolo lastEMA né EMAofdiscardeddata ovviamente) un caso è quando si sa a priori che, per esempio EMAofdiscardeddata lastEMA lt M (ad esempio M 1000 o M 1E6) in questo caso n lt (log (relerrM)) log (1 - k) se non si può dare alcun numero M è necessario trovare una buona idea a un eccesso di stima EMAofdiscardeddata lastEMA un modo rapido potrebbe essere quello di prendere M max (dati) min (dati) Parallelizzazione Il calcolo può essere riscritta in forma dove è una semplice aggiunta di termini indipendenti: Quindi, se la lingua applicazione supporta parallelizzazione di dati può essere diviso in 4 (o 8 o n. fondamentalmente il numero di core della CPU disponibili) pezzi e può essere calcolata la somma dei termini su ogni pezzo in parallelo sommando i singoli risultati alla fine. Io non vado in dettaglio con questo dato questa risposta è già terribilmente lunga e credo che il concetto è già espresso. Grazie per questo I39m utilizzando questo su dati di borsa, quindi il fatto che i dati più vecchi è dello stesso ordine di grandezza di dati più recente dipende dal periodo di tempo utilizzato. Supponiamo una gamma di 200, ci sarà una variazione molto maggiore dei prezzi su un arco di tempo giornaliero (200 giorni) di 5 minuti di tempo (16 ore). Io sperimentare con diversi scenari su dati reali e simulati. Su nuovi dati, con una gamma lt 200, io uso un insieme di dati elementi 1000. Ma ho anche fare qualche prova di nuovo nel corso degli ultimi anni, così ho ancora bisogno di caricare l'intero set di dati. Hai aiutato per entrambe le situazioni, grazie ndash Lykegenes 16 luglio 14 a 15:11 Costruire proprio interno sicuramente migliora le prestazioni. Heres un buon tutorial dal sito Zend. Alcuni dati relativi alle prestazioni: Hardware: Ubuntu 14.04, PHP 5.5.9, 1-core Intel CPU3.3Ghz, 128 MB di RAM (è una VPS). Prima (PHP solo, 16.000 valori). 500ms C di estensione, 16.000 valori. 0.3ms C Estensione (100.000 valori). 3.7ms C Estensione (500.000 valori). memoria 28.0ms Ma Im limitata a questo punto, con 70MB. Mi rimediare e aggiornare i numeri di conseguenza.
No comments:
Post a Comment