Moving Media Semplice Code


MetaTrader 4 - Gli esperti media mobile - esperto per MetaTrader 4 Il Moving Average esperto per la formazione di segnali di commercio utilizza una media mobile. Apertura e chiusura di posizioni vengono eseguiti quando la media mobile incontra il prezzo al bar di recente formazione (indice bar è uguale a 1). Il lotto verrà ottimizzato secondo un particolare algoritmo. Il consulente esperto analizza concorso della media mobile e il grafico dei prezzi di mercato. Il controllo viene eseguito dalla funzione CheckForOpen (). Se la media mobile incontra la barra in modo tale che il primo è superiore al prezzo aperta ma inferiore Chiudi prezzo, si apre la posizione di acquisto. Se la media mobile incontra la barra in modo tale che il primo è inferiore al prezzo aperta ma superiore Chiudi prezzo, verrà aperta la posizione SELL. Money Management utilizzato nella esperto è molto semplice, ma efficace: il controllo su ogni volume posizione viene eseguita a seconda delle operazioni precedenti risultati. Questo algoritmo è implementato dalla funzione LotsOptimized (). Le dimensioni di base molto è calcolata sulla base del rischio massimo ammissibile: Il parametro MaximumRisk visualizza la percentuale di rischio di base per ogni transazione. Di solito possiede un valore compreso tra 0,01 (1) e 1 (100). Ad esempio, se il margine libero (AccountFreeMargin) è uguale a 20.500 e le regole di gestione del capitale prescrive di usare rischio di 2, le dimensioni di base molto farà 20500 0,02 1.000 0,41. E 'molto importante controllare il accuratezza dimensione del lotto e per normalizzare il risultato con i valori consentiti. Normalmente, un sacco frazionari con passo di 0,1 sono ammessi. Una transazione avente volume di 0.41 non verrà eseguita. Per normalizzare la funzione NormalizeDouble () viene usato con precisione fino a 1 carattere dopo il punto. Ciò comporta il sacco base di 0,4. Il calcolo sacco di base sulla base del margine libero permette di aumentare dei volumi di funzionamento a seconda di trading successo riscosso, cioè al commercio con reinvestire. Questo è il meccanismo di base con la gestione del capitale obbligatorio per aumentare del trading effetiveness. DecreaseFactor è la misura in cui la dimensione del lotto sarà ridotto dopo il commercio non redditizie. I valori normali sono 2,3,4,5. Se le transazioni precedenti erano inutili, i volumi successivi diminuirà di un fattore di DecreaseFactor al fine di attendere per tutto il periodo non redditizie. Questo è il fattore principale nella algoritmo di gestione del capitale. L'idea è molto semplice: se il commercio è in aumento con successo, l'esperto lavora con il lotto di base facendo il massimo profitto. Dopo la prima operazione inutile, l'esperto ridurrà la velocità fino a quando viene effettuata una nuova transazione positiva. L'algoritmo permette di disabilitare la riduzione della velocità, per farlo, si deve specificare DecreaseFactor 0. L'ammontare degli ultimi successive operazioni redditizie è calcolato nella storia del commercio. Il lotto base sarà ricalcolato su questa base: Così, l'algoritmo permette di ridurre efficacemente il rischio che si verificano a seguito di una serie di dimensioni transactions. The lotto inutile è obbligatoriamente controllato per la dimensione minima consentita lotto al fine della funzione perché i calcoli effettuati in precedenza possono causare molto 0: l'esperto è destinato principalmente per lavorare con periodo giornaliero, e in modalità di test - per fare a prezzi vicini. Sarà solo il commercio in apertura di un nuovo bar, che è il motivo per cui non sono necessari i modi di ogni tick-modellazione. risultati dei test sono rappresentati nel report. I che 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 giugno 14 a 14: 27How codificare una media mobile semplice come codificare un mobile semplice Ciao questo è MaximumBarsLookBack auguri Grazie medio per gli informazioni. Ho provato diverse impostazioni, anche cambiato la formula ricorsiva. Finalmente ho trovato il vero problema: Gli indicatori ricorsive unico lavoro, se si modificano le impostazioni predefinite per MaximumBarsLookBack. Infinite. Quindi, tutti gli indicatori con formule ricorsive hanno bisogno di utilizzare questa impostazione. Questo dimostra ancora una volta il problema di NinjaTrader. Perché NT 7 è ancora un maiale di memoria rispetto a Multicharts. sviluppatori hanno cercato di ridurre il carico di memoria. risultati corretti sono stati sacrificati per ridurre l'utilizzo della memoria. Per ogni indicatore che utilizza una formula ricorsiva si avrebbe bisogno di modificare il codice indicatore e aggiungere la riga nella sezione di inizializzazione dell'indicatore. Questo vale anche per SMA e EMA. Una volta che il cambiamento è fatto, NinjaTrader userà più memoria, ma i risultati saranno correct. I vogliono sviluppare calcolo per prezzo delle azioni media mobile. Ma molto calcolo complesso è stato progettato in seguito. Il mio primo passo per sapere come calcolare media mobile in modo efficiente. Ho bisogno di sapere come prendere l'input e restituire in modo efficiente in uscita. ponderato di input data e prezzo. consudered Data di uscita, prezzo e media mobile. Se ho 500 record e voglio calcolare la media Moving per 5 giorni qual è il modo effient invece di andare avanti e indietro nella matrice di data e prezzo ancora una volta si prega di sugest qual è il modo migliore per ricevere input (ArrayList, Tavolo, serie ecc) e ritorno in uscita. Nota: Todays MA di 5 giorni sarà media degli ultimi 5 giorni compreso il prezzo di oggi. Ieri MA sarà media degli ultimi 5 giorni di ieri. Voglio mantenere i giorni per essere flessibile, invece di 5 potrebbe essere 9, 14, 20 ecc Giovedi, 10 mese di aprile 2008 3.21 pm Se avete bisogno di semplice calcolo senza il vostro sforzo che è possibile utilizzare TA-Lib. Ma se si desidera che il calcolo sia più efficiente di TA-Lib, quindi è possibile creare il proprio indicatore tecnico. TA-Lib è grande, ma problema è che questa biblioteca hanno solo metodi statici. Ciò significa che quando hai bisogno di calcolare i valori di matrice SMA sulla base di 500 barre di prezzo, allora si avrà inviare l'intera gamma di bar e tornerà array di valori SMA. Ma se si riceve nuovo valore 501-st allora si dovrebbe inviare di nuovo l'intero array e di nuovo TA-Lib calcolerà e tornare SMA array di valori. Ora immaginate avete bisogno di tale indicatore alimentazione prezzo reale, e per ogni variazione di prezzo è necessario nuovo valore dell'indicatore. Se si dispone di un indicatore non è un grosso problema, ma se si dispone di indicatori di centinaia di lavoro, potrebbe essere un problema di prestazioni. Ero in una situazione del genere e iniziare a sviluppare indicatori in tempo reale che siano efficienti e fare calcoli aggiuntivi per nuova barra di prezzo o per soltanto barra di prezzo cambiato. Purtroppo ho mai avuto bisogno indicatore SMA per i miei sistemi di trading, ma ho come per EMA, WMA, AD, e altri. Uno di questi indicatori AD è pubblicato sul mio blog e si può vedere da lì quello che è la struttura di base della mia classe indicatore in tempo reale. Spero che sarà necessario piccole modifiche per implementare l'indicatore SMA, perché è uno dei più semplice. La logica è semplice. Per calcolare SMA tutto ciò che serve è n ultimi valori di prezzo. Così istanza di classe avrà la raccolta dei prezzi, che memorizzerà mantenere solo il numero n ultimo dei prezzi, come SMA è definito (nel tuo caso 5). Così, quando si dispone di nuova barra, verrà rimosso più antica e aggiungere uno nuovo e creare il calcolo. Giovedi, 10 mese di aprile, 2008 16:04 Tutte le risposte C'è una libreria chiamata TA-Lib, che fa tutto questo per te, ed è open source. Ha circa 50 indicatori credo. Weve utilizzato in ambiente di produzione ed è molto efficiente e realible. Si può usare in C, Java, C, ecc Se avete bisogno di semplice calcolo senza il vostro sforzo che è possibile utilizzare TA-Lib. Ma se si desidera che il calcolo sia più efficiente di TA-Lib, quindi è possibile creare il proprio indicatore tecnico. TA-Lib è grande, ma problema è che questa biblioteca hanno solo metodi statici. Ciò significa che quando hai bisogno di calcolare i valori di matrice SMA sulla base di 500 barre di prezzo, allora si avrà inviare l'intera gamma di bar e tornerà array di valori SMA. Ma se si riceve nuovo valore 501-st allora si dovrebbe inviare di nuovo l'intero array e di nuovo TA-Lib calcolerà e tornare SMA array di valori. Ora immaginate avete bisogno di tale indicatore alimentazione prezzo reale, e per ogni variazione di prezzo è necessario nuovo valore dell'indicatore. Se si dispone di un indicatore non è un grosso problema, ma se si dispone di indicatori di centinaia di lavoro, potrebbe essere un problema di prestazioni. Ero in una situazione del genere e iniziare a sviluppare indicatori in tempo reale che siano efficienti e fare calcoli aggiuntivi per nuova barra di prezzo o per soltanto barra di prezzo cambiato. Purtroppo ho mai avuto bisogno indicatore SMA per i miei sistemi di trading, ma ho come per EMA, WMA, AD, e altri. Uno di questi indicatori AD è pubblicato sul mio blog e si può vedere da lì quello che è la struttura di base della mia classe indicatore in tempo reale. Spero che sarà necessario piccole modifiche per implementare l'indicatore SMA, perché è uno dei più semplice. La logica è semplice. Per calcolare SMA tutto ciò che serve è n ultimi valori di prezzo. Così istanza di classe avrà la raccolta dei prezzi, che memorizzerà mantenere solo il numero n ultimo dei prezzi, come SMA è definito (nel tuo caso 5). Così, quando si dispone di nuova barra, verrà rimosso più antica e aggiungere uno nuovo e creare il calcolo. Giovedi, 10 mese di aprile, 2008 16:04 mi avrebbe calcolare la media mobile nel database tramite una stored procedure o in un cubo. Hai guardato Analysis Services, ha la capacità di calcolare le medie mobili. Giovedi, 10 mese di aprile, 2008 16:05 Sì. TA-LIB è buona, ma potrebbe non essere adatto per me. Quando aggiungo nuovo valore o valore aggiornato per la storia del record farò il calcolo in una funzione separata solo per quella nuova preventivo e memorizzarlo nel database. Ho in programma di aggiornare la citazione ogni ora. Ho bisogno di fare circa 25 a 30 indicatori tecnici per 2200 titoli. Giovedi, 10 mese di aprile 2008 5.51 pm ora di esecuzione di una chiamata TA-Lib su una serie di 10000 elementi dura circa 15 millisecondi (su un processore Intel Core Duo 2.13 GHz). Questa è la media di tutte le funzioni. Tra i più veloci, SMA richiede meno di 2,5 millisecondi. Il più lento, HTTRENDMODE, prende 450 millisecondi. Con meno elementi è più veloce. SMA è di circa 0,22 millisecondi per 1000 elementi di input. Il guadagno di velocità è quasi lineare (l'overhead di effettuare la chiamata di funzione è trascurabile). Nel contesto dell'applicazione, TA-Lib è molto improbabile che sia il collo di bottiglia per le prestazioni di velocità. Anche io in genere non consiglio tale soluzione nquot quotlast. Leggi qui sotto per i dettagli. In primo luogo, una correzione alla dichiarazione Boban. s Tutte le funzioni di TA-Lib può anche calcolare un singolo ultimo valore utilizzando un minimo di elementi nquot quotlast. Si può avere una vasta gamma di dimensioni 10000, hanno dati inizializza solo per i primi 500 elementi, aggiungere un elemento e chiamare TA-Lib per calcolare la SMA solo per il nuovo elemento. TA-Lib sarà guardare indietro non più del necessario (se SMA di 5, poi TA-Lib calcolerà un singolo SMA utilizzando gli ultimi 5 valori). Questo è reso possibile con il parametro startIdx e endIdx. È possibile specificare un intervallo di calcolare, o un singolo valore. In questo scenario si dovrebbe fare startIdx endIdx 500 per calcolare l'elemento 501. Perché tale soluzione quotlast nquot potenzialmente pericoloso per alcuni Indipendentemente selezionando soluzione Boban. s o TA-Lib ritengono che utilizzando un piccolo numero finito di dati passati non funzionerà bene con la maggior parte delle funzioni TA. Con SMA, è ovvio che basta elemento n di calcolare una media sopra elemento n. Non è così semplice con EMA (e molte altre funzioni TA). Il Algo spesso dipende dal valore precedente per calcolare il nuovo valore. La funzione è ricorsiva. Ciò significa che tutti i passati valori hanno un'influenza sui valori futuri. Se si decide di quotlimitquot tuo algo di utilizzare solo una piccola quantità di valore n passato, non sarà possibile ottenere lo stesso risultato come qualcuno che calcola su un gran numero di valori del passato. La soluzione è un compromesso tra velocità e precisione. Ho spesso discutere di questo nel contesto di TA-Lib (io lo chiamo il periodquot quotunstable nella documentazione e forum). Per farla semplice, la mia raccomandazione generale è se non potete fare la differenza tra un algo con una risposta all'impulso finita (FIR) da un algo con una risposta infinita di impulso (IIR), sarà più sicuro per calcolare su tutti i dati che avete a disposizione. TA-Lib specificare nel codice che delle sue funzioni hanno un periodo di instabilità (IIR). A cura di mfortier Venerdì 15 agosto 2008 04:25 frase corretta inglese Venerdì 15 agosto 2008 04:20

Comments