Ek wil berekening vir aandele prys bewegende gemiddelde ontwikkel. Maar baie komplekse berekeninge het later beplan. My eerste stap om te weet hoe om te bereken bewegende gemiddelde doeltreffend. Ek moet weet hoe om die insette te neem en uitvoer doeltreffend terugkeer. deurdagte insette Datum en prys. consudered uitset Datum, Prys en bewegende gemiddelde. As ek 500 rekords en ek wil Moving gemiddelde te bereken vir 5 dae wat die effient manier in plaas van heen en weer in die skikking van Datum en prys gaan weer asseblief suggereert wat is die beste manier om insette (Array List, Table, verskeidenheid ontvang ens) en terug te keer uitset. Nota: Vandag se MA van 5 dae sal gemiddeld van Laaste 5 Dae insluitend vandag prys. Gister MA sal gemiddeld van laaste 5 dae van gister wees. Ek wil die dae hou buigsaam in plaas van 5 te wees dit kan 9, 14, 20 wees ens Donderdag, April 10, 2008 15:21 As jy eenvoudige berekening moet sonder jou moeite as jy TA-Lib kan gebruik. Maar as jy wil hê dat jou berekening om meer doeltreffend as TA-Lib wees, dan kan jy jou eie tegniese aanwyser skep. TA-Lib is groot, maar die probleem is dat hierdie biblioteek het net statiese metodes. Dit beteken dat wanneer jy dit nodig om SMA verskeidenheid waardes te bereken gebaseer op 500 prys bars, dan sal jy die hele spektrum van bars stuur en dit sal n verskeidenheid van SMA waardes terugkeer. Maar as jy 'n nuwe 501-ste waarde ontvang dan moet jy weer stuur die hele reeks en TA-Lib sal weer bereken en terugkeer SMA verskeidenheid van waardes. Nou dink jy so aanwyser op werklike prys voer nodig het, en vir elke prysverandering jy nuwe aanwyser waarde nodig het. As jy een het aanwyser is nie 'n groot probleem, maar as jy honderde aanwysers werk, kan dit 'n prestasie probleem wees. Ek was in so 'n situasie en begin met die ontwikkeling realtime aanwysers wat doeltreffende is en om addisionele berekeninge vir nuwe prys bar of slegs veranderde prys bar. Unfortunatelly ek nooit SMA aanwyser wat nodig is vir my handel stelsels, maar ek het so vir EMO, WMA, AD, en ander. Een so 'n aanwyser nC gepubliseer op my blog en jy kan sien van daar af wat is die basiese struktuur van my realtime aanwyser klas. Ek hoop jy sal klein veranderinge moet implementeer SMA aanwyser, want een van die eenvoudigste een. Die logika is eenvoudig. Om SMA bereken alles wat jy nodig het is 'n laaste prys waardes. So klas geval sal versameling van pryse, wat sal slaan hou net verlede N aantal pryse as SMA gedefinieer (in jou geval 5) het. So wanneer jy 'n nuwe bar, jy sal oudste een verwyder en voeg nuwe een en skep berekening. Donderdag, 10 April, 2008 16:04 Alle antwoorde Daar is 'n biblioteek genoem TA-Lib dat alles wat vir jou doen en dit is open source. Dit het sowat 50 aanwysers ek dink. Weve gebruik dit in produksie-omgewing en dit is baie effektief en realible. Jy kan dit gebruik in C, Java, C, ens As jy eenvoudige berekening moet sonder jou moeite as wat jy TA-Lib kan gebruik. Maar as jy wil hê dat jou berekening om meer doeltreffend as TA-Lib wees, dan kan jy jou eie tegniese aanwyser skep. TA-Lib is groot, maar die probleem is dat hierdie biblioteek het net statiese metodes. Dit beteken dat wanneer jy dit nodig om SMA verskeidenheid waardes te bereken gebaseer op 500 prys bars, dan sal jy die hele spektrum van bars stuur en dit sal n verskeidenheid van SMA waardes terugkeer. Maar as jy 'n nuwe 501-ste waarde ontvang dan moet jy weer stuur die hele reeks en TA-Lib sal weer bereken en terugkeer SMA verskeidenheid van waardes. Nou dink jy so aanwyser op werklike prys voer nodig het, en vir elke prysverandering jy nuwe aanwyser waarde nodig het. As jy een het aanwyser is nie 'n groot probleem, maar as jy honderde aanwysers werk, kan dit 'n prestasie probleem wees. Ek was in so 'n situasie en begin met die ontwikkeling realtime aanwysers wat doeltreffende is en om addisionele berekeninge vir nuwe prys bar of slegs veranderde prys bar. Unfortunatelly ek nooit SMA aanwyser wat nodig is vir my handel stelsels, maar ek het so vir EMO, WMA, AD, en ander. Een so 'n aanwyser nC gepubliseer op my blog en jy kan sien van daar af wat is die basiese struktuur van my realtime aanwyser klas. Ek hoop jy sal klein veranderinge moet implementeer SMA aanwyser, want een van die eenvoudigste een. Die logika is eenvoudig. Om SMA bereken alles wat jy nodig het is 'n laaste prys waardes. So klas geval sal versameling van pryse, wat sal slaan hou net verlede N aantal pryse as SMA gedefinieer (in jou geval 5) het. So wanneer jy 'n nuwe bar, jy sal oudste een verwyder en voeg nuwe een en skep berekening. Donderdag, 10 April, 2008 16:04 Ek sou die bewegende gemiddelde in die databasis bereken deur 'n gestoor proses of in 'n kubus. Het jy al gekyk na Analysis Services, dit het die vermoë om bewegende gemiddeldes te bereken. Donderdag, 10 April, 2008 04:05 Ja. TA-LIB is goed, maar kan nie geskik wees vir my. Toe ek nuwe waarde of opgedateer waarde toe te voeg vir die geskiedenis van rekords sal ek die berekening in 'n aparte funksie doen net vir daardie nuwe kwotasie en bêre dit in die databasis. Ek is van plan om die kwotasie te werk elke uur. Ek nodig het om te doen oor 25 tot 30 tegniese aanwysers vir 2200 aandele. Donderdag, 10 April, 2008 17:51 Uitvoering tyd van 'n TA-Lib oproep op 'n verskeidenheid van 10000 elemente duur ongeveer 15 millisekondes (op 'n Intel Core Duo 2.13 Ghz). Dit is die gemiddeld van al die funksies. Onder die vinnigste, SMA neem minder as 2,5 millisekondes. Die stadigste, HTTRENDMODE, neem 450 millisekondes. Met minder elemente is dit vinniger. SMA duur ongeveer 0,22 millisekondes vir 1000 insette elemente. Die spoed gewin is byna lineêre (die oorhoofse van die funksie oproep is weglaatbaar). In die konteks van jou aansoek, TA-Lib is baie onwaarskynlik dat jou bottelnek vir spoed prestasie wees. Ook het ek oor die algemeen nie so quotlast nquot oplossing beveel. Lees hieronder vir meer inligting. In die eerste plek 'n regstelling te Boban. s verklaring Alle funksies in TA-Lib kan ook 'n enkele laaste waarde te bereken deur die gebruik van 'n minimum van quotlast nquot elemente. Jy kan 'n verskeidenheid van grootte 10000 het, het data inisialiseer net vir die eerste 500 elemente, voeg 'n element en noem TA-Lib om die SMA bereken slegs vir die nuwe element. TA-Lib sal agtertoe nie meer as wat nodig is kyk (as SMA van 5, dan TA-Lib sal 'n enkele SMA met behulp van die afgelope 5 waardes te bereken). Dit word moontlik gemaak met die parameter startIdx en endIdx. Jy kan spesifiseer 'n reeks te bereken, of 'n enkele waarde. In hierdie scenario sal jy startIdx endIdx 500 maak om die 501 element te bereken. Hoekom is so quotlast nquot oplossing potensieel gevaarlik vir 'n paar Ongeag kies Boban. s oplossing of TA-Lib van mening dat die gebruik van 'n klein beperkte aantal afgelope data gewoond goed te werk met die meeste TA funksies. Met SMA, is dit duidelik dat jy hoef net n element om 'n gemiddelde oor N element te bereken. Dit is nie so eenvoudig met EMO (en baie ander TA funksies). Die algo dikwels afhang van die vorige waarde aan die nuwe waarde te bereken. Die funksie is rekursiewe. Dit beteken dat al die afgelope waardes het 'n invloed op toekomstige waardes. As jy besluit om jou algo quotlimitquot om slegs 'n klein hoeveelheid van die afgelope N waarde gebruik, sal jy nie dieselfde resultaat as iemand wat oor 'n groot aantal van die verlede waardes bereken kry. Die oplossing is 'n kompromie tussen spoed en akkuraatheid. Ek het al dikwels bespreek dit in die konteks van TA-Lib (Ek noem dit die quotunstable periodquot in die dokumentasie en forum). Om dit eenvoudig te hou, my algemene Aanbeveling is as jy die verskil tussen 'n algo cant maak met 'n eindige impulsrespons (FIR) van 'n algo met 'n oneindige impulsrespons (IIR), jy sal veiliger wees om te bereken oor al die inligting wat jy het beskikbaar. TA-Lib spesifiseer in die kode wat van sy werksaamhede het 'n onstabiele tydperk (IIR). Geredigeer deur mfortier Vrydag, 15 Augustus, 2008 04:25 korrekte Engelse sin Vrydag, 15 Augustus, 2008 04:20 AMMoving Gemiddeld - MA afbreek bewegende gemiddelde - MA As SMA voorbeeld, kyk na 'n sekuriteit met die volgende sluitingsdatum pryse meer as 15 dae: Week 1 (5 dae) 20, 22, 24, 25, 23 Week 2 (5 dae) 26, 28, 26, 29, 27 Week 3 (5 dae) 28, 30, 27, 29, 28 A 10 dag MA sou gemiddeld uit die sluitingsdatum pryse vir die eerste 10 dae as die eerste data punt. Die volgende data punt sal daal die vroegste prys, voeg die prys op dag 11 en neem die gemiddelde, en so aan, soos hieronder getoon. Soos voorheen verduidelik, MA lag huidige prys aksie omdat dit gebaseer is op vorige pryse hoe langer die tydperk vir die MA, hoe groter is die lag. So sal 'n 200-dag MA 'n veel groter mate van lag as 'n 20-dag MA het omdat dit pryse vir die afgelope 200 dae bevat. Die lengte van die MA om te gebruik, hang af van die handel doelwitte, met korter MA gebruik vir 'n kort termyn handel en langer termyn MA meer geskik vir 'n lang termyn beleggers. Die 200-dag MA word wyd gevolg deur beleggers en handelaars, met onderbrekings bo en onder hierdie bewegende gemiddelde beskou as belangrike handel seine wees. MA ook mee belangrik handel seine op hul eie, of wanneer twee gemiddeldes kruis. 'N stygende MA dui daarop dat die sekuriteit is in 'n uptrend. terwyl 'n dalende MA dui daarop dat dit in 'n verslechtering neiging. Net so, is opwaartse momentum bevestig met 'n lomp crossover. wat gebeur wanneer 'n korttermyn-MA kruisies bo 'n langer termyn MA. Afwaartse momentum bevestig met 'n lomp crossover, wat plaasvind wanneer 'n kort termyn MA kruisies onder 'n langer termyn MA. Im nie certainn van die korrekte oplossing al sedert die WHALM gemiddeld van elke monster sou 'n billike bedrag van afronding fout te stel. Hmm. Ek wonder of verskil tussen Dobby die breukdeel van die hele gedeelte sal help. Verdeel die hele deel van elke getal met die telling. Hou drie hardloop somme: 1) Die gemiddelde van die hele dele, 2) Die res van elke afdeling, en 3) Die breukdeel van elke nommer. Elke keer as die hele deel van 'n aantal verdeeld is, word die hele deel gevolg by die gemiddelde hardloop som en die res word bygevoeg om die res loop som. Wanneer die res loop som verkry 'n waarde groter as of gelyk aan die telling, sy gedeel deur die telling met die hele deel gevolg by die gemiddelde hardloop som en die res by die res loop som. Ook by elke berekening, die breukdeel word by die fraksionele hardloop som. Wanneer die gemiddelde klaar is, is die res loop som gedeel deur die telling en die gevolg is bygevoeg om die gemiddelde hardloop bedrag as 'n drywende nommer. Byvoorbeeld: Nou wat om te doen met die fraksionele hardloop som. Die gevaar van oorloop is baie minder geneig hier, al is steeds moontlik, so 'n manier om dit te hanteer sou wees om die fraksionele hardloop som deur die telling te verdeel aan die einde en voeg dit by ons gevolg: 'n alternatief sou wees om die fraksionele loop kyk som op elke berekening om te sien of dit is groter as of gelyk aan tel. Wanneer dit gebeur, net doen dieselfde ding wat ons doen met die res loop som. Uitstekende Jomit Vaghela 6-Maart-07 20:00 ek hou van wat jy gesê het klein werk vinnig draai in 'n groot werk. Dink van optimalisering terwyl kodering is 'n goeie praktyk. Groot moeite en verduideliking, gemiddeldes / Eenvoudige bewegende gemiddelde Gemiddeldes / Eenvoudige bewegende gemiddelde U word aangemoedig om hierdie taak op te los volgens die taakbeskrywing, die gebruik van enige taal wat jy kan weet. Berekening van die eenvoudige bewegende gemiddelde van 'n reeks van getalle. Skep 'n Stateful funksie / klas / instansie wat 'n tydperk neem en gee 'n roetine dat 'n aantal neem as argument en gee 'n eenvoudige bewegende gemiddelde van sy argumente tot dusver. 'N Eenvoudige bewegende gemiddelde is 'n metode vir die berekening van 'n gemiddelde van 'n stroom van getalle met slegs gemiddeld die afgelope 160 P 160 nommers van die stroom, 160 waar 160 P 160 is bekend as die tydperk. Dit kan toegepas word deur die roeping van 'n parafering roetine met 160 P 160 as argument, 160 I (P), 160 wat dan 'n roetine dat wanneer geroep met individuele, opeenvolgende lede van 'n stroom van getalle, bere die gemiddelde van sou terugkeer (up om), die laaste 160 P 160 van hulle, kan noem dit 160 SMA (). Die woord 160 Stateful 160 in die taak beskrywing verwys na die behoefte aan 160 SMA () 160 om sekere inligting tussen oproepe onthou om dit: 160 Die tydperk, 160 P 160 N bestel houer van ten minste die laaste 160 P 160 nommers uit elk van sy individuele oproepe. Stateful 160 beteken ook dat opeenvolgende oproepe na 160 I (), 160 die initializer, 160 moet afsonderlike roetines wat doen 160 nie 160 aandele gered staat sodat hulle kan gebruik word op twee onafhanklike strome van data terugkeer. Pseudo-kode vir die implementering van 160 SMA 160 is: Hierdie weergawe maak gebruik van 'n aanhoudende tou om die mees onlangse p waardes hou. Elke funksie teruggekeer van init-bewegende-gemiddelde het sy toestand in 'n atoom met 'n tou waarde. Dit implementering gebruik 'n omsendbrief lys om die getalle binne die venster op te slaan aan die begin van elke iterasie wyser verwys na die lys sel wat hou die waarde net beweeg by die venster uit en vervang moet word met die net toegevoegde waarde. Met behulp van 'n afsluiting wysig Tans hierdie SMA cant nogc wees omdat dit 'n sluiting op die wal ken. Sommige ontsnapping analise kan die hoop toekenning te verwyder. Met behulp van 'n struct wysig Hierdie weergawe vermy die hoop toekenning van die sluiting behoud van die data in die stapel raamwerk van die hooffunksie. Dieselfde uitset: Om te verhoed dat die drywende punt benaderings hou opstapel en die groei, kan die kode 'n periodieke som uit te voer op die hele ronde tou skikking. Dit implementering produseer twee (funksie) voorwerpe deel staat. Dit is idiomatiese in E te skei insette van uitset (lees van skryf), eerder as om dit te kombineer in een voorwerp. Die struktuur is dieselfde as die implementering van Standard DeviationE. Die onderstaande elikser program genereer 'n anonieme funksie met 'n ingeboude tydperk p, wat gebruik word as die tydperk van die eenvoudige bewegende gemiddelde. Die aanloop funksie lees numeriese insette en gee dit aan die nuutgeskepte anonieme funksie, en dan inspekteer die resultaat te STDOUT. Die uitset word hieronder getoon, met die gemiddelde, gevolg deur die gegroepeer insette, wat die basis vorm van elke bewegende gemiddelde. Erlang het sluitings, maar onveranderlike veranderlikes. 'N Oplossing is dan om prosesse en 'n eenvoudige boodskap verby gebaseer API te gebruik. Matrix tale roetines om die sweef avarages vir 'n gegewe volgorde van items bereken. Dit is minder doeltreffend te loop as in die volgende opdragte. Voortdurend gevra vir 'n inset ek. wat by die einde van 'n lys T1. T1 kan gevind word deur te druk 2ND / 1, en gemiddelde kan gevind word in Lys / OPS druk op die program te beëindig. Funksie wat 'n lys met die gemiddeld data van die verskaf argument program wat 'n eenvoudige waarde terug by elke aanroeping terug: lys is die lys word gemiddeld: p is die tydperk: 5 opbrengste die gemiddeld lys: Voorbeeld 2: Die gebruik van die program movinav2 (i , 5) - Inisialiseer bewegende gemiddelde berekening, en definieer tydperk van 5 movinav2 (3, x): x - nuwe data in die lys (waarde 3), en gevolg sal word gestoor op veranderlike x, en vertoon movinav2 (4 x) : x - nuwe data (waarde 4), en die nuwe gevolg sal gestoor word op veranderlike x, en vertoon (43) / 2. Beskrywing van die funksie movinavg: veranderlike r - is die gevolg (die gemiddeld lys) wat veranderlike sal teruggestuur word ek - is die indeks veranderlike, en dit dui op die einde van die sub-lys die lys word gemiddeld. veranderlike Z - 'n helper veranderlike Die funksie gebruik wisselende ek om vas te stel watter waardes van die lys sal in die volgende gemiddelde berekening in ag geneem word. By elke iterasie, veranderlike i dui op die laaste waarde in die lys wat gebruik sal word in die gemiddelde berekening. So ons moet net om uit te vind wat die eerste waarde in die lys sal wees. Gewoonlik goed moet p elemente oorweeg, sodat die eerste element sal die een geïndekseer deur (i-P1) te wees. Maar op die eerste iterasies wat berekening gewoonlik negatief sal wees, sodat die volgende vergelyking negatiewe indekse sal vermy: max (i-p1,1) of, reël die vergelyking, Max (i-P, 0) 1. of, reël die vergelyking, (i - (Max (IP, 0) 1) 1), en dan - maar die nommer van elemente op die eerste iterasies sal ook kleiner wees, sal die korrekte waarde (begin indeks 1 einde indeks) wees , (i-Max (IP, 0)). Veranderlike Z hou die algemene waarde (maksimum (IP), 0) sodat die beginindex sal wees (Z1) en die numberofelements sal wees (iz) die middel (lys, Z1, iz) sal die lys van waarde wat sal gemiddeld som terugkeer ( .) sal hulle som som (.) / (iz) ri hulle sal gemiddeld en stoor die resultaat in die toepaslike plek in die lys gevolg behulp van 'n sluiting en die skep van 'n functionMoving Gemiddeld Tegniese aanwyser bewegende gemiddeldes Tegniese aanwyser toon die gemiddelde instrument prys waarde vir 'n sekere tydperk van die tyd. Wanneer 'n mens word bereken dat die bewegende gemiddelde, een gemiddeldes uit die instrument prys vir hierdie tydperk. As die prys veranderinge, sy bewegende gemiddelde óf verhoog, of verminder. Daar is vier verskillende tipes bewegende gemiddeldes: Eenvoudige (ook na verwys as Rekenkundige). Eksponensiële. Reëlmatige en Lineêre Geweegde. Bewegende gemiddeldes kan bereken word vir enige opeenvolgende datastel, insluitend die opening en sluiting pryse, hoogste en laagste pryse, handel volume of enige ander aanwysers. Dit is dikwels die geval wanneer dubbel bewegende gemiddeldes gebruik. Die enigste ding wat waar bewegende gemiddeldes van verskillende tipes divergeer aansienlik van mekaar, is wanneer gewig koëffisiënte, wat die jongste data is opgedra, is anders. In geval praat ons van 'n eenvoudige bewegende gemiddelde, alle pryse van die tydperk ter sprake, is gelyk in waarde. Eksponensiële en Lineêre Geweegde bewegende gemiddeldes heg meer waarde aan die nuutste pryse. Die mees algemene manier om die interpretasie van die prys bewegende gemiddelde is om sy dinamika vergelyk met die prys aksie. Wanneer die instrument prys bo sy bewegende gemiddelde styg, blyk 'n koopsein, indien die prys val onder sy bewegende gemiddelde, wat ons het, is 'n sell sein. Dit handel stelsel, wat gebaseer is op die bewegende gemiddelde, is nie ontwerp om toegang tot die mark te voorsien reg in sy laagste punt, en sy uitgang regs op die piek. Dit maak dit moontlik om op te tree volgens die volgende tendens: te koop kort nadat die pryse die bodem bereik, en om gou te verkoop nadat die pryse hul hoogtepunt bereik het. Bewegende gemiddeldes kan ook toegepas word op aanwysers. Dit is hier waar die interpretasie van aanwyser bewegende gemiddeldes is soortgelyk aan die interpretasie van die prys bewegende gemiddeldes: As die aanwyser styg bo sy bewegende gemiddelde, wat beteken dat die stygende aanwyser beweging is waarskynlik om voort te gaan: as die aanwyser val onder sy bewegende gemiddelde, hierdie beteken dat dit waarskynlik om voort te gaan gaan afwaarts. Hier is die tipes bewegende gemiddeldes op die grafiek: Eenvoudige bewegende gemiddelde (SMA) Eksponensiële bewegende gemiddelde (EMA) Reëlmatige bewegende gemiddelde (SMMA) Lineêre Geweegde bewegende gemiddelde (LWMA) Berekening: Eenvoudige bewegende gemiddelde (SMA) Eenvoudige, met ander woorde, rekenkundige bewegende gemiddelde word bereken deur 'n opsomming van die pryse van sluiting instrument oor 'n sekere aantal enkele periodes (byvoorbeeld 12 uur). Hierdie waarde word dan gedeel deur die getal van sodanige tydperke. Waar: N is die aantal periodes berekening. Eksponensiële bewegende gemiddelde (EMA) eksponensieel stryk bewegende gemiddelde word bereken deur die bewegende gemiddelde van 'n sekere deel van die huidige sluitingsprys op die vorige waarde. Met eksponensieel stryk bewegende gemiddeldes, die jongste pryse is meer werd. P-persent eksponensiële bewegende gemiddelde sal lyk: Waar: BESLOTE (i) die prys van die huidige tydperk sluiting EMO (i-1) eksponensieel bewegende gemiddelde van die vorige tydperk sluiting P die persentasie van die gebruik van die prys waarde. Reëlmatige bewegende gemiddelde (SMMA) Die eerste waarde van hierdie stryk bewegende gemiddelde word bereken as die eenvoudige bewegende gemiddelde (SMA): Die tweede en daaropvolgende bewegende gemiddeldes word bereken volgens die formule: Waar: sum1 is die totale bedrag van die sluiting van pryse vir N tydperke PREVSUM is die reëlmatige som van die vorige bar SMMA1 is die reëlmatige bewegende gemiddelde van die eerste bar SMMA (i) is die reëlmatige bewegende gemiddelde van die huidige bar (behalwe vir die eerste een) sluit (i) is die huidige sluitingsprys N is die smoothing tydperk. Lineêre geweegde bewegende gemiddelde (LWMA) In die geval van geweegde bewegende gemiddelde, die jongste data is meer werd as meer vroeë data. Geweegde bewegende gemiddelde bereken word deur elkeen van die sluitingstyd pryse binne die oorweeg reeks, deur 'n sekere gewig koëffisiënt. Waar: som (i, N) is die totale bedrag van die gewig koëffisiënte. Bronkode Full MQL4 bron van Moving gemiddeldes is beskikbaar in die Kode Base: Moving Gemiddeldes Waarskuwing: Alle regte op hierdie materiaal word voorbehou deur MetaQuotes Software Corp. kopiëring of herdruk van hierdie materiaal in sy geheel of gedeeltelik is verbode.
No comments:
Post a Comment