Io ho essenzialmente un array di valori come questo: La matrice di cui sopra è Semplificando al massimo, Im la raccolta di 1 valore per millisecondo nel mio codice vero e ho bisogno di elaborare l'uscita su un algoritmo che ho scritto per trovare il picco più vicino prima di un punto nel tempo. La mia logica non è riuscito perché nel mio esempio precedente, 0,36 è il vero picco, ma il mio algoritmo sarebbe guardare indietro e vedere l'ultimo numero di 0,25 come il picco, come theres una diminuzione di 0,24 prima di esso. L'obiettivo è quello di prendere questi valori e applicare un algoritmo per loro che li appianare un po 'in modo da avere i valori più lineare. (Vale a dire: Id come i miei risultati siano sinuosa, non jaggedy) Ive stato detto di applicare un filtro a media mobile esponenziale a miei valori. Come posso fare questo la sua davvero difficile per me leggere equazioni matematiche, ho a che fare molto meglio con il codice. Come faccio a dei valori di processo nella mia matrice, l'applicazione di un calcolo della media mobile esponenziale a pareggiare fuori chiesto 8 febbraio 12 a 20:27 Per calcolare una media mobile esponenziale. è necessario mantenere uno stato in giro e avete bisogno di un parametro di sintonia. Ciò richiede una (sei ipotizzando l'utilizzo di Java 5 o successivo) po 'di classe: un'istanza con il parametro di decadimento che si desidera (potrebbe richiedere sintonizzazione dovrebbe essere compreso tra 0 e 1) e quindi utilizzare media () per filtrare. Durante la lettura di una pagina su qualche ricorrenza mathmatical, tutti si ha realmente bisogno di sapere quando trasformandolo in codice è che i matematici piace scrivere indici in array e sequenze con gli indici. (Theyve alcune altre notazioni così, che non aiuta.) Tuttavia, l'EMA è piuttosto semplice come avete solo bisogno di ricordare un valore vecchio non complicati elementi di superfici sensibile richiesti. rispose 8 febbraio 12 a 20:42 TKKocheran: Più o meno. Isn39t è bello quando le cose possono essere semplici (oppure con la nuova sequenza, ottenere un nuovo averager.) Si noti che i primi termini della sequenza media salteranno in giro un po 'a causa di effetti di bordo, ma si ottiene quelli con altre medie mobili pure. Tuttavia, un buon vantaggio è che si può avvolgere la logica di media mobile nel averager e sperimentare senza disturbare il resto del programma troppo. ndash Donal Fellows 9 febbraio 12 a 0:06 sto avendo difficoltà a capire le vostre domande, ma cercherò di rispondere in ogni caso. 1) Se il vostro algoritmo trovato 0,25 invece di 0,36, allora è sbagliato. E 'sbagliato perché presuppone un aumento o una diminuzione monotona (che sta andando sempre verso l'alto o verso il basso andando sempre). A meno che la media di tutti i dati, i punti dati --- come li presenti --- sono non lineari. Se davvero si vuole trovare il valore massimo tra due punti nel tempo, poi tagliare la matrice da Tmin a Tmax e trovare il massimo di tale sottoarray. 2) Ora, il concetto di medie mobili è molto semplice: immaginate che ho il seguente elenco: 1.4, 1.5, 1.4, 1.5, 1.5. Posso liscia fuori prendendo la media di due numeri: 1.45, 1.45, 1.45, 1.5. Si noti che il primo numero è la media di 1.5 e 1.4 (secondo e primi numeri) il secondo (nuova lista) è la media di 1.4 e 1.5 (terzo e secondo elenco di età), terzo (nuovo elenco) la media di 1,5 e 1,4 (quarto e terzo), e così via. Avrei potuto reso periodo di tre o quattro, o n. Si noti come i dati sono molto più agevole. Un buon modo per vedere le medie mobili sul posto di lavoro è quello di andare a Google Finance, selezionare un magazzino (provate Tesla Motors piuttosto volatile (TSLA)) e cliccare su fattori tecnici alla parte inferiore del grafico. Selezionare Media mobile con un determinato periodo, e media mobile esponenziale a confrontare le loro differenze. Media mobile esponenziale è solo un altro elaborazione di questo, ma i pesi i dati più vecchi in meno rispetto ai nuovi dati questo è un modo per polarizzare il livellamento verso il retro. Si prega di leggere la voce di Wikipedia. Quindi, questo è più di un commento di una risposta, ma la piccola casella di commento era solo per minuscola. In bocca al lupo. Se siete ad avere problemi con la matematica, si potrebbe andare con una media mobile semplice anziché esponenziale. Quindi, l'uscita si ottiene sarebbe stato l'ultimo termine x diviso per x. pseudocodice testato: Si noti che è necessario per gestire le parti iniziali e finali dei dati dato che chiaramente non puoi fare la media dei ultimi 5 termini quando si è sul 2 ° punto di dati. Inoltre, ci sono modi più efficaci di calcolo di questa media mobile (somma somma - più antica più recente), ma questo è quello di ottenere il concetto di che cosa sta accadendo in tutto. rispose 8 febbraio 12 a 20: 41Exponential Media mobile - EMA Abbattere media mobile esponenziale - EMA Il 12 e 26 giorni EMAs sono i più popolari medie a breve termine, e sono utilizzati per creare indicatori come il movimento divergenza media di convergenza ( MACD) e l'oscillatore prezzo percentuale (PPO). In generale, il 50 e 200 giorni EMA sono utilizzati come segnali di tendenze a lungo termine. I commercianti che utilizzano l'analisi tecnica trovano medie mobili molto utili e penetranti se applicato correttamente, ma creano il caos quando viene utilizzato in modo improprio o sono male interpretato. Tutte le medie mobili comunemente utilizzati in analisi tecnica sono, per loro stessa natura, gli indicatori in ritardo di sviluppo. Di conseguenza, le conclusioni tratte da applicare una media mobile a un particolare schema di mercato dovrebbe essere quello di confermare una mossa di mercato o ad indicare la sua forza. Molto spesso, nel momento di una linea dell'indicatore di media mobile ha fatto un cambiamento per riflettere un movimento significativo nel mercato, il punto ottimale di ingresso sul mercato è già passato. Un EMA non serve per alleviare questo dilemma certa misura. Poiché il calcolo EMA mette più peso sui dati più recenti, si abbraccia l'azione dei prezzi un po 'più stretto e quindi reagisce più veloce. Ciò è desiderabile quando un EMA è usato per derivare un segnale di entrata negoziazione. Interpretazione del EMA Come tutti si muovono gli indicatori medi, sono molto più adatti per trend dei mercati. Quando il mercato è in una tendenza rialzista forte e sostenuta. la linea dell'indicatore EMA mostrerà anche una tendenza rialzista e viceversa per un trend verso il basso. Un operatore vigile non solo prestare attenzione alla direzione della linea EMA ma anche il rapporto tra il tasso di variazione da un bar all'altro. Per esempio, come l'azione prezzo di un forte rialzo comincia ad appiattirsi e invertire, il tasso di variazione EMA da un bar all'altro comincerà a diminuire fino al momento che la linea indicatrice appiattisce e il tasso di variazione è zero. A causa dell'effetto ritardo, da questo punto, o anche qualche bar prima, l'azione di prezzo dovrebbe già invertito. Ne consegue che osservare una diminuzione consistente del tasso di variazione della EMA potrebbe esso stesso essere usata come indicatore che potrebbe contrastare ulteriormente il dilemma causato dall'effetto ritardo di media mobile. Utilizzi comuni del EMA EMA sono comunemente usati in combinazione con altri indicatori per confermare significativi movimenti del mercato e di valutare la loro validità. Per gli operatori che commerciano intraday e mercati in rapida evoluzione, l'EMA è più applicabile. Molto spesso i commercianti usano EMAs per determinare un bias di trading. Ad esempio, se un EMA su un grafico giornaliero mostra una forte tendenza al rialzo, una strategia di trader intraday può essere quella di commerciare solo dal lato lungo su un intraday chart. I bisogno di tenere traccia degli ultimi 7 giorni ore di lavoro in un file flat la lettura di loop. Il suo essere utilizzati per misurare fatigueability di turni di lavoro. In questo momento ho qualcosa che funziona, ma sembra piuttosto prolisso e Im non sicuro se theres un modello di questo è più succinta. Attualmente, ho una classe Java con un array statico per contenere i dati ultimi x giorni, poi come ho letto attraverso il file, ho recidere il primo elemento e spostare gli altri 6 (per una settimana in totale rotolamento) indietro di una. La lavorazione di questo array statico è fatto in un proprio metodo per esempio. La mia domanda: è questo un approccio progettuale ragionevole, o c'è qualcosa di assolutamente ovvio e semplice per eseguire questa operazione Grazie ragazzi ha chiesto 30 ago 11 in 14:33 Grazie mille ragazzi: I39ve ottenuto il messaggio: utilizzare un oggetto di livello superiore e sfruttare il metodi rilevanti o un buffer circolare. Grandi risposte, tutti loro. Quando si pensa a questo proposito, è sempre necessario l'accesso a tutta la gamma in modo da poter sbarazzarsi di quel primo ingresso - che wasn39t 100 sicuro per conto mio. I39m sollevato dal fatto che ho perso un po 'hadn39t 1 liner e era fondamentalmente su un ragionevole, se traccia non efficiente e concisa Questo è quello che mi piace di questo sito: alta qualità, relative risposte da parte di persone che conoscono il loro SHT. ndash Pete855217 30 agosto 11 alle 15:05 Perché si inizializza RunningTotal su null Qual è il suo tipo in cui è dichiarata Sarebbe bene se si mette alcuni esempi di codice che assomigliano codice Java vero e proprio. Passando, la mia critica sarebbe il seguente: la vostra funzione non troppo. Una funzione, o un metodo, dovrebbe essere coesa. Più in modo appropriato, si dovrebbe fare una cosa e una cosa sola. Peggio ancora, che cosa accade nella vostra per ciclo quando x 5 Si copia runningTotal6 in runningTotal5. ma poi si hanno due copie dello stesso valore in posizione 5 e 6. Nel tuo disegno, la funzione movesshuffles gli elementi dell'array calcola la roba stampe totali per errore standard restituisce il totale Fa troppo. Il mio primo suggerimento è di non muoversi roba in giro nella matrice. Invece, implementare un buffer circolare e utilizzarlo invece della matrice. E 'semplificherà il vostro disegno. Il mio secondo suggerimento è quello di abbattere le cose in funzioni che sono coesa: avere una struttura di dati (un buffer circolare) che consente di aggiungere ad esso (e che scende la voce più vecchia ogni volta che raggiunge la sua capienza.) Hanno la struttura di dati implementare un interator avere una funzione che calcola il totale sul iteratore (non vi preoccupate se si sta calcolando il totale di un array, elenco o bufer circolare.) Non chiamare è totale. Chiamatela somma, che è quello che si sta Computing. Questo è quello che Id fare :) That39s informazioni grande Luis, tuttavia ricordate questa funzione è una piccola parte della funzionalità della classe, e sarebbe eccessivo aggiungere troppo codice per renderlo perfetto. Sei tecnicamente corretta, e ho capito il mio codice fa 39too much39, ma allo stesso tempo a volte it39s meglio sbagliare sul lato della più piccola, il codice più chiaro che andare per la perfezione. Dato le mie capacità Java, anche facendo il pseudocodice che si descrive compilare avrebbe mi soffio il bilancio su questo (), ma grazie per la descrizione chiara. ndash Pete855217 31 agosto 11 alle 02:23 Hmmm, it39s non si tratta di perfezione, ma sulle pratiche industriali consolidate che abbiamo conosciuto per gli ultimi 3 decenni. codice pulito è sempre uno che è partizionato. Abbiamo decenni di prove che indicano questa è la strada da percorrere nel caso generale (in termini di costo-efficienza, riduzione dei difetti, la comprensione, ecc). a meno che non si getta codice per una sorta di una volta di cosa. Non è mai costosa fare questo quando si inizia qualsiasi analisi problema in questo modo. Coding 101, scomporre il problema e il codice segue, né eccessivo né difficile) ndash luis. espinal 31 agosto 11 alle 15:55 Il vostro compito è troppo semplice e il aproach avete adottato è certamente un bene per il lavoro. Tuttavia, se si desidera utilizzare un design migliore, è necessario sbarazzarsi di tutto quel movimento numero è meglio utilizzare una coda FIFO e fare buon uso di metodi push e pop in questo modo il codice riflettere solito qualsiasi spostamento dei dati, solo le due azioni logiche di nuovi dati e rimuovere i dati più vecchi di 7 giorni. risposto 30 ago 11 in 14:49
No comments:
Post a Comment