加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转]构建基于R的交易系统(1)quantmod(来源:豆瓣-数据铺子)

(2014-01-15 11:20:05)
标签:

r

量化投资

交易系统

quant

quantmod

分类: Matlab-Python-Julia-R-etcL

生命不息,学习不止~

尊重原创,原帖地址(豆瓣-数据铺子):

http://site.douban.com/182577/widget/notes/10568316/note/299186532/

感谢 数据铺子 的“构建基于R的交易系统”系列帖子。

--- faruto

 

R当中可用于金融数据实证研究的R包数量很多,目前在CRAN中的这些R包大多数侧重比较学术化的金融数据的计量研究(参考http://cran.r-project.org/web/views/Finance.html), 比如著名的Rmetrics系列。可用于交易实践的工具依然有限,相关的资料也很分散。

 

 

这个系列文档,是将这些分散的资料进行整合的一个尝试。我将采用多个R包探讨构建可用于交易实证研究的完整交易系统。采用的这一系列R包包括:

-quantmod(数据和图形)

-TTR(技术分析)

-blotter(账户管理)

-FinancialInstrument(金融产品)

-quantstrast(策略模型)

-PerformanceAnalytics(表现分析)

 

这些R包依然在发展中(有些还被托管在R-forge里,见http://r-forge.r-project.org/R/?group_id=316), 但目前可用的部分已足以迅速地搭建起一个比较完善的交易研究平台。

 

1.构建交易系统的几个层次

 

-数据基础:R语言中的时间序列对象是一种复合的数据对象,包括一个记录时间序列数据的数据矩阵和一个相关联的表示时间的时间戳向量。这个层次主要涉及的R包有zooxts等。关于时间序列对象的基本操作相关资料很多,在此不作讨论。

 

-数据处理、图形和技术分析:quantmod包和TTR包。(目前)对单个证券建立基于技术分析的策略。就如同我们所常见的交易软件。

 

-交易策略和交易账户的管理:blooter包、quantstrast包和FinancialInstrument包。可以对投资组合进行策略建模。

 

-策略的表现和风险分析:PerformanceAnalytics

 

各包的细节在文中不作过多讨论,会以附录形式穿插在文档中。

 

2.数据处理和图形:quantmod

 

quantmod包:Quantitative Financial Modelling Frameworkhttp://www.quantmod.com/ 其目的在于为量化交易者提供一个进行建模的平台,目前的主要功能是获取交易数据进行处理并绘制交易图形。最主要的两个函数就是getSymbolschartSeries

 

1getSymbols

 

getSymbols用来获取数据。可以从R文件、数据库或者网络获取交易数据。

 

-Yahoo Finance / Google Finance,FRED,Oanda -csv, RData -MySQL, SQLite

 

关于getSymbols以前写过,在这里:http://site.douban.com/182577/widget/notes/10568316/note/264808127/

 

除了getSymbol及其变形,在quantmod里还有一系列的get函数, getSplits可以得到拆股的数据,getMetals可以得到金属期货的交易数据等

 

在使用getSymbols的时候要注意从网络获取的数据(如yahoo)可能会有错误的情况,使用时要慎重。另外,关于yahoo数据的价格复权调整,可参考http://help.yahoo.com/kb/index?locale=en_US&y=PROD_ACCT&page=content&id=SLN2311

 

关于复权的调整也可以使用adjustOHLC来完成(OHLC指的是开盘高点低点收盘),以当前价格向前复权:

 

library(quantmod)

 

getSymbols("IBM", from = "2000-01-01")

 

## [1] "IBM"

head(IBM)

## IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted

## 2000-01-03 112.4 116.0 111.9 116.0 10347700 97.65

## 2000-01-04 114.0 114.5 110.9 112.1 8227800 94.33

## 2000-01-05 112.9 119.8 112.1 116.0 12733200 97.65

## 2000-01-06 118.0 118.9 113.5 114.0 7971900 95.96

## 2000-01-07 117.2 117.9 110.6 113.5 11856700 95.54

## 2000-01-10 117.2 119.4 115.4 118.0 8540500 99.33

chartSeries(IBM, theme = "white")

[转]构建基于R的交易系统(1)quantmod(来源:豆瓣-数据铺子)

 

spl <- getSplits("IBM") #拆股

head(spl)

## IBM.spl

## 1973-05-29 0.80

## 1979-06-01 0.25

## 1997-05-28 0.50

## 1999-05-27 0.50

div <- getDividends("IBM") #分红

head(div)

## [,1]

## 1970-05-01 0.060

## 1970-07-31 0.060

## 1970-10-30 0.060

## 1971-02-05 0.065

## 1971-05-07 0.065

## 1971-08-06 0.065

adj <- adjustOHLC(IBM)

head(adj)

## IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted

## 2000-01-03 94.65 97.65 94.17 97.65 10347700 97.65

## 2000-01-04 95.96 96.39 93.33 94.33 8227800 94.33

## 2000-01-05 95.07 100.80 94.38 97.65 12733200 97.65

## 2000-01-06 99.33 100.12 95.54 95.96 7971900 95.96

## 2000-01-07 98.70 99.28 93.12 95.54 11856700 95.54

## 2000-01-10 98.70 100.49 97.12 99.33 8540500 99.33

chartSeries(adj, theme = "white")

[转]构建基于R的交易系统(1)quantmod(来源:豆瓣-数据铺子)

 

2chartSeries

 

不管我们使用何种的策略,依然习惯于使用图形来进行分析。 quantmod包里基本的作图函数是chartSeries

这个函数的主要参数包括:

 x 数据对象

 type 图的类型

theme chart.theme对象,图形的表现主题

subset 对数据取子集 TA 技术指标的参数

 

chartSeries(IBM, subset = "last 3 months", theme = "white") #基本作图

[转]构建基于R的交易系统(1)quantmod(来源:豆瓣-数据铺子)

 

# 可以对主题进行一些修改

Theme.white <- chartTheme("white")

names(Theme.white) #一个主题里包括的内容

## [1] "fg.col" "bg.col" "grid.col" "border"

## [5] "minor.tick" "major.tick" "up.col" "dn.col"

## [9] "dn.up.col" "up.up.col" "dn.dn.col" "up.dn.col"

## [13] "up.border" "dn.border" "dn.up.border" "up.up.border"

## [17] "dn.dn.border" "up.dn.border" "main.col" "sub.col"

## [21] "area" "fill" "Expiry" "theme.name"

 

Theme.white$bg.col <- "white"

Theme.white$dn.col <- "green" #下跌为绿

Theme.white$up.col <- "red" #上涨为红

Theme.white$border <- "lightgray"

IBM <- OHLC(IBM)

chartSeries(IBM, subset = "last 3 months", theme = Theme.white, TA = "addSMA(n=5,col="blue")")

# 去掉成交量,并加上均线

[转]构建基于R的交易系统(1)quantmod(来源:豆瓣-数据铺子)

图的类型有barChart(条形图)candleChart(蜡烛图) lineChart(线图)

要强调的是,虽然我们目前把quantmod当成构建交易系统的一个数据和图形的基础架构,quantmod的作者依然在功能的扩展上进行着开发,在quantmod包里还有一些实验性的函数,可以提供建立模型的功能以及更好的图形表现能力。希望这些实验性的工具能够尽早成熟。













0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有