星期二, 二月 14, 2012

如何绘制蜡烛图并添加自定义指标

股票分析中的蜡烛图和技术指标并非什么神奇的东西。指标只不过是过去历史数据的一种函数。再复杂的函数,其输入变量都是过去已经发生的事情。而过去发生的事情,未来不一定重复。所以在学术界,对于股票价格的走势大多是以带漂移项的随机过程来建模。其中重要的因素就是随机因子对于价格的冲击。

如果你用一个蒙特卡罗仿真构建一个虚拟的股票趋势,那些迷信技术分析的人看到了或许就会跑过来问你这支股票的代码。技术指标虽然没什么预测的能力,但技术指标可以告诉我们已经发生的事情,所以有时候需要绘制蜡烛图,可能还需要添加一些自定义的指标。R语言中的quantmod包是一个非常强悍的金融计算包,它可以帮助股票分析人员进行定量化交易的研发、测试和部署。有兴趣的同学可以参见它的官方网站,不过作者似乎很长时间没有更新了。另外,邓一硕在其博客中也对quantmod包作了很完整的总结,除了关键的交易系统建模部分。

本例希望讲解如何绘制蜡烛图,并添加股价变动的“偏度”指标,这里所谓股价的变动定义为收盘价与开盘价之差。在很多情况下股价变动呈一个钟形的分布,本例的自定义指标就是考虑该分布的偏度数值。
#首先加载必要的扩展包
library(quantmod)
library(e1071)
#读取2010年到2012年间的上证指数
getSymbols('^SSEC',from = '2010-01-01',to='2012-02-14')
#建立自定义指标函数来计算价格变化的偏度
skew.ind <- function(quotes,n.days=20){
    diff <- Cl(quotes)-Op(quotes)
    r <- matrix(NA,ncol=n.days,nrow = NROW(quotes))
    for (x in 1:n.days) r[ ,x] <- Lag(diff,x-1)
    x <- apply (r, 1, skewness)
    if (is.xts(quotes))
        xts(x,time(quotes))
    else x
}
#绘制最近6个月的蜡烛图并添加偏度指标
candleChart(last(SSEC,'6 months'),theme='white',TA=NULL)
addT1.ind<-newTA(FUN=skew.ind,col='red',legend='偏度')
addT1.ind()

没有评论:

发表评论