Wednesday, October 5, 2016

Python Pandas Eksponensiële Bewegende Gemiddelde

Python Data-analise Biblioteek pandas is 'n oop bron, BSD-lisensie biblioteek met 'n hoë-prestasie, maklik-om-te gebruik datastrukture en data-analise gereedskap vir die Python-programmeertaal. pandas is 'n NUMFocus geborg projek. Dit sal help om te verseker dat die sukses van die ontwikkeling van pandas as 'n wêreldklas-open-source projek. 0.19.0 Finale (2 Oktober 2016) Dit is 'n groot vrylating uit 0.18.1 en sluit verskeie API veranderinge, 'n paar nuwe funksies, verbeterings, en verbeterings prestasie saam met 'n groot aantal foutherstellings. Ons beveel aan dat alle gebruikers op te gradeer om hierdie weergawe. mergeasof () vir asof-styl time-reeks aansluit, sien hier. rolling () is nou tyd-reeks bewus, kyk hier readcsv () ondersteun nou die ontleding van kategoriese data, kyk hier 'n funksie unioncategorical () is bygevoeg vir die kombinasie van categoricals, sien hier PeriodIndex het nou sy eie tydperk dtype, en verander meer in ooreenstemming met ander indeks klasse te wees. Sien hier skraal datastrukture opgedoen verbeterde ondersteuning van int en Bool dtypes, kyk hier Vergelyking bedrywighede met 'n reeks nie meer ignoreer die indeks, kyk hier vir 'n oorsig van die API veranderinge. Bekendstelling van 'n pandas ontwikkeling API vir nut funksies, kyk hier. Afkeuring van Panel4D en PanelND. Ons beveel aan om hierdie tipe van n-dimensionele data voor te stel met die xarray pakket. Die opheffing van die voorheen afgekeur modules pandas. io. data. pandas. io. wb. pandas. tools. rplot. Sien die Whatsnew oorsig vir 'n omvattende lys van al verbeterings en foute wat in 0.19.0 vasgestel het. Meld asseblief enige probleme hier Beste manier om Beste manier om pandas kry installeer word om te installeer via conda Bou vir OSX-64, Linux-64, Linux-32, wen-64, wen-32 vir Python 2.7, Python 3.4, en Python 3.5 is almal beskikbaar. conda installeer pandas Vinnige vignette Watter probleem doen pandas los Python het 'n lang groot vir data munging en voorbereiding, maar minder so vir data-analise en modellering. pandas help vul hierdie gaping, sodat jy uit te voer jou hele data-analise workflow in Python sonder om oor te skakel na 'n meer domein spesifieke taal soos R. gekombineer met die uitstekende IPython toolkit en ander biblioteke, die omgewing om dit te doen data-ontleding in Python blink in prestasie, produktiwiteit, en die vermoë om saam te werk. pandas nie beduidende modellering funksionaliteit buite lineêre en paneel regressie vir hierdie implementeer, kyk na statsmodels en scikit-leer. Meer werk is nog nodig om Python 'n eerste klas statistiese modellering omgewing, maar ons is goed op pad in die rigting van daardie doel. Wat doen ons gebruikers het om 8220 pandas sê ons toelaat om meer te fokus op navorsing en minder op ontwikkeling. Ons het pandas maklik om te leer, maklik om te gebruik, en maklik om te handhaaf gevind. Die bottom line is dat dit toegeneem het ons productivity.8221 Direkteur van Optimization amp Analytics 8220 pandas is die ideale hulpmiddel vir die oorbrugging van die gaping tussen vinnige iterasies van ad hoc-analise en kwaliteit van die produksie-kode. As jy wil 'n instrument wat gebruik word in 'n multi-gedissiplineerde organisasie van ingenieurs, wiskundiges en ontleders, kyk nie further.8221 8220We gebruik pandas te tydreeksdata op ons produksie bedieners verwerk. Die eenvoud en elegansie van sy API en sy hoë vlak van prestasie vir 'n hoë-volume datastelle, het dit 'n ideale keuse vir us.8221 Biblioteek dui op 'n vinnige en doeltreffende DataFrame voorwerp vir datamanipulasie met 'n geïntegreerde kruip gereedskap vir lees en skryf data tussen in-geheue datastrukture en verskillende formate: CSV en teks lêers, Microsoft Excel, SQL databasis en die vinnige HDF5 formaat Intelligent data belyning en geïntegreerde hantering van die vermiste data. kry outomatiese-etiket gebaseer belyning in berekeninge en maklik manipuleer morsig data in 'n ordelike vorm Flexible hervorming en tuimelende van datastelle Intelligent-etiket gebaseer sny. fancy kruip. en subsetting van groot datastelle kolomme kan ingevoeg word en verwyder van data strukture vir grootte mutability Aggregating of transformasie van data met 'n kragtige groep enjin laat split aansoek doen-kombineer bedrywighede op data stel hoë prestasie samesmelting en samevoeging van data stel Hiërargiese as kruip bied 'n intuïtiewe manier van werk met 'n hoë-dimensionele data in 'n laer-dimensionele datastruktuur Tyd reeks - functionality: datum bereik geslag en frekwensie sukses, beweeg venster statistieke, beweeg venster lineêre regressies, datum verskuiwing en agter. Selfs skep domein-spesifieke tyd neutraliseer en sluit tydreekse sonder data Hoogs geskik vir prestasie verloor. met 'n kritiese kode paaie geskryf in Cython of C. Python met pandas is in gebruik in 'n wye verskeidenheid van akademiese en kommersiële gebiede, insluitend Finansies, Neuroscience, Ekonomie, Statistiek, Advertising, web analytics, en more. Backtesting n bewegende gemiddelde Crossover in Python met pandas Deur Michael Saal-Moore op 21 Januarie 2014 In die vorige artikel oor navorsing back testing omgewings Python met pandas geskep ons 'n objek-georiënteerde navorsing-gebaseerde back testing omgewing en dit getoets op 'n ewekansige vooruitskatting strategie. In hierdie artikel sal ons gebruik van die masjinerie wat ons lei om navorsing te doen oor 'n werklike strategie, naamlik die bewegende gemiddelde Crossover op AAPL maak. Bewegende gemiddelde Crossover Strategie Die bewegende gemiddelde Crossover tegniek is 'n uiters bekende simplistiese momentum strategie. Daar word dikwels beskou as die Hello World voorbeeld vir kwantitatiewe handel. Die strategie as hier uiteengesit is slegs lang. Twee afsonderlike eenvoudige bewegende gemiddelde filters word geskep, met wisselende Terugblik tydperke, van 'n bepaalde tyd reeks. Seine na die aankoop van die bate vind plaas wanneer die korter Terugblik bewegende gemiddelde hoe langer bewegende gemiddelde oorskry Terugblik. As die langer gemiddelde daarna die korter gemiddelde oorskry, word die bate verkoop terug. Die strategie werk goed wanneer 'n tydreeks betree 'n tydperk van 'n sterk tendens en dan omkeer stadig die tendens. Vir hierdie voorbeeld het ek gekies Apple, Inc (AAPL) as die tyd reeks, met 'n kort Terugblik van 100 dae en 'n lang Terugblik van 400 dae. Dit is die inligting wat deur die Zipline algoritmiese handel biblioteek voorbeeld. So as ons wil ons eie backtester implementeer moet ons verseker dat dit die resultate wedstryde in Zipline, as 'n basiese wyse van bevestiging. Implementering Maak seker dat die vorige tutoriaal hier volg. wat beskryf hoe die aanvanklike doel hiërargie vir die backtester is gebou, anders sal die kode hieronder sal nie werk nie. Vir hierdie spesifieke implementering het ek die volgende biblioteke gebruik: Die implementering van macross. py vereis backtest. py van die vorige tutoriaal. Die eerste stap is om die nodige modules en voorwerpe in te voer: Soos in die vorige tutoriaal gaan ons die strategie abstrakte basis klas MovingAverageCrossStrategy produseer oorerf. wat al die besonderhede oor hoe om die seine te genereer bevat wanneer die bewegende gemiddeldes van AAPL kruis oor mekaar. Die voorwerp vereis 'n shortwindow en 'n longwindow waarop te werk. Die waardes is ingestel om die standaard van 100 dae en 400 dae onderskeidelik, wat dieselfde parameters wat in die belangrikste voorbeeld van Zipline is. Die bewegende gemiddeldes is geskep deur die gebruik van die pandas rollingmean funksie op die barsClose sluitingsprys van die AAPL voorraad. Sodra die individu bewegende gemiddeldes is gebou, is die sein reeks wat deur die oprigting van die kolom gelyk aan 1,0 wanneer die kort bewegende gemiddelde is groter as die lang bewegende gemiddelde, of 0.0 anders. Hieruit kan die posisies bestellings gegenereer kan word om handel seine verteenwoordig. Die MarketOnClosePortfolio is subclassed van Portefeulje. wat is gevind in backtest. py. Dit is byna identies aan die wat in die vorige tutoriaal beskryf implementering, met die uitsondering dat die ambagte nou uit op 'n close-to-Close basis gedra, eerder as om 'n Ope-tot-Ope basis. Vir meer inligting oor hoe die Portefeuljekomitee voorwerp gedefinieer, sien die vorige tutoriaal. Ive het die kode in vir volledigheid en om hierdie handleiding te hou self-contained: Noudat die MovingAverageCrossStrategy en MarketOnClosePortfolio klasse is gedefinieer, sal 'n hooffunksie word geroep om al die funksies saam te bind. Daarbenewens die prestasie van die strategie deur middel van 'n plot van die aandele kurwe sal ondersoek word. Die pandas DataReader voorwerp downloads OHLCV pryse van AAPL voorraad vir die tydperk 1 Januarie 1990 tot 1 Januarie 2002, op watter punt die seine DataFrame is geskep om die lang-net seine op te wek. Vervolgens die portefeulje is gegenereer met 'n 100,000 dollar aanvanklike kapitaalbasis en die opbrengs word bereken op die aandele kurwe. Die finale stap is om matplotlib gebruik om 'n twee-syfer plot van beide AAPL pryse, oorgetrek met die bewegende gemiddeldes plot en koop / verkoop seine, asook die aandele kurwe met dieselfde koop / verkoop seine. Die plot kode is geneem (en aangepas) van die Zipline implementering voorbeeld. Die grafiese uitset van die kode is soos volg. Ek het gebruik gemaak van die IPython Plak opdrag om hierdie direk in die IPython konsole sit terwyl hy in Ubuntu, sodat die grafiese uitset in die lig bly. Die pienk upticks verteenwoordig die aankoop van die voorraad, terwyl die swart downticks dit terug verteenwoordig verkoop: Soos gesien kan word van die strategie verloor geld oor die tydperk, met vyf heen-en terugreis ambagte. Dit is nie verbasend gegewe die gedrag van AAPL oor die tydperk, wat op 'n effense afwaartse neiging, gevolg deur 'n beduidende toename begin in 1998. Die Terugblik tydperk van die bewegende gemiddelde seine is redelik groot en die effek daarvan die wins van die finale handel , wat anders die strategie winsgewend moontlik gemaak. In die daaropvolgende artikels sal ons 'n meer gesofistikeerde middel van die ontleding van die prestasie, sowel as die beskrywing van hoe om die Terugblik tydperke van die individuele bewegende gemiddelde seine te optimaliseer skep. Michael Saal-Moore Mike is die stigter van QuantStart en is betrokke by die kwantitatiewe finansiële sektor vir die afgelope vyf jaar, in die eerste plek as 'n quant ontwikkelaar en later as 'n quant handelaar konsultasie vir verskansing fundsputational gereedskap analoog, DataFrame het 'n metode cov te bereken paarsgewyse kovariansies onder die reeks in die DataFrame, ook uitgesluit NA / nul waardes. Die aanvaarding van die vermiste data ontbreek na willekeur dit lei tot 'n skatting vir die kovariansiematriks wat onbevooroordeelde. Maar vir baie toepassings hierdie beraming kan nie aanvaar word nie, want die geskatte kovariansiematriks nie gewaarborg positiewe semi-definitiewe te wees. Dit kan lei tot beraamde korrelasies met absolute waardes wat groter is as een is, en / of 'n nie-omkeerbare kovariansiematriks. Sien Beraming van kovariansiematrikse vir meer besonderhede. DataFrame. cov ondersteun ook 'n opsionele minperiods navraag dat die vereiste minimum aantal waarnemings vir elke paar kolom spesifiseer ten einde 'n geldige gevolg hê. Die gewigte wat in die venster gespesifiseer deur die wintype navraag. Die lys van erkende vorme is: wagon triang Blackman Hamming Bartlett parzen bohman blackmanharris Nuttall barthann Kaiser (moet beta) Gaussiese (moet st) generalgaussian (moet krag, breedte) slepian (behoeftes breedte). Let daarop dat die wagon venster is gelykstaande aan dat (). Vir een of ander windows funksies, moet addisionele parameters gespesifiseer: Vir. sum () met 'n wintype. Daar is geen normalisering gedoen om die gewigte vir die venster. Verbygaande persoonlike gewigte van 1, 1, 1 sal 'n ander resultaat oplewer as verbygaande gewigte van 2, 2, 2. byvoorbeeld. Gee 'n wintype in plaas van uitdruklik spesifiseer die gewigte, die gewigte is reeds genormaliseer sodat die grootste gewig 1. In teenstelling hiermee het die aard van die berekening. mean () is sodanig dat die gewigte is genormaliseer met betrekking tot mekaar. Gewigte van 1, 1, 1 en 2, 2, 2 oplewer dieselfde resultaat. Tyd-bewus Rolling Nuut in weergawe 0.19.0. Nuut in weergawe 0.19.0 is die vermoë om 'n sprong (of omskepbaar) om 'n metode. rolling () en het dit produseer veranderlike grootte vensters gebaseer op die geslaag tyd venster slaag. Vir elke keer punt, dit sluit alle voorafgaande waardes wat binne die aangeduide tyd delta. Dit kan veral nuttig vir 'n nie-gereelde tyd frekwensie indeks wees. Dit is 'n gereelde frekwensie-indeks. Met behulp van 'n parameter heelgetal venster werk te rol langs die venster frekwensie. Vermelding van 'n geneutraliseer kan 'n meer intuïtiewe spesifikasie van die rollende frekwensie. Die gebruik van 'n nie-gereelde, maar nog steeds monotoniese indeks, die rol met 'n heelgetal venster nie dra enige spesiale berekening. Die gebruik van die tyd-spesifikasie genereer veranderlike vensters vir hierdie yl data. Verder het ons nou toelaat dat 'n opsionele op parameter om 'n kolom (eerder as die standaard van die indeks) in 'n DataFrame spesifiseer. Tyd-bewus Rolling teen hersteekproefnemingsmetodes Gebruik. rolling () met 'n tyd-gebaseerde indeks is baie soortgelyk aan hermonstering. Hulle het albei werk en uit te voer reduktiewe bedrywighede op tyd geïndekseer pandas voorwerpe. By die gebruik van. rolling () met 'n verreken. Die verreken is 'n tyd-delta. Neem 'n agter-in-time soek venster, en gemiddelde gee van die waardes in die venster (insluitend die eindpunt, maar nie die begin-punt). Dit is die nuwe waarde op daardie stadium in die resultaat. Dit is veranderlike grootte vensters in die tyd-ruimte vir elke punt van die insette. Jy sal 'n dieselfde grootte gevolg as die insette te kry. By die gebruik van. resample () met 'n verreken. Stel 'n nuwe indeks wat die frekwensie van die verreken. Vir elke frekwensie bin, totaal punte van die insette binne 'n agtertoe-in-time soek venster wat in daardie bin val. Die gevolg van hierdie samevoeging is die uitset vir daardie frekwensie punt. Die vensters is vasgestel grootte grootte in die frekwensie ruimte. Die resultaat sal die vorm van 'n gereelde frekwensie tussen die min en die maksimum van die oorspronklike insette voorwerp het. Op te som. rollende () is 'n tyd-gebaseerde venster operasie, terwyl. resample () is 'n frekwensie-gebaseerde venster operasie. Sentreer Windows by verstek die etikette is ingestel op die regter rand van die venster, maar 'n sentrum navraag beskikbaar sodat die etikette kan ingestel word by die sentrum. Binêre Venster Funksies cov () en CORR () kan bereken beweeg statistieke venster oor twee reekse of 'n kombinasie van DataFrame / Series of DataFrame / DataFrame. Hier is die gedrag in elke geval: twee reekse. bereken die statistiek vir die paring. DataFrame / Series. bereken die statistieke vir elke kolom van die DataFrame met die geslaag Series, dus 'n DataFrame terugkeer. DataFrame / DataFrame. by verstek bereken die statistiek vir wat ooreenstem met die kolom name, terugkeer 'n DataFrame. As die navraag argument pairwiseTrue oorgedra bere dan die stukkie statistiek vir elke paar kolomme, terugkeer 'n paneel wie se items is die betrokke datums (sien die volgende afdeling). Berekening van rollende paarsgewyse kovariansies en korrelasies In finansiële data-analise en ander velde it8217s gemeen bereken kovariansie en korrelasie matrikse vir 'n versameling van tydreekse. Dikwels een is ook geïnteresseerd in bewegende-venster kovariansie en korrelasie matrikse. Dit kan gedoen word deur die verbygaan van die paarsgewyse navraag argument, wat in die geval van DataFrame insette 'n paneel wie se items is die betrokke datums sal oplewer. In die geval van 'n enkele DataFrame argument kan die paarsgewyse argument selfs weggelaat word: ontbrekende waardes geïgnoreer en elke inskrywing word bereken met behulp van die paarsgewyse volledige waarnemings. Sien asseblief die kovariansie afdeling vir voorbehoude wat verband hou met hierdie metode van berekening van kovariansie en korrelasie matrikse. Afgesien van nie met 'n parameter venster, hierdie funksies het dieselfde koppelvlakke as hul. rolling eweknieë. Soos hierbo, die parameters almal aanvaar is: minperiods. drumpel van nie-nul datapunte te vereis. Standaard minimum wat nodig is om statistiek te bereken. Geen Nans sal uitset keer wees minperiods nie-nul datapunte is gesien. sentrum. boolean, of om die etikette in die middel (verstek is Vals) Die opbrengs van die. rolling stel en. expanding metodes 'n NaN nie terugkeer indien daar ten minste minperiods nie-nul waardes in die huidige venster. Dit verskil van cumsum. cumprod. cummax. en koljander. wat terugkeer NaN in die uitset waar 'n NaN teëgekom in die insette. 'N groeiende venster statistiek sal meer stabiel (en minder responsief) as sy rollende venster eweknie wees as die toenemende venster grootte van die relatiewe impak van 'n individu gegee punt af. As 'n voorbeeld, hier is die gemiddelde () uitset van die vorige tydreekse dataset: eksponensieel Geweegde Windows A verwante stel funksies eksponensieel geweeg weergawes van 'n paar van die bogenoemde statistiek. 'N Soortgelyke koppelvlak om. rolling en. expanding is toeganklik deur middel van die. ewm metode om 'n EWM voorwerp ontvang. 'N Aantal van die uitbreiding van EW (eksponensieel geweeg) metodes word: Gevorderde Matplotlib Series (video's en eindig bron alleenlik) Sodra jy 'n basiese begrip van hoe Matplotlib werk, kan jy dalk 'n belangstelling in die neem van jou kennis 'n bietjie verder het. Sommige van die mees komplekse grafiese behoeftes kom in die vorm van voorraad analise en kartering, of Forex. In hierdie handleiding reeks, gaan dek waar en hoe om outomaties aan te gryp, sorteer en organiseer 'n paar gratis voorraad en buitelandse valuta pryse data. Volgende, gaan dit in kaart met behulp van 'n paar van die meer gewilde aanwysers as 'n voorbeeld. Hier, goed te doen MACD (bewegende gemiddelde Konvergensie divergensie) en die RSI (relatiewe sterkte-indeks). Om ons te help bereken hierdie, sal ons Numpy gebruik, maar anders sal ons hierdie te bereken almal op ons eie. Om die data te verkry, gaan die Yahoo Finansies API te gebruik. Dit API terugkeer historiese prys data vir die ENKELE simbool ons spesifiseer en vir die tyd lank ons ​​vra. Hoe groter die tyd, hoe laer is die besluit van data wat ons kry. Dus, as jy vra vir 'n 1-dag tydraamwerk vir AAPL, sal jy 3 minute OHLC (oop hoë lae naby) data te kry. As jy vra vir 10 jaar die moeite werd is, sal jy daagliks data te kry, of selfs 3 dag tydraamwerke. Hou dit in gedagte en kies 'n tyd wat jou doelwitte pas. Ook, as jy 'n lae genoeg tyd raam kies en kry 'n hoë genoeg korrelig, die API sal die tyd terug te keer in 'n Unix tyd stempel, in vergelyking met 'n datumstempel. Sodra ons die data, sal ons dit wil grafiek. Om mee te begin, en net stip die lyne, maar die meeste mense sal wil hê om 'n kandelaar plot in plaas. Ons sal Matplotlibs kandelaar funksie te gebruik, en maak 'n eenvoudige wysig om dit te effens verbeter. Op dieselfde grafiek, sowel ook trek 'n paar bewegende gemiddelde berekeninge. Hierna is gaan 'n intrige te skep, en die grafiek van die volume. Ons kan nie volume plot op dieselfde intrige onmiddellik, want die skaal is anders. Om mee te begin, sal ons die volume onder plot in 'n ander sub plot, maar uiteindelik ook eintlik oortrek volume op dieselfde figuur en maak dit 'n bietjie deursigtig. Dan gaan 2 sub erwe voeg en plot 'n RSI aanwyser op die top en die MACD aanwyser op die bodem. Vir al hierdie, gaan die X-as deel, sodat ons kan in en uit in 1 plot zoom en hulle sal almal ooreenstem met die dieselfde tyd raam. Gaan plot in datum formaat vir die X-as, en pas net oor al die dinge wat ons kan vir estetika. Dit sluit in die verandering van bosluis etiket kleure, rand / ruggraat kleure, lyn kleure, OHLC kandelaar kleure, leer hoe om 'n vol grafiek (vir volume) te skep, histogramme, trek spesifieke lyne (hline vir RSI), en 'n hele klomp meer. Hier is die eindresultaat (Ek het beide 'n Python 3 en 'n Python 2 weergawe vir hierdie Python 3 eerste, dan Python 2. Maak seker jy gebruik van die een wat pas by jou Python weergawe.): Dis al vir nou. Wil jy meer tutoriale kop na die Tuisblad Matplotlib Crash CourseSmoothing met eksponensieel Geweegde Moving Gemiddeldes n bewegende gemiddelde neem 'n lawaaierige tydreekse en vervang elke waarde met die gemiddelde waarde van 'n woonbuurt oor die gegewe waarde. Dit buurt kan bestaan ​​uit suiwer historiese data, of dit kan gesentreer oor die gegewe waarde. Verder kan die waardes in die buurt word geweeg met behulp van verskillende stelle gewigte. Hier is 'n voorbeeld van 'n ewe geweegde drie punt bewegende gemiddelde, met behulp van historiese data, hier, verteenwoordig die stryk sein, en verteenwoordig die lawaaierige tydreekse. In teenstelling met eenvoudige bewegende gemiddeldes, 'n eksponensieel geweeg bewegende gemiddelde (EWMA) pas 'n waarde volgens 'n eksponensieel geweeg som van alle vorige waardes. Dit is die basiese idee, dit is lekker, want jy don8217t hoef te bekommer oor 'n drie punt venster, teenoor 'n vyfpunt venster, of bekommerd wees oor die toepaslikheid van jou gewig skema. Met die EWMA, vorige storingen 8220remembered, 8221 en 8220slowly vergeet, 8221 deur die term in die laaste vergelyking, terwyl met 'n venster of buurt met diskrete grense, is 'n storing sodra dit verby die venster uit vergete. Gemiddeld die EWMA tendense akkommodeer Na die lees van sowat EWMAs in 'n data-analise boek, het ek gegaan saam gelukkig met behulp van hierdie instrument op elke enkele glad program wat ek oor gekom het. Dit was eers later dat ek geleer dat die EWMA funksie is eintlik net geskik is vir skryfbehoeftes data, dit wil sê data sonder tendense of seisoenaliteit. In die besonder, die EWMA funksie weerstaan ​​tendense weg van die huidige gemiddelde wat reeds it8217s 8220seen8221. So, as jy 'n lawaaierige hoed funksie wat gaan van 0 tot 1, en dan weer terug na 0, dan is die EWMA funksie sal lae waardes op die up-heuwel kant, en 'n hoë waardes terug op die af-heuwel kant. Een manier om dit te omseil is om die sein te stryk in albei rigtings, marsjeer vorentoe, en dan marsjeer agtertoe, en dan Gemiddeld twee. Hier sal ons die EWMA funksie wat deur die pandas module gebruik. Holt-Winters tweede orde EWMA En hier is 'n paar Python-kode implementering van die Holt-Winters tweede orde metode op 'n ander lawaaierige hoed funksie, soos voorheen. Post navigasie Recent Posts Argiewe


No comments:

Post a Comment