Liikkuvan keskiarvon suorittaminen Pythonissa

Paras vastaus

Olen kirjoittanut Mediumiin artikkelin, joka esittelee erityyppisiä liikkuvia keskiarvoja ja koodaa niiden toimintoja Pythonissa (Full linkki koodille, koska muotoilu on vaikeaa: Kuinka koodata erityyppisiä liikkuvia keskiarvoja Pythonissa. jänneväli>). Tässä on artikkeli:

Kaupankäynnin ohjelmistoissa on erityyppisiä liikkuvia keskiarvoja, jotka on jo valmiiksi asennettu ja valmiita kartoittamaan. Mutta voi olla mielenkiintoista ymmärtää, kuinka nämä liikkuvat keskiarvot lasketaan, jotta niitä voidaan käyttää testattaessa potentiaalisia strategioita.

Jos haluat tehdä tee se itse -menetelmän, niin alla oleva kiinnostaa sinua varmasti. Tarvitaan vain python-tulkki, kuten SPYDER. Eri ”tunnettuja” liikkuvien keskiarvojen tyyppejä ovat:

  • Yksinkertainen liukuva keskiarvo.
  • Eksponentiaalinen liukuva keskiarvo.
  • Tasoitettu liukuva keskiarvo.
  • Lineaarisesti painotettu liukuva keskiarvo.

Me käy läpi jokaisen, määrittelee sen, koodaa sen ja kartoittaa sen.

GBPUSD päivittäinen kaavio. Mustana 200 päivän MA, purppurana, 200 päivän EMA, keltaisena 200 päivän tasoitettuna MA ja vaaleanpunaisena 200 päivän lineaarisesti painotettuna MA.

Yksinkertainen liukuva keskiarvo

Kuten nimestä voi päätellä, tämä on yksinkertainen yksinkertainen keskiarvosi, jota käytetään kaikkialla tilastoissa ja pohjimmiltaan muissa osissa elämäämme. Se on yksinkertaisesti havaintojen kokonaisarvo jaettuna havaintojen lukumäärällä.

Matemaattisesti se voidaan kirjoittaa seuraavasti:

Pythonissa voimme määrittää funktion, joka laskee liikkuvat keskiarvot seuraavasti:

[Python-koodi menee tänne, kiitos viittaa yllä olevaan alkuperäiseen artikkelilinkkiin, koska koodin liittäminen on aikaa vievää]

Funktio vie tietorakenteen, jota edustaa Data muuttuja, liikkuvan keskiarvon jakso (20, 60, 200 jne.), jota edustaa muuttuja jakso , mihin haluat käyttää sitä ( OHLC-tietorakenteissa valitse 3 lähellä oleville hinnoille, koska python-indeksointi alkaa nollasta), jota edustaa muuttuja onwhat ja missä -muuttuja on missä haluat liikkuvan keskiarvon sarakkeen näkyvän. Huomaa, että sinulla on oltava yli 4 saraketta, jotta tämä toimisi, koska se ei automaattisesti luo uutta saraketta, vaan vain täyttää sen.

EURUSD Päivittäinen aikahorisontti, 200 päivän yksinkertainen liukuva keskiarvo.

Eksponentiaalinen liukuva keskiarvo

Päinvastoin kuin yksinkertainen liukuva keskiarvo, joka antaa samanlaisen painotuksen kaikille havainnoille, eksponentiaalinen liukuva keskiarvo antaa enemmän painoa uusimmille havainnoille. Se reagoi enemmän kuin yksinkertainen liukuva keskiarvo viimeaikaisten liikkeiden suhteen.

Matemaattisesti se voidaan kirjoittaa seuraavasti:

Tasoituskerroin on usein 2. Huomaa, että jos korotamme tasoituskerrointa (tunnetaan myös nimellä alfa), tuoreemmilla havainnoilla on suurempi painoarvo.

Python-kielellä , voimme määrittää funktion, joka laskee EMA: n seuraavasti:

[Python-koodi menee tähän, katso yllä olevasta alkuperäisestä artikkelilinkistä koodia liittämällä on aikaa vievä]

Toiminto on itsestään selvä, koska se vain toistaa yllä esitetyn EMA-toiminnon.

EURUSD Päivittäinen aikahorisontti, 200 päivän eksponentiaalinen liukuva keskiarvo.

Tasoitettu liukuva keskiarvo

Tämä liukuva keskiarvo ottaa huomioon yleiskuvan, ja viimeaikaiset liikkeet vaikuttavat siihen vähemmän. Se on suosikkini trendiä seuraava indikaattori. Matemaattisesti ottaen se löytyy yksinkertaisesti kertomalla EMA-funktion Days-muuttuja arvolla 2 ja vähentämällä 1. Tämä tarkoittaa, että eksponentiaalisen liukuvan keskiarvon muuntamiseksi tasoitetuksi seuraamme tätä yhtälöä python-kielellä, joka muuntaa eksponentiaalisen liikkuvan keskiarvo tasoitetuksi:

smoothed = (exponential * 2) - 1 # From exponential to smoothed

EURUSD Päivittäinen aikahorisontti, 200 päivän tasattu liukuva keskiarvo.

Lineaarisesti painotettu liukuva keskiarvo

Se on yksinkertainen liukuva keskiarvo, joka painottaa enemmän viimeaikaisia ​​tietoja. Viimeisimmällä havainnolla on suurin paino, ja jokaisella sitä edeltävällä painolla on asteittain lasku.Intuitiivisesti sillä on vähemmän viivettä kuin muilla liukuvilla keskiarvoilla, mutta se on myös vähiten käytetty, ja siksi mitä se saavuttaa viiveen vähentämisessä, se menettää suosiotaan.

Matemaattisesti se voidaan kirjoittaa seuraavasti:

Python-kielellä voimme määrittää funktion, joka laskee liikkuvat keskiarvot seuraavasti:

[Python-koodi menee tänne, katso yllä olevaa alkuperäistä artikkelilinkkiä, koska koodin liittäminen on aikaa vievää]

EURUSD: n päivittäinen aikahorisontti, 200 päivän painotettu liukuva keskiarvo.

Jos meillä on periaatteessa tietojoukko, joka koostuu kahdesta luvusta [1, 2] ja haluamme laskea lineaarisen painotetun keskiarvon, teemme sitten seuraavat toimet:

  • (2 x 2) + (1 x 1) = 5
  • 5/3 = 1.66

Tässä oletetaan, että viimeisin havainto on aikasarja, jonka numero on 2.

Johtopäätös

Joten kumpi valita? Tämä kysymys jätetään elinkeinonharjoittajan riskiprofiilille ja sen tuntemukselle liikkuvasta keskiarvosta. Jotkut suosivat yksinkertaisia ​​yksinkertaisia ​​liukuvia keskiarvoja, kun taas toiset yrittävät kaivaa syvemmälle käyttämällä eksponentiaalisten ja tasoitettujen liukuvien keskiarvojen yhdistelmiä. Kaikki riippuu siitä, että löydät suosikkisi. Neuvoni? Harkitse pidemmän aikavälin liukuvia keskiarvoja.

Vastaa

Miksi kukaan ei vielä maininnut Pandoja? Python-tietojen analyysikirjasto

import pandas as pd, numpy as np

np.random.seed(1)

random\_walk = pd.Series(

np.random.randn(100)

).cumsum() # dummy data

random\_walk.ewm(span=10).mean() # ema

random\_walk.rolling(20).mean() # simple moving average

random\_walk.expanding().mean() # expanding average

index = pd.bdate\_range("2012","2013",freq="1h") # time series

series = pd.Series(

np.random.randn(index.shape[0]),index

)

series.rolling("100h").mean() # 100 hours, time based window

series.rolling(pd.Timedelta(hours=30)).mean() # You may use any offset compatible with index

series.rolling(10, win\_type="triang").mean() # triangle weights

series.rolling(10,center=True).mean() # value in the middle of window

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *