Enkel glidande medelvärde vba kod


Rolling Average Table Nedan ser vi på ett program i Excel VBA som skapar en rullande medel tabell. Placera en kommandoknapp på ditt arbetsblad och lägg till följande kodlinje: Område (quotB3quot).Value ArbetsbladFunktion. RandBetween (0, 100) Denna kodrad går in i ett slumptal mellan 0 och 100 i cell B3. Vi vill att Excel VBA ska ta det nya lagervärdet och placera det i den första positionen för rullande medelvärdet. Alla andra värden bör flyttas ner en plats och det sista värdet ska raderas. Skapa ett arbetsbladbyteshändelse. Kod som läggs till i arbetsbladets ändringshändelse kommer att köras av Excel VBA när du byter en cell i ett kalkylblad. 2. Dubbelklicka på Sheet1 (Sheet1) i Project Explorer. 3. Välj Arbetsblad från den vänstra rullgardinsmenyn. Välj Ändra från den högra rullgardinsmenyn. Lägg till följande kodlinjer till arbetsbladets ändringshändelse: 4. Förklara en variabel som heter newvalue av typen Integer och två intervall (firstfourvalues ​​och lastfourvalues). Dim nyvärde som heltal. firstfourvalues ​​Som Range, lastfourvalues ​​som Range 5. Arbetsblad Ändra händelse lyssnar på alla ändringar på Sheet1. Vi vill bara att Excel VBA ska göra något om något ändras i cell B3. För att uppnå detta lägger du till följande kodlinje: Om Target. Address quotB3quot Then 6. Vi initierar nyvärde med värdet av cell B3, förstfallsvärden med Range (quotD3: D6quot) och lastfourvalues ​​med Range (quotD4: D7quot). Newvalue Range (quotB3quot).Value Set firstfourvalues ​​Range (quotD3: D6quot) Ställ in lastfourvalues ​​Range (quotD4: D7quot) 7. Nu kommer det enkla tricket. Vi vill uppdatera rullande genomsnittstabellen. Du kan uppnå detta genom att ersätta de fyra sista värdena med de fyra första värdena på bordet och placera det nya lagervärdet vid första positionen. lastfourvalues. Value firstfourvalues. Value Range (quotD3quot).Value newvalue 8. Glöm inte att stänga if-uttalandet. 9. Ange slutligen formeln AVERAGE (D3: D7) i cell D8. 10. Testa programmet genom att klicka på kommandoknappen. Hur man beräknar EMA i Excel Lär dig hur du beräknar exponentiell glidande medelvärde i Excel och VBA och få ett gratis webbanslutet kalkylblad. Kalkylbladet hämtar lagerdata från Yahoo Finance, beräknar EMA (över ditt valda tidsfönster) och visar resultat. Nedladdningslänken finns längst ner. VBA kan ses och redigeras it8217s helt gratis. Men först disover varför EMA är viktigt för tekniska handlare och marknadsanalytiker. Historiska aktiekursdiagram är ofta förorenade med mycket högfrekventa ljud. Detta döljer ofta stora trender. Flytta medelvärden hjälper till att smidiga ut dessa mindre fluktuationer, vilket ger dig större inblick i den övergripande marknadsriktningen. Det exponentiella glidande medlet lägger större vikt vid senare data. Ju större tidsperiod desto lägre är betydelsen av de senaste uppgifterna. EMA definieras av denna ekvation. today8217s pris (multiplicerat med en vikt) och yesterday8217s EMA (multiplicerad med 1 vikt) Du måste starta EMA-beräkningen med en inledande EMA (EMA 0). Detta är vanligtvis ett enkelt rörligt medelvärde av längden T. I diagrammet ovan till exempel ger Microsoft EMA mellan 1 januari 2013 och 14 januari 2014. Tekniska handlare använder ofta överkorsningen av två glidande medelvärden 8211 en med en kort tidsskala och en annan med en lång tidsskala 8211 för att generera buysell signaler. Ofta används 12 och 26-dagars glidande medelvärden. När det kortare glidande medeltalet stiger över det längre glidande medlet, är marknaden trenden uppdaterad, det här är en köpsignal. Men när de kortare glidande medelvärdena ligger under det långsiktiga genomsnittet faller marknaden, det här är en säljsignal. Let8217s först lär sig hur man beräknar EMA med hjälp av kalkylbladsfunktioner. Därefter upptäcker we8217ll hur man använder VBA för att beräkna EMA (och automatiskt diagramdiagram) Beräkna EMA i Excel med kalkylfunktioner steg 1. Let8217s säger att vi vill beräkna 12-dagars EMA av Exxon Mobil8217s aktiekurs. Vi behöver först få historiska aktiekurser 8211 du kan göra det med den här bulkstocken citat nedladdningen. Steg 2 . Beräkna det enkla genomsnittet av de första 12 priserna med Excel8217s Average () - funktionen. I screengrab nedan, i cell C16 har vi formeln AVERAGE (B5: B16) där B5: B16 innehåller de första 12 nära priserna Steg 3. Precis under cellen som används i steg 2, ange EMA-formeln ovan Där har du det You8217ve beräknat framgångsrikt en viktig teknisk indikator, EMA, i ett kalkylblad. Beräkna EMA med VBA Nu let8282s mekanisera beräkningarna med VBA, inklusive automatisk skapande av tomter. Jag vann8217t visar dig hela VBA här (it8217s finns i kalkylbladet nedan), men vi8217ll diskutera den mest kritiska koden. Steg 1. Hämta historiska aktiekurser för din ticker från Yahoo Finance (med CSV-filer) och ladda dem till Excel eller använd VBA i det här kalkylbladet för att få historiska citat rakt in i Excel. Dina uppgifter kan se ut så här: Steg 2. Det är här vi behöver träna några braincells 8211 vi behöver implementera EMA-ekvationen i VBA. Vi kan använda R1C1-stil för att programmera in formler i enskilda celler. Undersök kodfliken nedan. Ark (quotDataquot).Range (quotquot amp EMAWindow 1) kvotdrift (R-kvadratförstärkare EMAWindow - 1 amp kvadrat-3: RC-3) quot Sheets (quotDataquot).Range (quothquot amp EMAWindow 2 amp cc: hquot amp numRows). FormulaR1C1 quotR0C-3 (2 (EMAWindow 1)) R-1C0 (1- (2 (EMAWindow1))) EMAWindow är en variabel som motsvarar det önskade tidsfönstret numRows är det totala antalet datapunkter 1 (8220 18221 beror på we8217re förutsatt att den faktiska lagerdata startar på rad 2) beräknas EMA i kolumn h. Om man antar att EMAWindow 5 och numrows 100 (det vill säga det finns 99 datapunkter) placerar den första raden en formel i cell h6 som beräknar det aritmetiska genomsnittet av de första 5 historiska datapunkterna Den andra raden placerar formler i cellerna h7: h100 som beräknar EMA för de återstående 95 datapunkterna. Steg 3 Denna VBA-funktion skapar en lista över slutpriset och EMA. Ange EMAChart ActiveSheet. ChartObjects. Add (Vänster: Räckvidd (quota12quot).Liv, Bredd: 500, Överst: Räckvidd (quota12quot).Top, Höjd: 300) Med EMAChart. Chart. Parent. Name quotEMA Chartquot Med. SeriesCollection. NewSeries. ChartType xlLine. Values ​​Sheets (quotdataquot).Range (quote2: equot amp numRows).XValues ​​Sheets (quotdataquot).Range (kvot2: aquot amp numRows).Format. Line. Weight 1.Name quotPricequot Slut med med. SeriesCollection. NewSeries. ChartType xlLine. AxisGroup xlPrimary. Values ​​Sheets (quotdataquot).Range (quoth2: hquot amp numRows).Name quotEMAquot. Border. ColorIndex 1.Format. Line. Weight 1 End With. Axes (xlValue, xlPrimary).HasTitle True. Axes xlValue, xlPrimary).AxisTitle. Characters. Text quotPricequot. Axes (xlValue, xlPrimary).MaximumScale WorksheetFunction. Max (Sheets (quotDataquot).Range (quote2: equot amp numRows)).Axes (xlValue, xlPrimary).MinimumScale Int (WorksheetFunction . Min (Sheets (quotDataquot).Range (quote2: equot amp numRows))).Legend. Position xlLegendPositionRight. SetElement (msoElementChartTitleAboveChart).ChartTitle. Text quotClose Prisförstärkare EMAWindow amp citat-Day EMAquot End With Få detta kalkylblad för fullständig fungerande implementering av EMA-kalkylatorn med automatisk nedladdning av historiska data. 14 tankar om ldquo Hur man beräknar EMA i Excel rdquo Förra gången jag hämtade ett av dina Excel-speadsheets orsakade det att mitt antivirusprogram skulle flagga det som ett PUP (potentiellt oönskade program) i det att det tydligen fanns kod inbäddade i nedladdningen som var adware, spionprogram eller åtminstone potentiell skadlig kod. Det tog bokstavligen dagar att städa upp min dator. Hur kan jag se till att jag bara hämtar Excel? Tyvärr finns det otroliga mängder skadlig kod. adware och spywar, och du kan inte vara försiktig. Om det är en kostnadsfråga skulle jag inte vara ovillig att betala en rimlig summa, men koden måste vara PUP-fri. Tack, det finns inga virus, skadlig kod eller adware i mina kalkylblad. I8217ve programmerade dem själv och jag vet exakt vad som finns i dem. There8217s en direktladdningslänk till en zip-fil längst ner på varje punkt (i mörkblå, djärv och understruken). That8217s vad du ska ladda ner. Håll över länken och du bör se en direktlänk till zip-filen. Jag vill använda min tillgång till levande priser för att skapa live tech-indikatorer (dvs. RSI, MACD etc). Jag har just insett för fullständig noggrannhet, jag behöver 250 dagar värd data för varje lager i motsats till de 40 jag har nu. Finns det någonstans att få tillgång till historiska data om saker som EMA, Avg Gain, Average Loss så att jag bara kunde använda den mer exakta data i min modell I stället för att använda 252 dagars data för att få rätt 14 dagars RSI kunde jag bara få en extern erhållet värde för Avg Gain och Avg-förlust och gå därifrån. Jag vill att min modell ska visa resultat från 200 aktier i motsats till några. Jag vill plotta flera EMAs BB RSI på samma diagram och baserat på förhållanden skulle vilja utlösa handel. Detta skulle fungera för mig som excel backtester. Kan du hjälpa mig att plotta flera timeseries på samma diagram med samma dataset. Jag vet hur man applicerar de råa uppgifterna till ett excel-kalkylblad, men hur använder du ema-resultaten. Ema i Excel-kartor can8217t justeras till specifika perioder. Tack kliff mendes säger: Hej där Samir, Först tack en miljon för allt ditt hårda arbete. Utmärkt jobb GUD SÄNDER. Jag ville bara veta om jag har två ema plottade på diagram kan säga 20ema och 50ema när de passerar antingen upp eller ner kan ordet KÖP eller SÄLJ visas vid kors över punkten hjälper mig mycket. kliff mendes texas I8217m arbetar på ett enkelt backtesting kalkylblad that8217ll genererar köp-sälj signaler. Ge mig tid8230 Bra jobb på diagram och förklaringar. Jag har dock en fråga. Om jag ändrar startdatumet till ett år senare och tittar på senaste EMA-data, är det märkbart annorlunda än när jag använder samma EMA-period med ett tidigare startdatum för samma datum för senaste datum. Är det vad du förväntar dig. Det gör det svårt att titta på publicerade diagram med EMAs visade och inte se samma diagram. Shivashish Sarkar säger: Hej, jag använder din EMA-kalkylator och jag uppskattar verkligen. Jag har emellertid märkt att kalkylatorn inte kan plotta graferna för alla företag (det visar Run time error 1004). Kan du snälla skapa en uppdaterad utgåva av din kalkylator där nya företag kommer att ingå Lämna ett svar Avbryt svar Liksom gratis kalkylblad Master Knowledge Base Senaste inlägg Här är en kod som bör vara till hjälp för dem som använder teknisk analys i handel och vill testa strategier i Excel. Den beräknar det enkla, linjärt vägda och exponentiella glidande medlet. Vidare kommer jag att presentera och förklara stegen för att skapa formuläret och VBA-koden. Infoga en UserForm 8211 Namn: MAForm Lägg till fyra etiketter från Verktygslådans kontroller 8211 Bildtext enligt ovan Skriv ut skärm Lägg till en ComboBox för det glidande genomsnittliga typvalet. Den heter comboTypeMA Lägg till två RefEdit-kontroller för ingångsintervall och utgångsintervall. Lägg till en textbox för att välja den glidande medeltiden Lägg till två knappar: Namn: knappSänd, Bildtext: Skicka och Namn: Knapp Avbryt, Bildtext: Avbryt För att generera rullgardinsmenyn för MA typval och ladda användarformuläret, en ny modul kommer att infogas med nedanstående kod. ComboBox-objekten som fylls i genom att flytta medelvärden och användarformuläret laddas. Alternativ Explicit Sub loadMAForm () Med MAFormboTypeMA. RowSource. AddItem Simple. AddItem Weighted. AddItem Exponentiell Slut Med MAForm. Show End Sub Nedan är koden som tillskrivs Submit-knappen. Privat Sub-knappSubmitClick () Dim inputRange, outputRange As Range Den inputRange kommer att innehålla den prisserie som används för att beräkna MAs och outputRange kommer att fyllas med värdena för glidande medelvärden. Dim inputPeriod As Integer Den glidande medeltiden förklaras. Dim inputAddress, outputAddress As String Ingångs - och utgångsområdena deklareras som sträng. Om comboTypeMA. Value ltgt Exponential och comboTypeMA. Value ltgt Simple och comboTypeMA. Value ltgt Weighted True Då MsgBox Vänligen välj en glidande genomsnitts typ från listan. RefInputRange. SetFocus Exit Sub Denna del av proceduren styr de första begränsningarna gällande den inlämnade data. Om den glidande genomsnittstypen inte finns i rullgardinslistan går proceduren inte vidare till nästa steg och användaren uppmanas att välja den igen. ElseIf RefInputRange. Value Sedan MsgBox Vänligen välj ingångsområde. RefInputRange. SetFocus Exit Sub ElseIf RefOutputRange. Value Sedan MsgBox Vänligen välj utmatningsområde. RefOutputRange. SetFocus Exit Sub ElseIf RefInputPeriod. Value Sedan MsgBox Vänligen välj den glidande genomsnittliga perioden. RefInputPeriod. SetFocus Exit Sub ElseIf Not IsNumeric (RefInputPeriod. Value) Sedan MsgBox Flyttande genomsnittlig period måste vara ett nummer. RefInputPeriod. SetFocus Exit Sub End Om andra begränsningar skapas. Inmatningsintervall, utgångsintervall och ingångsperiod får inte vara tomma. Den rörliga genomsnittliga perioden måste också vara ett tal. inputAddress RefInputRange. Value Ange inputRange Range (inputAddress) outputAddress RefOutputRange. Value Ange outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Argumenten för inputRange och outputRange intervaller kommer att införasAdAdress och outputAddress anges som strängar. Om inputRange. Columns. Count ltgt 1 Sedan kan MsgBox Input-område endast ha en kolumn. RefInputRange. SetFocus Exit Sub Den inputRange måste innehålla endast en kolumn. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Sedan har MsgBox utgångsintervall ett annat antal rader än ingångsintervallet. RefInputRange. SetFocus Exit Sub End Om inputRange och outputRange måste ha ett lika antal rader. Dim RowCount som helhet RowCount inputRange. Rows. Count Dim cRow som helhet ReDim inputarray (1 Till RowCount) För cRow 1 Till RowCount inputarray (cRow) inputRange. Cells (cRow, 1).Value Nästa cRow inputarray förklaras som array och it8217s element motsvarar värdena från varje rad i ingångsintervallet. Om inputPeriod gt RowCount Sedan MsgBox Antal valda observationer är ampere RowCount amp och perioden är amp inputPeriod amp. Inmatningsområdet måste ha en högre eller lika stor mängd element än den valda perioden. RefInputRange. SetFocus Exit Sub End Om en annan begränsning läggs till 8211 Inmatningsområdet måste ha en högre eller lika stor mängd element än perioden. Om inputPeriod lt 0 Då MsgBox Rörlig medelperiod måste vara högre än 0. RefInputPeriod. SetFocus Exit Sub End Om den glidande genomsnittliga perioden måste vara högre än noll. ReDim outputarray (inputPeriod To RowCount) Som variant Även arraydimensionerna för outputarray bestäms. Den nedre gränsen för arrayen är inputPeriod-värdet och övre gränsen är värdet av RowCount (antalet element i inputRange). Nedanför en del av proceduren beräknades det enkla glidande medlet, om valet för comboTypeMA är enkelt. SMA ----------------------------------------- Om comboTypeMA. Value Simple Då Dim i , j Som heltal Dim temp Som dubbel För jag inputPeriod To RowCount temp 0 För j (i - (inputPeriod - 1)) Till jag temp temp inputarray (j) Nästa j outputarray (i) temp inputPeriod outputRange. Cells (i, 1).Value outputarray (i) Nästa i outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) I grunden beräknar proceduren det glidande medlet för de sista x-talen (x är lika med inputPeriod), med början av elementet i ingångsraden är lika med ingångsperioden. Nedan visas ett förenklat exempel som visar varje steg i proceduren. I det här exemplet finns det fyra nummer (no01, no02, no03 och no04) från rad 1 till rad 4 och den glidande medeltiden är 3. Efter varje nytt glidande medelvärde beräknas varje cell i utgångsläget ta värdet från outputarray. Och efter alla beräknade medelvärden beräknas, i cellen ovanför outputRange kommer en titel att införas som innehåller den glidande genomsnitts typen och perioden. Denna nästa del kommer att beräkna exponentiell glidande medelvärde. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Then Dim alfa As Double alpha 2 (inputPeriod 1) För j 1 Till inputPeriod temp temp inputarray (j) Nästa j outputarray (inputPeriod) temp inputPeriod Först bestäms värdet av alfa. Eftersom beräkningen är baserad på EMA baserad på tidigare EMA, kommer den första att vara det enkla glidande medlet. För jag inputPeriod 1 Till RowCount outputarray (i) outputarray (i - 1) alpha (inputarray (i) - outputarray (i - 1)) Nästa jag Börjar med det andra glidande medlet, de kommer att beräknas baserat på ovanstående formel: tidigare EMA plus alfa multiplicerad med skillnaden mellan det aktuella numret från ingångsraden och det tidigare EMA-värdet. För jag inputPeriod To RowCount outputRange. Cells (i, 1).Value outputarray (i) Nästa jag outputRange. Cells (0, 1).Value EMA (amp inputPeriod amp) Precis som koden för SMA kommer outputarrayen att fyllas och cellen ovanför utmatningsraden representerar typen och perioden för det glidande medlet. Nedan är koden för att beräkna det vägda glidande medlet. WMA ------------------------------------------ ElseIf comboTypeMA. Value Weighted Then Dim temp2 Som heltal För jag ingångPeriod Till RowCount temp 0 temp2 0 För j (i - (inputPeriod - 1)) Till jag temp temp inputarray (j) (j - i inputPeriod) temp2 temp2 (j - i inputPeriod) Nästa j outputarray ) temp temp2 outputRange. Cells (i, 1).Value outputarray (i) Nästa jag outputRange. Cells (0, 1).Value WMA (amp inputPeriod amp) Slut Om tabellen nedan innehåller stegen för att beräkna varje variabel som används för WMA-beräkning. Precis som i föregående exempel finns det i siffror i inputRange. och inmatningsperioden är 3. Nedan är procedurens slutkod, som avlastar användarformuläret. Lossa MAForm End Sub Underproceduren är för Cancel-knappen. Den läggs till i samma modul. Privat sub-knappCancelClick () Avlägsna MAForm End Sub, där 2 (1 n) Subskriptionen t används för att beteckna tid t. ex. t-1 refererar till perioden innan t och n, som anges av användaren, hänvisar till EMA: s avvaktningsperiod. Till exempel har EMA-ekvivalenten för ett 3-årigt enkelt glidande medelvärde n av 3. Ju större värdet på n blir, desto mindre blir. Detta resulterar i en större (1-) och mer av EMA t-1 behålls i EMA t. Det första värdet av EMA i en tidsserie kan antas vara ett enkelt glidande medelvärde av n days8217 av priser. Vissa användare kan också föredra att starta EMA: s första värde från den andra perioden och framåt där EMA på Period 2 x Period 2 Pris (1 8211) x Period 1 Pris. Användare bör förstå att exponentiell rörligt medelvärde faktiskt är en oändlig serieexpansion där de tidigare priserna har en allt mindre vikt på EMA t. Tänk på följande: Detta resulterar i att EMA är mer lyhörd och mindre flyktig än dess enkla glidande medelvärde. En mer detaljerad diskussion om detta finns i min artikel om filter i ekonomi och teknisk analys. Metod A använder funktioner, medan metod B använder subprocedurer för att beräkna CMF. Metod B är snabbare och mer flexibel. Klistra in den här koden i ditt ThisWorkBook-kodfönster i VBA. Högerklicka på den här WorkBook i Project Explorer och klicka på Visa kod. Privat Sub WorkbookOpen () Resten hör till någon modul Berättar Excel att inkludera dessa i lista över funktioner, lägg till beskrivningar till dem och skapa en ny kategori som heter Tekniska Indikatorer. Application. MacroOptions macro: EMA, Beskrivning: Returnerar exponentiell rörlig genomsnittsnivå. amp Chr (10) amp Chr (10) amp Välj senaste perioder EMA eller sista perioder pris om aktuell period är den första. amp Chr (10) amp Chr (10) amp följt av aktuellt pris och n. ampere Chr (10) amp Chr (10) amp Chr (10) amp Decayfaktorn för exponentiell glidande medelvärde beräknas som alpha2 (n1), Public Function EMA (EMAY går, pris, n) EMA alfa pris (1 - alfa) EMAY i går När du är klar med ovanstående kan du beräkna exponentiell glidande medelvärde genom att skriva in någon cell EMA (sista perioden EMA, Aktuellt pris, n). Ange sista periodens pris som sista perioden EMA om du beräknar den första EMA i ditt dataset. För att köra Metod B måste du kopiera Runthis-delen från sidan på AccumulationDistribution Line till din modul. Du måste också köra EMA från Runthis-suben. Lägg till följande rad i under Runthis Placera den strax före Slut Del och avaktivera alla andra makron som Runthis kommer att ringa Denna del kommer att börja beräkna EMA från t2 och framåt Sub EMA (close1 As Range, output as Range, n Så länge) close0 close1 ( 1, 1).Address (False, False) close1a close1 (2, 1).Address (False, False) output1 output (1, 1).Address (False, False) output (2, 1).Value 2 amp amp) amp amp close1a amp (1-2 amp amp amp) amp amp utgång1 utgång (2, 1).Value 2 (1 amp amp) amp close1a amp (1-2 (1 amp amp)) amp close0 Gilla vad du just har läst Digg det eller Tipd det. Målet med Finance4Traders är att hjälpa handlare att komma igång genom att föra dem opartisk forskning och idéer. Sedan slutet av 2005 har jag utvecklat handelsstrategier på egen hand. Inte alla dessa modeller passar mig, men andra investerare eller handlare kan tycka att de är användbara. När allt kommer omkring har människor olika mål och vanor för investmenttrading. Således blir Finance4Traders en lämplig plattform för att sprida mitt arbete. (Läs mer om Finance4Traders) Vänligen använd denna webbplats på ett lämpligt och omtänksamt sätt. Det innebär att du borde cite Finance4Traders genom att åtminstone ge en länk tillbaka till den här webbplatsen om du råkar använda något av vårt innehåll. Dessutom får du inte använda vårt innehåll på ett olagligt sätt. Du bör också förstå att vårt innehåll inte har någon garanti och du bör självständigt verifiera vårt innehåll innan du förlita dig på dem. Se webbplatsens innehållspolicy och sekretesspolicy när du besöker den här webbplatsen. 0 kommentarer: Skriv en kommentar En handelsstrategi är mycket lik en företagsstrategi. Att studera dina resurser på ett kritiskt sätt hjälper dig att göra mer effektiva beslut. (Läs vidare) 8226 Förstå tekniska indikatorer Tekniska indikatorer är mer än bara ekvationer. Väl utvecklade indikatorer, när de tillämpas vetenskapligt, är faktiskt verktyg för att hjälpa näringsidkare att extrahera kritisk information från finansiella data. (Läs vidare) 8226 Varför föredrar jag att använda Excel Excel presenterar data visuellt för dig. Det gör det mycket lättare för dig att förstå ditt arbete och spara tid. (Läs vidare)

Comments