Ponderata Media Mobile C


Sto cercando di calcolare la media mobile di un segnale. Il valore del segnale (una doppia) viene aggiornato in momenti casuali. Sto cercando un modo efficace per calcolare la media ponderata nel tempo su una finestra di tempo, in tempo reale. Ho potuto fare la mia auto, ma è più difficile di quanto pensassi. La maggior parte delle risorse Ive ha trovato su internet sta calcolando la media del segnale periodico in movimento, ma il mio aggiornamenti in tempo casuale. Qualcuno sa buone risorse per che il trucco è la seguente: È possibile ottenere gli aggiornamenti a volte casuali tramite aggiornamento void (int tempo, il valore float). Tuttavia anche è necessario tenere traccia anche quando un aggiornamento cade la finestra di tempo, in modo da impostare un allarme che chiama in fase di N che rimuove il precedente aggiornamento venga mai preso in considerazione di nuovo nel calcolo. Se questo accade in tempo reale è possibile richiedere il sistema operativo per effettuare una chiamata a un dropoffoldestupdate metodo void (tempo int) per essere chiamato al momento N Se si tratta di una simulazione, non è possibile ottenere aiuto da parte del sistema operativo ed è necessario farlo manualmente. In una simulazione che chiamereste metodi con il tempo fornito come argomento (che non correlano con il tempo reale). Tuttavia, un'ipotesi ragionevole è che le chiamate sono garantiti per essere tale che gli argomenti tempo sono in aumento. In questo caso è necessario mantenere un elenco ordinato dei valori di tempo di allarme, e per ogni aggiornamento e leggere chiamate di verificare se l'argomento di tempo è maggiore del capo della lista degli allarmi. Anche se è più grande si fa l'elaborazione relative allarme (drop off l'aggiornamento più antica), togliere la testa e controllare di nuovo fino a quando tutti gli allarmi prima del tempo dato vengono elaborati. Poi fare la chiamata di aggiornamento. Ho finora assunto è ovvio quello che si potrebbe fare per il calcolo effettivo, ma mi dilungherò per ogni evenienza. Suppongo di avere un metodo float leggere (tempo int) che consente di leggere i valori. L'obiettivo è quello di rendere questa chiamata il più efficiente possibile. Quindi non si calcola la media mobile ogni volta che il metodo di lettura viene chiamato. Invece si Precompute il valore dell'ultimo aggiornamento o l'ultimo allarme, e ottimizzare il valore di un paio di operazioni in virgola mobile per tenere conto del passaggio del tempo dall'ultimo aggiornamento. (I. E. Un numero costante di operazioni eccetto forse l'elaborazione di un elenco di allarmi accatastati). Speriamo che questo sia chiaro - questo dovrebbe essere abbastanza semplice algoritmo e abbastanza efficiente. Un'ulteriore ottimizzazione. uno dei problemi rimanenti è se un gran numero di aggiornamenti avviene entro la finestra di tempo, allora vi è un tempo per la quale non sono né legge né aggiornamenti e quindi di lettura o aggiornamento arriva. In questo caso, l'algoritmo di cui sopra sarà inefficiente in modo incrementale l'aggiornamento del valore per ciascuno degli aggiornamenti che è cadere. Questo non è necessario perché ci interessa solo l'ultimo aggiornamento al di là della finestra di tempo, quindi se c'è un modo per eliminare in modo efficiente via tutti gli aggiornamenti più anziani, sarebbe utile. Per fare questo, siamo in grado di modificare l'algoritmo per fare una ricerca binaria di aggiornamenti per trovare l'ultimo aggiornamento prima che la finestra di tempo. Se ci sono relativamente pochi gli aggiornamenti che deve essere lasciato cadere, allora si può in modo incrementale aggiornare il valore per ogni caduto aggiornamento. Ma se ci sono molti aggiornamenti che devono essere caduto allora si può ricalcolare il valore da zero dopo aver lasciato fuori i vecchi aggiornamenti. Appendice sul incrementale Computation: Ho dovrebbe chiarire cosa intendo per il calcolo incrementale sopra nella frase modificare questo valore da un paio di operazioni in virgola mobile per tenere conto del passaggio del tempo dall'ultimo aggiornamento. Iniziale di calcolo non incrementale: poi iterare su relevantupdates in ordine crescente di tempo: media mobile (somma lastUpdate timesincelastupdate) windowlength. Ora, se esattamente un aggiornamento cade dalla finestra, ma non nuovi aggiornamenti arrivano, regolare sum come: (notare che è priorupdate che ha modificato la sua data e ora di inizio della ultima finestra di iniziare). E se esattamente un aggiornamento entra dalla finestra, ma non nuovi aggiornamenti cadere, regolare somma come: Come dovrebbe essere evidente, si tratta di uno schizzo, ma si spera che mostra come è possibile mantenere la media in modo che sia (1) O al update su base ammortizzato. Ma nota ulteriore ottimizzazione nel paragrafo precedente. Si noti inoltre problemi di stabilità alluso in una risposta più vecchio, il che significa che gli errori di virgola mobile possono accumularsi su un gran numero di tali operazioni elementari tale che vi è una divergenza dal risultato della piena calcolo, che è significativo per l'applicazione. Se un'approssimazione è OK e c'è un tempo minimo tra i campioni, si potrebbe provare super-campione. Avere una matrice che rappresenta intervalli di tempo equidistanti che sono più corti rispetto al minimo, e in ogni periodo di tempo l'ultimo negozio di esempio che è stato ricevuto. Più breve è l'intervallo, più la media sarà quello il vero valore. Il periodo dovrebbe essere non superiore alla metà del minimo o c'è la possibilità di perdere un campione. risposto 15 dicembre 11 alle 18:12 risposto 15 dicembre 11 alle 22:38 Grazie per la risposta. Un miglioramento che sarebbe necessaria per quotcachequot effettivamente il valore della media totale quindi abbiamo don39t ciclo tutto il tempo. Inoltre, può essere un piccolo punto, ma non sarebbe più efficace utilizzare un deque o un elenco per memorizzare il valore, dal momento che si assume che l'aggiornamento arriverà nel giusto ordine. Inserimento sarebbe più veloce nella mappa. ndash Arthur 16 dicembre 11 alle 8:55 Sì, si può memorizzare nella cache il valore della somma. Sottrarre i valori dei campioni che cancellare, aggiungere i valori dei campioni si inserisce. Inoltre, sì, un dequeltpairltSample, Dategtgt potrebbe essere più efficiente. Ho scelto mappa per migliorare la leggibilità e la facilità di invocare mappa :: limite superiore. Come sempre, scrivere codice corretto, poi profilo e misurare le variazioni incrementali. ndash Rob 16 dicembre 11 alle 15:00 Nota: A quanto pare questo non è il modo per avvicinarsi a questo. Lasciando qui per riferimento su ciò che è sbagliato in questo approccio. Controllare i commenti. AGGIORNATO - sulla base di Olis commento. Non sono sicuro circa l'instabilità che sta parlando però. Utilizza una mappa ordinata di tempi di arrivo rispetto ai valori. All'arrivo di un valore di aggiungere l'orario di arrivo alla mappa ordinata insieme al suo valore e aggiornare la media mobile. Avvertimento Questa è pseudo-codice: Ci. Non pienamente concretizzati, ma si ottiene l'idea. Le cose da notare. Come detto sopra è pseudo codice. Youll bisogno di scegliere una mappa adeguata. Dont rimuovere le coppie come eseguire iterazioni come si invalidare l'iteratore e dovrà ricominciare da capo. Vedere Olis commento qui sotto anche. risposto dic 15 11 alle 12:22 Questo lavoro doesn39t: esso doesn39t tener conto quale percentuale della finestra lunghezza esiste ciascun valore. Inoltre, questo approccio di aggiunta e sottraendo è stabile solo per i tipi interi, non galleggianti. ndash Oliver Charlesworth 15 dicembre 11 a 00:29 OliCharlesworth - scusate ho perso alcuni punti chiave nella descrizione (doppio e ponderata nel tempo). Vi aggiornerò. Grazie. ndash Dennis 15 dicembre 11 al 00:33 Il tempo di ponderazione è ancora un altro problema. Ma non that39s cosa I39m parlando. Mi riferivo al fatto che quando un nuovo valore entra per la prima volta la finestra, il suo contributo alla media è minima. Il suo contributo continua ad aumentare fino a quando un nuovo valore entra. ndash Oliver Charlesworth 15 dicembre 11 alle 12: 35I conosce questo è realizzabile con boost secondo: Ma mi piacerebbe davvero evitare l'uso di spinta. Googled e non trovato alcun esempio adatto o leggibili. Fondamentalmente voglio monitorare la media mobile di un flusso continuo di un flusso di numeri in virgola che utilizzano le più recenti 1000 numeri come un campione di dati galleggiante. Qual è il modo più semplice per raggiungere questo obiettivo ho sperimentato con l'utilizzo di un array circolare, media mobile esponenziale e una più semplice media mobile e ha scoperto che i risultati dalla matrice circolare adatta alle mie esigenze. chiesto 12 giugno 12 a 4:38 Se le vostre esigenze sono semplici, si potrebbe anche provare a utilizzare una media mobile esponenziale. In parole povere, si effettua una variabile di accumulatori, e come il codice sia in ogni campione, il codice aggiorna l'accumulatore con il nuovo valore. Si sceglie un alpha costante che è compreso tra 0 e 1, e calcolare questo: Hai solo bisogno di trovare un valore di alfa in cui l'effetto di un determinato campione dura solo per circa 1000 campioni. Hmm, Im non realmente sicuro che questo è adatto per voi, ora che Ive ha messo qui. Il problema è che 1000 è un piuttosto lunga finestra per una media mobile esponenziale Im non sicuro che ci sia un alfa che diffondere la media degli ultimi 1000 numeri, senza underflow nel calcolo in virgola mobile. Ma se si voleva una media più piccolo, come 30 numeri o giù di lì, questo è un modo molto semplice e veloce per farlo. risposto 12 giugno 12 alle 04:44 1 sul tuo post. La media mobile esponenziale può permettere l'alfa di essere variabile. Quindi, questo permette di essere utilizzato per calcolare le medie base dei tempi (ad esempio byte al secondo). Se il tempo dall'ultimo aggiornamento accumulatore è più di 1 secondo, si lascia alfa essere 1.0. In caso contrario, si può lasciare alfa essere (usecs dall'ultima update1000000). ndash JXH 12 giugno 12 alle 06:21 Fondamentalmente voglio monitorare la media mobile di un flusso continuo di un flusso di numeri in virgola che utilizzano le più recenti 1000 numeri come un campione di dati galleggiante. Si noti che il sotto aggiorna totale come elementi come addedreplaced, evitando i costi di O (N) attraversamento per calcolare la somma - necessario per la media - su richiesta. Total è fatto un parametro diverso da T a sostenere ad esempio con un lungo lungo quando per un totale di 1000 s lunga, un int per char s, o un doppio al totale galleggiante s. Questo è un po 'viziata in quel numsamples potrebbe andare oltre INTMAX - se vi interessa si potrebbe usare un unsigned long long. o utilizzare un membro di dati in più bool a registrare quando il contenitore viene prima riempita mentre numsamples ciclabili intorno l'array (migliore poi rinominato qualcosa di innocuo come pos). risposto 12 giugno 12 a 5:19 si parte dal presupposto che l'operatore quotvoid (campione T) quot è in realtà operatorltlt quotvoid (campione T) quot. ndash oPless 8 Giugno 14 a 11:52 oPless ahhh. ben individuato. in realtà volevo dire per essere operatore void) (campione T) (ma naturalmente si potrebbe usare qualsiasi notazione ti è piaciuto. Sarà risolvere, grazie. ndash Tony D 8-giu-14 a 14: 27Weighted medie mobili: Le basi Nel corso degli anni, i tecnici hanno trovato due problemi con la media mobile semplice. Il primo problema è il lasso di tempo della media mobile (MA). La maggior parte degli analisti tecnici ritengono che l'azione dei prezzi. l'apertura o la chiusura del prezzo delle azioni, non è sufficiente su cui dipendere per prevedere correttamente i segnali di acquisto o vendita delle azioni di crossover MAs. Per risolvere questo problema, gli analisti ora assegnare più peso ai dati relativi ai prezzi più recenti utilizzando la media mobile esponenziale livellata (EMA). (Per saperne di più nell'esplorazione esponenziale Pesato media mobile.) Un esempio per esempio, utilizzando un 10-giorni MA, un analista avrebbe preso il prezzo del 10 ° giorno di chiusura e moltiplicare questo numero per 10, il nono giorno per le nove, l'ottavo giorno per otto e così via alla prima della MA. Una volta che il totale è stato determinato, l'analista poi dividere il numero per l'aggiunta dei moltiplicatori. Se si aggiungono i moltiplicatori del 10-day MA esempio, il numero è 55. Questo indicatore è conosciuta come la media mobile linearmente ponderata. (Per la lettura correlata, controllare semplici medie mobili Fai Trends distinguersi.) Molti tecnici sono convinti sostenitori del esponenzialmente lisciato media mobile (EMA). Questo indicatore è stato spiegato in tanti modi diversi che confonde gli studenti e degli investitori. Forse la migliore spiegazione viene da John J. Murphys: Analisi tecnica dei mercati finanziari, (pubblicato dal New York Institute of Finance, 1999): Il modo esponenziale lisciato movimento indirizzi medi sia dei problemi connessi con la media mobile semplice. Innanzitutto, la media esponenziale livellata assegna un peso maggiore ai dati più recenti. Pertanto, è una media mobile ponderata. Ma mentre assegna minore importanza ai dati dei prezzi passati, esso include nel suo calcolo tutti i dati nella vita dello strumento. Inoltre, l'utente può regolare il coefficiente di dare maggiore o minore peso al più recente prezzo giorni, che viene aggiunta ad una percentuale del valore giorni precedente. La somma dei due valori percentuali aggiunge fino a 100. Per esempio, l'ultimo giorni prezzo potrebbe essere assegnato un peso di 10 (.10), che viene aggiunto al giorno precedente peso di 90 (.90). Questo dà l'ultimo giorno 10 del peso totale. Questo sarebbe l'equivalente di una media di 20 giorni, dando l'ultimo giorni prezzo un valore inferiore di 5 (.05). Figura 1: esponenziale Smoothed media mobile È possibile che questo grafico mostra il Nasdaq Composite Index dalla prima settimana di agosto 2000 al 1 ° giugno 2001. Come si può vedere chiaramente, l'EMA, che in questo caso utilizza i dati relativi ai prezzi di chiusura nel corso di un periodo di nove giorni, ha segnali di vendita precisi sul 8 settembre (contrassegnato da un nero freccia verso il basso). Questo era il giorno in cui l'indice rotto sotto il livello 4.000. La seconda freccia nera indica un'altra tappa verso il basso che i tecnici sono stati effettivamente aspettavano. Il Nasdaq non ha potuto generare abbastanza volume e interesse da parte degli investitori al dettaglio per rompere il marchio 3.000. E poi tuffò di nuovo a toccare il fondo a 1619,58 su aprile 4. La fase di rialzo del 12 aprile è contrassegnato da una freccia. Qui l'indice ha chiuso a 1,961.46, e tecnici ha cominciato a vedere i gestori di fondi istituzionali che iniziano a prendere alcuni affari come Cisco, Microsoft e alcuni dei problemi legati all'energia. (Leggi i nostri articoli correlati: Moving Buste media: Raffinazione uno strumento popolare Trading and Moving Average di rimbalzo.) L'articolo 50 è una clausola nel trattato sull'Unione europea che delinea le fasi di un paese membro deve adottare per lasciare l'Unione europea. Gran Bretagna. Beta è una misura della volatilità o rischio sistematico, di sicurezza o di un portafoglio rispetto al mercato nel suo complesso. Un tipo di imposta riscossa sulle plusvalenze sostenute da individui e aziende. Le plusvalenze sono i profitti che un investitore. Un ordine per l'acquisto di un titolo pari o inferiore a un determinato prezzo. Un ordine di acquisto limite consente agli operatori e agli investitori di specificare. Un Internal Revenue Service (IRS) regola che consente per i prelievi senza penalità da un account IRA. La regola richiede that. What039s la differenza tra media mobile e ponderata media mobile A 5-periodo media mobile, sulla base dei prezzi di cui sopra, sarebbe calcolato utilizzando la seguente formula: In base alla suddetta equazione, il prezzo medio nel periodo sopra elencati era 90.66. Utilizzando medie mobili è un metodo efficace per l'eliminazione di forti fluttuazioni dei prezzi. La limitazione chiave è che i punti dati dai dati precedenti non sono ponderati in modo diverso rispetto ai dati punti vicino l'inizio del set di dati. Questo è dove le medie mobili ponderate entrano in gioco. medie ponderate assegnare una ponderazione più pesante a più punti di dati attuali dal momento che sono più rilevanti di punti dati in un lontano passato. La somma della ponderazione deve aggiungere fino a 1 (o 100). Nel caso della media mobile semplice, i coefficienti sono equamente distribuiti, ed è per questo che non sono riportati nella tabella sopra riportata. Prezzo di chiusura di AAPL

Comments

Popular posts from this blog

Sud African Binary Opzione Mediatori

Daily Grafici Forex Trading Off Per Rifugio

Moving Media Filtro Gain