Exponentiell 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 kodlinje 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 vid 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 kalkylbladets ä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 nedrullningsbara listan. Lägg till följande kodlinjer till arbetsbladets ändringshändelse: 4. Förklara en variabel som heter newvalue av typen Integer och two ranges (firstfourvalues ​​and lastfourvalues). Dim nyvärde som heltal. firstfourvalues ​​Som Range, lastfourvalues ​​As Range 5. Arbetsblad Ändra händelsen 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, firstfourvalues ​​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 i tabellen 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., Där 2 (1 n) Prenumerationen 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. Exempelvis har EMA-ekvivalenten för ett 3-årigt enkelt glidande medelvärde n av 3. Ju större värdet av 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 glidande 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 alpha-pris (1-alfa) EMAY 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 senaste perioden EMA om du beräknar den första EMA-enheten 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 del 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, utgång som rad, 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 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å ett personligt sätt. 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 bör 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 är du inte tillåten att 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 använder dem. Hänvisa till webbplatsens innehållspolicy och sekretesspolicy när du besöker denna webbplats. 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) 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) 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 genomsnittstiden 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 införas med nedanstående kod. ComboBox-objekten som fylls i genom att flytta medelvärdenstyper och användarformuläret kommer att laddas. Alternativ Explicit SublastMAForm () 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 IngångRange 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 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ångsintervall. 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 Range 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 lika många rader. Dim RowCount som heltal 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 Flyttande genomsnittlig period 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). Nedan i delen av proceduren beräknades det enkla glidande genomsnittet om valet för comboTypeMA är enkelt. SMA ----------------------------------------- Om comboTypeMA. Value Simple Sedan 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 av de sista x talen (x är lika med inputPeriod), med början med elementet i ingångsraden är lika med ingångsperioden. Nedan är ett förenklat exempel som visar varje steg i proceduren. I det här exemplet finns 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 kommer varje cell i utgångsläget att ta värdet från outputarray. Och efter alla beräknade medelvärden beräknas, i cellen ovanför outputRange kommer en titel att infogas som innehåller den glidande genomsnittstypen 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 multiplicerat 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 utmatningsraden 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 I inputPeriod To 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 sista kod, 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

Comments