Saturday, 9 December 2017

Exponentiell glidande medelvärde sql server


Jag försöker att implementera en exponentiell glidande genomsnittlig EMA på postgres, men när jag kontrollerar dokumentationen och tänker på det ju mer jag försöker bli mer förvirrad, är jag. Formeln för EMA x är. Det verkar vara perfekt för en aggregator, för att hålla Resultatet av det senast beräknade elementet är exakt vad som måste göras här Men en aggregator producerar ett enda resultat som minskning eller vikning och här behöver vi en lista en resultatkolumn som karta Jag har kontrollerat hur procedurer och funktioner fungerar, men AFAIK De producerar en enda utmatning, inte en kolumn jag har sett många procedurer och funktioner, men jag kan inte riktigt räkna ut hur detta interagerar med relationell algebra, särskilt när jag gör något så här, en EMA. Jag hade inte tur att söka på Internets hittills Men definitionen för en EMA är ganska enkel, jag hoppas det är möjligt att översätta denna definition till något som fungerar i postgres och är enkelt och effektivt, eftersom flyttning till NoSQL kommer att vara överdriven i mitt sammanhang. Beräknar aggregeringen som ger resultatet i varje rad för varje dellista av ingångsdata Eftersom det verkar som om det använder aggregat upp till rad n, returnerar resultatet och går sedan till rad 0 för att beräkna aggregeringen upp till rad n 1 Igen Är det något sätt att använda ackumuleringen eller någon statisk variabel som i C så att det måste beräknas en gång Tack Trylks jan 20 12 på 11 59. Nu använder det ackumulerade värdet Om du kör frågan med höjningen Info kommandot uncommented, kan du se att funktionen bara kallas en gång för varje rad. Postgresql matar ut tillståndsvärdet på varje rad om det definierades en slutfunk, som skulle kallas för att omvandla tillståndet till ett utgångsvärde araqnid Jan 20 12 på 12 04. ErwinBrandstetter Jag har återställt de flesta förändringarna - när det gäller formatet för den första ankringsdelen av frågan kan EMA x1 tydligt representeras med en enda linje - detta motsvarar den enskilda raden som definierar den Frågan i När det gäller den rekursiva delen av frågan har jag använt mn-1 i anslutningsvillkoren för att indikera ekvivalensen av förhållandet med EMA xn-1 i frågan, även om det blir mindre prestanda om prestanda är ett problem, OP kan ändra anslutningsvillkoren för att vara som du föreslog Mark Bannister Jan 16 12 på 9 27. Jag har läst den diskussion du nämnde Den är tillämplig på PostgreSQL eftersom det är tillåtet att skapa användardefinierad aggregatfunktion med SQL i PostgreSQL, men inte Tillåtet i SQL Server Användning av rekursiv CTE är ett genomförbart sätt i SQL Server men jag märker att CTE-vägen kan medföra mer tabellskanning än fönsterfunktioner Så jag gör det här inlägget för att fråga om det är möjligt att beräkna exponentiell glidande medelvärde med hjälp av SQL Server 2012-fönstret Funktionen precis som att beräkna enkelt glidande medelvärde xiagao1982 14 april kl 2 53. Först beräknar du EMA SMA x istället för EMA x För det andra är din utjämningskonstant faktiskt beta-värdet i min formel, inte alfabetet Med de två Ändrar SQLFiddle ser ut som detta Men det finns fortfarande en liten skillnad mellan det faktiska resultatet och det förväntade resultatet. Jag skulle gå tillbaka och se om deras EMA-definition matchar den jag känner Sebastian Meine 7 maj 13 på 13 46. Jag tittade bara på Formuläret i kalkylbladet du bifogade och det är långt ifrån standard EMA-definitionen Min formel beräknar exponentiell glidande medelvärde för de senaste tio raderna Kalkylbladet beräknar först standardvärdet för de senaste tio raderna och sedan det obegränsade exponentiellt vägda glidande genomsnittet över alla Medeltal Detta följer formuläret här Sebastian Meine 7 maj 13 på 13 52. SQL kommer inte med många analytiska funktioner, och om en användare vill utföra analytiska beräkningar i databasen måste man skriva ett stort antal lagrade procedurer eller funktioner Detta är ett enkelt sätt att skapa ett exponentiellt rörligt medelvärde, som kan användas för ett antal ändamål Denna implementering fokuserar på marknadsdata. Exponential Moving A Verages - Vad är det? Ett exponentiellt rörligt medelvärde, som vanligtvis kallas EMA eller ibland EWMA, Exponentiellt vägt rörande medelvärde, är ett rörligt medelvärde där vikterna för den senaste datapunkten är viktigare än avlägsen datapunkt. I en enkel rörelse I genomsnitt är alla observationer lika viktiga. EMA är populära i finansiella applikationer där det kan noteras att riskmätningar använder en uppsättning EMA för att beräkna risk-risk. Det är också ganska vanligt i tekniska analysapplikationer, som det uppfattas Att vara mindre fördröjning än vanligt glidande medelvärde till det enkla glidande medelvärdet SMA, har en EMA också en parameter. Medan SMA har lookback-fönstret som enparametern har en EMA en utjämningsfaktor som huvudparameter. Utjämningsfaktorn kan lätt omvandlas In i en halveringstid faktor som hänvisar till antalet dagar. Formeln för EMA är särskilt effektiv för beräkning av beräkningar, eftersom den kan slutföras med tidigare EMA va Lue och den nya informationen Här är ramverket finansiella data, där vi beräknar EMA på en serie som består av slutkurs. Det är idag s pris, är tiden och decay-faktorn är mindre eller lika med 1 och EMA är inte Vanligtvis definierad för perioden mindre än 2 I de flesta fall är utgångsvärdet satt till det aktuella priset vid. Sammanställning genom att använda Cursors. Below är ett kodprov som används för att implementera EMA i T-SQL med SQL Server 2008, men det borde Vara kompatibel med tidigare versioner av SQL Server också Observera att funktionen beror på längdparametern som är lika med halveringstiden. Detta konverteras i utjämningsfaktorn i den första raden. När implementeringen använder markörer kan man också implementera Det här är ett renare sätt med hjälp av inre föreningar. Men för stora dataset är det troligt att de är både tidskrävande och minnesintensiva. Utjämning 2 längd 1 SET signalnamn signalnamn konvertera varchar 15, konvertera int längd SET markör KURSOR FÖR VÄLJ A datum A close FRÅN dbo Marknadsdata A VAR En marknadsmarknad och A datum mellan Startdate och Enddate ORDER BY A datum OPEN-markör FETCH NEXT Från markör INTE datum stäng HÄR FETCHSTATUS 0 BEGÄNDA OM expaverage är null SET expaverage stäng ELSE SET expaverage expaverage utjämning close expaverage INSERT IN Resultatdatum stäng avg signal VÄLJ datum close expaverage signal name FETCH NEXT Från markör INTO datum stäng END.

No comments:

Post a Comment