Archive for February, 2010

Nedarbas Lietuvoje

Šiuo įrašu noriu pademonstruoti R-Language galimybes – kaip panaudojant įvairias duomenų bazes galima sugeneruoti gražius grafikus, kurie turėtų padėti analitikams.
Photobucket

R-Language kodas:

#Lietuvos žemėlapį parsisiunčiam iš čia: http://gadm.org/data/rda/LTU_adm1.RData
#statistinius duomenis iš čia: http://db1.stat.gov.lt/statbank/default.asp?w=1274</code>
 
load(file='LTU_adm1.RData')
tmp&lt;-read.table(file='nedarbas.apskr.csv',sep=';')
nasa.factor&lt;-as.factor(as.numeric(cut(tmp$V2, c(0,9,10,11,12))))
 
levels(nasa.factor)&lt;- c("&lt;9%", "9-10%", "10-11%","11-12")
gadm$col_no&lt;-nasa.factor
 
myPalette&lt;-brewer.pal(4,"Purples")
jpeg(file='nedarbas.Lietuvoje.jpg',width=500)
spplot(gadm, "col_no", col=grey(.9), col.regions=myPalette,main='Nedarbas Lietuvoje')
dev.off()

Šaltinis: http://ryouready.wordpress.com/2009/11/16/infomaps-using-r-visualizing-german-unemployment-rates-by-color-on-a-map/

Comments (1)

Gas price seasonality

Last spring I read “Quantitative Trading” by Ernest P. Chan. In his book, he suggested to buy gas futures contract at the end of February and sell it later, in March. Today, I decided to test this strategy by using R-language.
The most important thing for such investigation is data. For this purpose, I used this public data: www.eia.doe.gov
I made 2 test – for the first one, I used futures contract, which will be settled after 4 months and for the second one, I used gas spot price.
In the first plot, we can see monthly price returns scaled by months (1-12). It is clear, that mean of March’s returns are above 0. What is encouraging in this plot is that the ranges of returns are above 0 as well (meaning, that majority of March’s returns was above 0).
Anova test gives p-value below 0.01 – some months in the group has different mean (that supports seasonality idea). March’s t-test gives these values: t = 2.8064, df = 15, p-value = 0.01329.

Photobucket

I used gas spot prices to generate second plot. It is similar to the first one, except that March’s returns has longer tail. It is worth to note, that September stands as a positive month as well. The statistics for this test are not so strong, as it was in the first example.
P-value of Anova test is only 0.11 and March’s t-test is:
t = 1.3791, df = 15, p-value = 0.1881

Photobucket

R-language code to run these tests:

#------gas contract 4 -----
library(xts)
library(ggplot2)
library(quantmod)
 
tmp<-as.matrix(read.table(file='gas.contract.4.csv',sep=';'))
gas<-as.xts(as.double(tmp[,2]),order.by=as.POSIXct(tmp[,1]))
plot(gas)
gas.monthly<-to.monthly(gas)
gas.monthly.delta<-Delt(Cl(gas.monthly))
gas.monthly.delta[1]<-0
 
gas.factor<-as.double(format(index(gas.monthly.delta),'%m'))
tmp<-data.frame(as.double(gas.monthly.delta),as.numeric(gas.factor))
qplot(factor(as.numeric(gas.factor)),as.double(gas.monthly.delta),data=tmp,geom = "boxplot",ylab='Returns',xlab='Months')
 
anova(lm(as.double(gas.monthly.delta)~gas.factor))
t.test(((gas.monthly.delta[which(format(index(gas.monthly.delta),'%m')=='03')]))[,1])
 
#----gas contract spot -------
tmp<-as.matrix(read.table(file='gas.csv',sep=';'))
gas<-as.xts(as.double(tmp[,2]),order.by=as.POSIXct(tmp[,1]))
 
plot(gas)
colnames(gas)<-c('Close')
 
gas.monthly<-to.monthly(gas)
gas.monthly.delta<-Delt(Cl(gas.monthly))
gas.monthly.delta[1]<-0
 
gas.factor<-as.double(format(index(gas.monthly.delta),'%m'))
tmp<-data.frame(as.double(gas.monthly.delta),as.numeric(gas.factor))
 
qplot(factor(as.numeric(gas.factor)),as.double(gas.monthly.delta),data=tmp,geom = "boxplot",ylab='Returns',xlab='Months')
 
anova(lm(as.double(gas.monthly.delta)~gas.factor))
t.test(((gas.monthly.delta[which(format(index(gas.monthly.delta),'%m')=='03')]))[,1])

Comments (4)

Sugar price seasonality

Recently, Orion securities have issued a “BUY” recomendation for Cugar ETF. Because, neither I follow the recommendations nor I’m big fan of TA (I have to admit, that I was…), I decided to check sugar price seasonality.

Voila, the mean of monthly returns are presented in the graph. February, April and May tend to be negative and June and July show positive returns.
BUT! Don’t forget to ask – are these results significant? P-value for July is 14%, 34% for April. The rest is above 50%. So, keep in mind, that these results are very weak…

Photobucket

More descriptive plot:

Photobucket

Comments

Tyrimas: investicija į top3 akcijas vienai savaitei

Ar tam tikrą periodą pirmavusios akcijos duodą didesnę grąžą ateinančią savaitę? Tarkime, kad numatėme investuoti į šias akcijas:

TEO1L, RST1L, IVL1L, APG1L, SRS1L, UKB1L, SAN1L, SAB1L, LDJ1L, SNG1L, PTR1L, LFO1L

Pirmas variantas – lygiomis dalimis suformuoti portfelį ir suinvestuoti visą tam skirtą kapitalą. Kitas variantas – kiekvieną savaitę keisti portfelio sudėtį, perkant tik tas akcijas, kurios per X dienų skaičių turėjo didžiausią grąžą. Šiame tyrime buvo naudotos 126 darbo dienas. Perkamos tik 3, didžiausią grąžą davusios akcijos.
Atliekant tyrimą, buvo pridėta dar viena taisyklė. Jei per pasirinktą periodą visų akcijų grąža buvo neigiama, tai investicija savaitei atidedama. Pateiktame grafike – juoda linija, o žalia linija – ta pati strategija, bet investuota nepriklausant nuo to, ar grąža buvo neigiama ar teigiama.
Palyginimui sudariau indeksą iš aksčiau paminėtų akcijų – raudona linija. Mėlyna linija rodo grąža strategijos, kuri paremta slankiaisiais vidurkiais 50/200.

Photobucket

Rezultatai

Iš pirmo žvilgsnio atrodo, kad strategija tikrai gerai veikia – juodos linijos grąža yra didžiausia. Jei ši strategija sukuria kokią nors vertę, tai tada investuojant visą laiką (žalia linija), nepaisant akcijų biržos ciklo, turėtų duoti didesnę grąžą nei indeksas(raudona linija). Kaip matosi iš pateikto grafiko, investuojant kiekvieną savaitę, strategija dažniausiai atsilieka nuo indekso. Viena iš priežasčių – komisiniai mokesčiai. Dėl dažno pirkimo/pardavimo susidaro nemažos išlaidos, todėl verta pasitikrinti savo brokerio įkainius.
Į tyrimą įtraukiau slankiaisiais vidurkiais paremtą strategiją (mėlyna linija), kad galima būtų palyginti kokią papildomą grąžą duoda saugiklis, jei investuojama tik kai praeities rezultatai yra teigiami. Nors grafike mėlyna linija stipriai atsilieka nuo juodos, tačiau verta pažiūrėti koks buvo rizikos ir kokia grąžos santykis  naudojant šią strategiją.

Strategija>0   indeksas    allTheTime    GoldenCross
Annualized Return     0.39         0.15              0.06               0.19
Annualized Std          0.36         0.31                0.4               0.19
Annualized Sharpe    1.08 0.49               0.14              1.01

Žymiai paprastesnė (slankiųjų vidurkių) strategija rodo labai panašų Sharpe ratio (grąža buvo mažesnė, bet svyravimai buvo mažesni), trumpesnį laiką buvo investuota – pinigai galėjo būti investuoti į indėlį. Teisybės vardan reikia paminėti, kad pastarajai strategijai komisinio mokesčio nepaskaičiavau.
Kitas klausimas – ar tikrai kiekvieną penktadienį esate pasiruošęs skaičiuoti ir ieškoti kas davė didžiausią grąžą per tam tikrą laikotarpį?

Pastaba: bid/ask ir komisiniai į skaičiavimus nebuvo įtraukti. Dėl pirmo – gali būti rimtų nukrypimų, jei akcijos kaina yra mažesnė nei 1 lt. Dėl komisinių – jie nebuvo įtraukti nei į indekso skaičiavimą nei į strategijos rezultatų skaičiavimą.

Comments (7)