traderema la funzione traderema () non funziona correttamente. si calcola semplicemente media di voci dell'ultimo periodo. Seguire il seguente codice per traderema: la funzione EMACalculator (limite, array) EMApreviousday array0 printr (array) multiplier1 (2limit1) EMAarray () EMA array0 Chiudere array1 mentre (limite) echoEMA è Eman EMA (Close - EMApreviousday) multiplier1 EMApreviousday EMApreviousday EMA LIMIT - - ritorno EMA cui limite accettare il periodo di ema e la matrice. accettare array di dati per ema calculation. I voler calcolare il valore della EMA (media mobile esponenziale) in PHP. Ive ha provato con codice riportato di seguito, ma la sua mi dà errore 500. PHP: EMA funzione di calcolo commerciante-ema provato con molto tempo Googling ma non ricevendo alcun aiuto su questo in PHP. Così, Ive ha idea di cosa deve essere fatto per calcolare il valore EMA. Modifica-1: le estensioni installate Ive installato tutte le estensioni necessarie, ora sto ottenendo l'uscita. Ma sembra doesnt dare uscita corretta. Credo funzione PHP per il calcolo EMA non funziona correttamente. Qualsiasi aiuto in questo sarebbe notevolmente appreciated. 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