Friday, 10 November 2017

Liukuva Keskiarvo Koodi Vba


Haluan laskea viimeisen eli 20 sarakkeen numeron liikkuvat keskiarvot. Ongelmana on, että jotkut sarakkeen soluista voivat olla tyhjiä, niitä ei pitäisi jättää huomiotta. Esimerkki: Kolmen viimeisen liikenteen keskiarvo olisi (155167201) 3. Olen yrittänyt toteuttaa tätä käyttämällä keskimääräistä, offset-indeksiä, mutta en yksinkertaisesti tiedä miten. Olen melko perehtynyt makroja, joten tällainen ratkaisu toimisi hyvin: MovingAverage (A13) Kiitos kaikista vinkkejä tai ratkaisuja kysytty Mar 12 11 at 15:36 Syötä tämä with controlshiftenter tehdä sen array kaava. Tämä löytää viimeisimmät kolme arvoa. Jos haluat enemmän tai vähemmän, muuta kahta kahta esimerkkiä kaavassa haluamaasi kohtaan. Tämä osa palauttaa neljännen korkeimman rivinumeron kaikista soluista, joilla on arvo tai 5 esimerkissä, koska rivit 6, 8 ja 9 ovat 1.-3. Korkeimman rivin, joiden arvo on. Tämä osa palauttaa 9 TRUEa tai FALSEa sen perusteella, onko rivinumero suurempi kuin neljäs suurin. Tämä kertoo arvot A1: A9 näillä 9 TRUEs tai FALSEs. TRUEet muunnetaan 1: ksi ja FALSE: n arvoksi nolla. Tämä jättää tällaisen SUM-toiminnon. Koska kaikki yllä olevat 155 arvot eivät täytä rivinumerokriteeriä, saat kerrottuna nollalla. Olen kirjoittanut lyhyen käsikirjoituksen VBA: ssa. Hopefull se tekee mitä haluat. Tässä olet: 1) Olen asettanut rajan 360 soluun. Se tarkoittaa, että komentosarja ei etsi enempää kuin 360 solua. Jos haluat muuttaa sitä, muuta laskurin alkuarvo. 2) Käsikirjoitus ei palaa keskenään pyöristettynä. Muuta viimeistä riviä MovingAverage-kierrokselle (CDbl (tmp i), 2) 3) Käyttö on aivan kuin haluat, joten kirjoita MovingAverage (a13) soluun. Kaikki kommentit ovat tervetulleita. Rolling Keskimääräinen taulukko Alla tarkastelemme Excel VBA: n ohjelmaa, joka luo liikkuvan keskitason taulukon. Aseta komentopainike laskentataululle ja lisää seuraava koodirivi: Alue (quotB3quot).Value WorksheetFunction. RandBetween (0, 100) Tämä koodirivi syöttää satunnaisluku 0-100 soluun B3. Haluamme, että Excel VBA ottaa uuden osakkeen arvon ja asettaa sen keskimääräisen taulukon ensimmäiselle sijainnille. Kaikkien muiden arvojen pitäisi liikkua alaspäin yhdestä paikasta ja viimeinen arvo on poistettava. Luo laskentataulukko Muuta tapahtumaa. Excel VBA suorittaa Excel-VBA-tietueeseen lisätyn koodin lisäämisen koodiksi, kun muutat solua laskentataulukkoon. 2. Kaksoisnapsauta Project Explorerissa Sheet1 (Sheet1) - painiketta. 3. Valitse vasemmalla olevasta avattavasta luettelosta Worksheet. Valitse Muuta oikealta avattavasta luettelosta. Lisää seuraavat työlistat muokattavaan tapahtumaan: 4. Ilmoita muuttujan, jonka nimi on integer-arvon uusiarvo ja kaksi arvoaluetta (firstfourvalues ​​and lastfourvalues). Dim newvalue As Integer. firstfourvalues ​​As Range, lastfourvalues ​​As Range 5. Worksheet Muuta tapahtuma kuuntelee kaikkia Sheet1-muutoksia. Haluamme vain, että Excel VBA tekee jotain, jos jotain muuttuu solussa B3. Tällöin lisää seuraava koodirivi: Jos kohde. Address quotB3qot sitten 6. Alustetaan uudenarvon solun B3 arvolla, ensin arvoalueella (D3: D6quot) ja viimeisellä arvolla Range (D4: D7quot). newvalue Range (quotB3quot).Value Aseta ensimmäiset arvot Range (quot3: D6quot) Set lastfourvalues ​​Range (quotD4: D7quot) 7. Nyt tulee yksinkertainen temppu. Haluamme päivittää liikkuvan keskiarvopöydän. Voit saavuttaa tämän korvaamalla neljä viimeistä arvoa taulukon ensimmäisillä neljällä arvolla ja asettaen uuden osakkeen arvon ensimmäiseen paikkaan. lastfourvalues. Value firstfourvalues. Value Range (quot33quot).Value newvalue 8. Älä unohda sulkea if lausunto. 9. Syötä lopuksi kaava AVERAGE (D3: D7) soluun D8. 10. Testaa ohjelma klikkaamalla komentopainiketta. Tässä on koodi, joka olisi hyödyllistä niille, jotka käyttävät teknistä analyysia kaupankäynnissä ja haluavat testata strategioita Excelissä. Se laskee yksinkertaisen, lineaarisesti painotetun ja eksponentiaalisen liukuvan keskiarvon. Lisäksi esitän ja selitän vaiheet lomakkeen ja VBA-koodin luomiseksi. Lisää käyttäjätunnus 8211 Nimi: MAForm Lisää neljä tarraa työkalupalkin ohjaimista 8211 Kuvatekstit yllä olevan tulostusnäytön avulla Lisää ComboBox liikkuvan keskimääräisen tyypin valintaan. Se on nimeltään comboTypeMA Lisää kaksi RefEdit-säätintä syöttöalueelle ja lähtöalueelle. Lisää tekstipohja liikkuvaa keskipitkän ajan valitsemiseen Lisää kaksi painiketta: Nimi: painikeLähetä, Kuvateksti: Lähetä ja nimi: paina Peruuta, Kuvateksti: Peruuta MA-tyypin valinnan pudotusluettelon luomiseksi ja lataamalla käyttäjälomake uusi moduuli lisätään alla olevaan koodiin. ComboBox-kohteet täytetään liikkuvien keskiarvotyyppien avulla ja käyttäjämuoto ladataan. Optio Explicit Sub loadMAForm () MAFormboTypeMA. RowSource. AddItem Yksinkertainen. AddItem Painotettu. AddItem Eksponentiaalinen loppu MAForm. Show End Sub Alla on koodi, joka on annettu Submit-painikkeelle. Private Sub-painikeSubmitClick () Dim inputRange, outputRange kuin alue InputRange sisältää hintasarjan, jota käytetään laskentamallien laskemiseen ja outputRange täytetään liikkuvan keskiarvon arvolla. Dim inputPeriod Kuten kokonaisluku Liikkuva keskimääräinen jakso ilmoitetaan. Dim inputAddress, outputAddress As String Tulo - ja lähtöalueet ilmoitetaan merkkijonona. Jos comboTypeMA. Value ltgt Eksponentiaalinen ja comboTypeMA. Value ltgt Yksinkertainen ja comboTypeMA. Value ltgt Painotettu True Sitten MsgBox Valitse liukuva keskimääräinen tyyppi luettelosta. RefInputRange. SetFocus Exit Sub Tämä osa menettelyä noudattaa ensimmäisiä rajoituksia, jotka koskevat toimitettuja tietoja. Jos liikkuvaa keskimääräistä tyyppiä ei ole pudotusvalikossa, menettely ei mene eteenpäin seuraavaan vaiheeseen ja käyttäjää pyydetään valitsemaan se uudelleen. ElseIf RefInputRange. Value Sitten MsgBox Valitse syöttöalue. RefInputRange. SetFocus Poistu Sub ElseIf RefOutputRange. Value Sitten MsgBox Valitse lähtöalue. RefOutputRange. SetFocus Poistu Sub ElseIf RefInputPeriod. Value Sitten MsgBox Valitse liikkuva keskimääräinen ajanjakso. RefInputPeriod. SetFocus Poistu Sub ElseIf Ei IsNumeric (RefInputPeriod. Value) Sitten MsgBox Keskimääräinen ajanjakso on oltava numero. RefInputPeriod. SetFocus Exit Sub End Jos muut rajoitukset luodaan. Syöttöalue, lähtöalue ja syöttöjakso eivät saa olla tyhjiä. Myös liukuvan keskijakson pitää olla numero. inputAddress RefInputRange. Value Määritä inputRange Range (inputAddress) outputAddress RefOutputRange. Value Määritä outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value InputRange ja outputRange alueet argumentit syötetäänAddress ja outputAddress ilmoitettuina merkkijonoina. Jos inputRange. Columns. Count ltgt 1 MsgBox Input - alueella voi olla vain yksi sarake. RefInputRange. SetFocus Exit Sub EnterRangen täytyy sisältää vain yksi sarake. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Sitten MsgBox-lähtöalueella on eri rivien määrä kuin syöttöalue. RefInputRange. SetFocus Exit Sub End Jos inputRange ja outputRange täytyy olla yhtä monta riviä. Dim RowCount kuin integer RowCount inputRange. Rows. Count Dim cRow kuin kokonaisluku ReDim-tulosarra (1 RowCount) cRow 1: lle RowCount-syöttöarran (cRow) tulonRange. Cells (cRow, 1).Value Seuraava cRow-tulosarra ilmoitetaan array - ja it8217s-elementeinä vastaavat kunkin rivin syöttöalueen arvoja. Jos inputPeriod gt RowCount Sitten MsgBox Valittujen havaintojen määrä on amp RowCount amp ja ajanjakso on amp inputPeriod amp. Tuloalueella on oltava suurempi tai yhtä suuri määrä elementtejä kuin valitulla jaksolla. RefInputRange. SetFocus Exit Sub End Jos lisätään toinen rajoitus 8211 Tuloalueella täytyy olla suurempi tai yhtä suuri määrä elementtejä kuin ajan. Jos inputPeriod lt 0 Sitten MsgBox Keskimääräisen jakson siirtymän on oltava suurempi kuin 0. RefInputPeriod. SetFocus Poistu alijärjestys Jos liikkuvan keskijakson jakson on oltava suurempi kuin nolla. ReDim-tuotosarra (inputPeriod To RowCount) Muunnelmana Myös tuotosarran matriisi mitoitetaan. Matriisin alaraja on inputPeriod - arvo ja yläsarka on RowCountin arvo (inputRange-elementtien määrä). Menettelyn osassa laskettiin yksinkertainen liikkuva keskiarvo, jos comboTypeMA: n valinta on yksinkertainen. SMA ----------------------------------------- Jos comboTypeMA. Value Yksinkertainen Sitten Dim i , j As Integer Dim temp As Double Aseta i inputPeriod To RowCount temp 0 J (i - (inputPeriod - 1)) i temp temp inputarray (j) Seuraavaksi j outputarray (i) temp inputPeriod outputRange. Cells (i, 1).Value outputarray (i) Seuraavaksi i outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) Periaatteessa menettely laskee viimeisten x numeroiden liukuvan keskiarvon (x on yhtä kuin inputPeriod) syöttöarra yhtä suuri kuin inputPeriod. Alla on yksinkertaistettu esimerkki, joka esittää prosessin jokaisen vaiheen. Tässä esimerkissä on neljä numeroa (no01, no02, no03 ja no04) riviltä 1 riviin 4 ja liukuva keskiarvojakso on 3. Kun jokaisen uuden liukuvan keskiarvon lasketaan, jokaisen ulostulojohdon solu ottaa arvon tuotosarra. Ja kun lasketaan kaikki liukuvat keskiarvot, ulostulon yläpuolella olevassa solussa lisätään otsikko, joka sisältää liikkuvan keskiarvon tyypin ja ajan. Tämä seuraava osa laskee eksponentiaalisen liukuvan keskiarvon. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Then Dim alfa Kuten kaksinkertainen alfa 2 (inputPeriod 1) j: lle 1 syötettäväksiPeriod temp temp inputarray (j) Seuraavaksi j outputarray (inputPeriod) temp inputPeriod Aluksi määritetään alfan arvo. Koska laskennassa EMA: n arvo perustuu edelliseen EMA: han, ensimmäinen on yksinkertainen liukuva keskiarvo. I i) - lähtöarra (i - 1)) Seuraavaksi i Lähdetään toisesta liukuva keskiarvosta, lasketaan edellä esitetyn kaavan mukaan: i aikaisempi EMA plus alfa kerrottuna nykyisen numeron erolla syötearran ja edellisen EMA-arvon välillä. I inputPeriod To RowCount outputRange. Cells (i, 1).Value outputarray (i) Seuraavaksi i outputRange. Cells (0, 1).Value EMA (amp inputPeriod amp) Aivan kuten SMA: n koodi, solmun yläpuolella oleva tuotosarra edustaa liikkuvan keskiarvon tyyppiä ja jaksoa. Alla on painotetun liukuvan keskiarvon laskentakoodi. WMA ------------------------------------------ ElseIf comboTypeMA. Value Painotettu sitten Dim temp2 Kuten kokonaislukuna i inputPeriod To RowCount temp 0 temp2 0 J (i - (inputPeriod - 1)) i temp temp inputarray (j - i inputPeriod) temp2 temp2 (j - i inputPeriod) Seuraava j outputarray (i (i, 1).Value outputarray (i) Seuraavaksi i outputRange. Cells (0, 1).Value WMA (amp inputPeriod amp) End Jos Alla olevassa taulukossa on vaiheet kunkin muuttujan laskemiseksi WMA-laskenta. Aivan kuten edellisessä esimerkissä, tässä on numerot inputRangessa. ja syöttöjakso on 3. Alla on menettelyn lopullinen koodi, joka purkaa käyttäjän lomakkeen. Unload MAForm End Sub Alla oleva menettely on Peruuta-painikkeelle. Se lisätään samaan moduuliin. Private Sub-painikeCancelClick () Poista MAForm End Sub, jossa 2 (1 n) Alaindeksin t käytetään merkitsemään aika esim. t-1 viittaa aikaan ennen t: tä ja n: tä, jotka käyttäjän on määriteltävä, viittaa EMA: n keskimääräiseen jaksoon. Esimerkiksi EMA-ekvivalentti 3-vaiheisen yksinkertaisen liikkuva keskiarvon on n 3. Mitä suurempi n arvo, sitä pienempi on. Tämä johtaa suurempaan (1-) ja sitä enemmän EMA t-1 säilyy EMA: ssa t. EMA: n ensimmäinen arvo aikasarjassa voidaan olettaa olevan yksinkertainen liukuva keskiarvo, joka on n päivää8217. Jotkut käyttäjät voivat myös halutessaan aloittaa EMA: n ensimmäisen arvon toisen kaudesta alkaen, jolloin EMA kaudella 2 x Kausi 2 Hinta (1 8211) x Kausi 1 Hinta. Käyttäjien tulisi ymmärtää, että eksponentiaalinen liukuva keskiarvo on itse asiassa ääretön sarjan laajennus, jossa aikaisemmilla hinnoilla on yhä pienempi paino EMA: lla. Harkitse seuraavia: Tämä johtaa siihen, että EMA on herkempi ja vähemmän haihtuvaa kuin sen yksinkertainen liikkuva keskiarvo. Yksityiskohtaisempi keskustelu tästä löytyy artikkelissani suodattimista rahoituksessa ja teknisessä analyysissä. Menetelmä A käyttää funktioita, kun taas menetelmässä B käytetään CMF: n laskemisessa käytettäviä alimenettelyjä. Menetelmä B on nopeampi ja joustavampi. Liitä tämä koodi VBA: n ThisWorkBook-koodiikkunaan. Napsauta tätä WorkBookia hiiren kakkospainikkeella Project Explorerissa ja valitse Näytä koodi. Private Sub WorkbookOpen () Loppuosa kuuluu mihin tahansa moduuliin. Kerro Excelille, että nämä sisällytetään luetteloon toiminnoista, lisäät niihin kuvaukset ja luodaan uusi luokka nimeltä Technical Indicators. Application. MacroOptions-makro: EMA, Kuvaus: Palauttaa eksponentiaalisen liikkuvan keskiarvon. amp Chr (10) amp Chr (10) amp Valitse viimeiset kaudet EMA tai viimeiset kaudet hinta, jos nykyinen kausi on ensimmäinen. amp Chr (10) amp Chr (10) amp Seuraavat nykyinen hinta ja n. Eksponentiaalisen liukuvan keskiarvon hajoamiskertoimen lasketaan seuraavasti: alpha2 (n1), julkinen toiminto EMA (EMAY-eilen, hinta, n) EMA-alfa-hinta (1-aakkosnumeerinen), Chr (10) EMANUusi Kun olet tehnyt edellä esitetyn, voit laskea eksponentiaalisen liukuvan keskiarvon kirjoittamalla minkä tahansa solun EMA: n (viimeisen kauden EMA, Nykyinen hinta, n). Syötä viimeinen jakson hinta viimeisimmäksi ajaksi EMA, jos lasket datasiirtosi ensimmäisen EMA: n. Jotta voit suorittaa menetelmän B, sinun on kopioitava Runthis-osio AccumulationDistribution Line - sivulta moduuliisi. Sinun on myös suoritettava EMA Runthis-aliohjelmasta. Lisää seuraava rivi osioon Runthis Aseta se oikealle ennen End Sub - ohjelmaa ja poista kaikki muut makrot, joita Runthis kutsuu. Tämä osa alkaa laskea EMA: n t2: sta lähtien Sub EMA (sulje 1 As-alue, tuotos alueittain, n yhtä pitkä) close0 close1 ( 1, 1).Adress (False, False) close1a close1 (2, 1).Adress (False, False) lähtö1 lähtö (1, 1).Adress (False, False) lähtö (2, 1).Value 2 (1 amp n amp) amp close1a amp (1-2 (1 amp n amp)) amp output1 lähtö (2, 1).Value 2 close0 Kuten mitä juuri olet lukenut Digg it tai Tipd it. Finance4Tradersin tavoitteena on auttaa kauppiaita aloittamaan tuomalla heille puolueeton tutkimus ja ideoita. Vuodesta 2005 lähtien olen kehittänyt kaupankäynnin strategioita henkilökohtaisesti. Kaikki nämä mallit eivät ole sopivia minulle, mutta muut sijoittajat tai kauppiaat voivat löytää ne hyödyllisiksi. Loppujen lopuksi ihmisillä on erilaiset investointitavoitteet ja tavat. Näin Finance4Tradersista tulee kätevä foorumi levittää työni. (Lue lisää Finance4Tradersista) Käytä tätä sivustoa sopivalla ja huomaavalla tavalla. Tämä tarkoittaa sitä, että sinun pitäisi mainita Finance4Traders-sivustolla ainakin tarjoamalla linkki takaisin tähän sivustoon, jos käytät jotain sisältöä. Et myöskään saa käyttää sisältöämme laittomasti. Sinun on myös ymmärrettävä, että sisältömme on ilman takuuta, ja sinun on itse varmistettava sisältö ennen kuin luotamme niihin. Katso sivuston sisältöä koskevat säännöt ja tietosuojakäytännöt, kun vierailet tätä sivustoa. 0 kommenttia: Lähetä kommentti Kaupankäyntistrategia on hyvin samanlainen kuin yritysstrategia. Kriittinen tutkimus resursseista auttaa sinua tekemään tehokkaampia päätöksiä. (Lue lisää) 8226 Teknisten indikaattoreiden ymmärtäminen Tekniset indikaattorit ovat muutakin kuin yhtälöt. Hyvin kehittyneet indikaattorit ovat tieteellisesti soveliaita välineitä, jotka auttavat kauppiaita poistamaan kriittiset tiedot taloudellisista tiedoista. (Lue lisää) 8226 Miksi Excel Excel - ohjelma näyttää tietoja visuaalisesti. Tämä helpottaa sinua ymmärtämään työtänne ja säästämään aikaa. (Jatka lukemista)

No comments:

Post a Comment