R语言之quantmod包
程序员文章站
2022-03-31 14:24:02
...
从传统的股市交易图表说起 量化投资 统计套利 算法交易 高频交易 当一种赚钱的交易策略被广大股民所掌握,这条规则就会趋于平行而失效。 量化投资 通过数据分析手段,来提供买卖股票的建议。 统计套利: 从历史交易中寻找套利机会,比如成对交易,将股票进行归类,当同一类的股票上升,而同类的其他股票有较大概率上升。 算法交易: 通过计算机程序发出指令,代替人为交易。交易的操作通过算法来计算。 高频交易: 利用市场的波动,快进快出。 中国股市还是处于政策市场,任何的趋势都会被*的政策所打压。 R语言 R是用于统计分析,统计绘图的语言和操作环境。 它是免费的,它有UNIX、LINUX、MacOS和WINDOWS版本。它拥有很多算法包。 R的特点 1.有效的数据处理和保存机制。 2.拥有一整套数组和矩阵的操作运算符。 3.一系列连贯而又完整的数据分析中间工具。 4.图形统计可以对数据直接进行分析和显示,可用于多种图形设备。 5.一种相当完善、简洁和高效的程序设计语言。它包括条件语句、循环语句、用户自定义的递归函数以及输入输出接口。 6.R语言是彻底面向对象的统计编程语言。 7.R语言和其它编程语言、数据库之间有很好的接口。 8.R语言是*软件,可以放心大胆地使用,但其功能却不比任何其它同类软件差。 9.R语言具有丰富的网上资源 Quantmod包中的函数 1.ETL类函数 2.分析类函数 3.展现类函数 加载程序包:library(quantmod) --获取上市公司股票的日交易数据,获取后的数据会保存到EDU变量中 >getSymbols("EDU",src="yahoo",from="2013-08-20",to="2013-09-02") --列出记录 >EDU --在全局环境下新建容器,容器是存放对象的。对象的名称是new.environment >new.environment<-new.env() --获取数据,并将获取后的记录放到AAPL中。AAPL通过env参数指定容器 >getSymbols("AAPL",env=new.environment,scr="yahoo",from="2013-10-01",to="2013-10-23") --列出new.environment容器下的所有变量 > ls(envir=new.environment) [1] "AAPL" --列出new.environment容器下AAPL变量值 > get("AAPL",envir=new.environment) AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted 2013-10-01 478.45 489.14 478.38 487.96 88470900 67.88 2013-10-02 485.63 491.80 483.75 489.56 72296000 68.10 2013-10-03 490.51 492.35 480.74 483.41 80688300 67.24 2013-10-04 483.86 484.60 478.60 483.03 64717100 67.19 2013-10-07 486.56 492.65 485.35 487.75 78073100 67.85 2013-10-08 489.94 490.64 480.54 480.94 72729300 66.90 2013-10-09 484.64 487.79 478.28 486.59 75431300 67.68 2013-10-10 491.32 492.38 487.04 489.64 69650700 68.11 2013-10-11 486.99 493.84 485.16 492.81 66934700 68.55 2013-10-14 489.83 497.58 489.35 496.04 65474500 69.00 2013-10-15 497.51 502.00 495.52 498.68 80018400 69.37 2013-10-16 500.79 502.53 499.23 501.11 62775300 69.70 2013-10-17 499.98 504.78 499.68 504.50 63398300 70.18 2013-10-18 505.99 509.26 505.71 508.89 72635500 70.79 2013-10-21 511.77 524.30 511.52 521.36 99526700 72.52 2013-10-22 526.41 528.45 508.03 519.87 133515900 72.31 2013-10-23 519.00 525.67 519.00 524.96 78430800 73.02 > --获取getSymbols命令的用法 > help(getSymbols) getFX() 函数 从oanda上获取汇率 --新建容器 >new.environment=new.env() --获取数据 >getFX("HKD/USD",from="2013-10-20",env=new.environment) --输出保存数据的记录 >get("HKD/USD",envir=new.environment) getFianacials()函数 从Google Finance上下载财务报表, >getFinancials("AAPL") >viewFinancials(AAPL.f) 分析类函数 1.is 族函数 2.hash 族函数 3.列名函数 4.计算函数 1.is 族函数 判断某数据是否是某类型的数据 is.OHLC() --Open price,High price,Low price Close price 开盘价,最高价,最低价和收盘价 is.OHLCV() --V 交易量 is.BBO() is.TBBO() is.HLC() 2.hash 函数 检查数据里面是否包含某类型的数据 > has.Op(AAPL) --是否包含开盘价 [1] TRUE > has.OHLC(AAPL) --是否包含开盘价,最高价,最低价,收盘价 [1] TRUE TRUE TRUE TRUE 3.列名函数 提取某种类型 > Op(AAPL) AAPL.Open 2013-10-01 478.45 2013-10-02 485.63 2013-10-03 490.51 2013-10-04 483.86 ... > Hi(AAPL) AAPL.High 2013-10-01 489.14 2013-10-02 491.80 2013-10-03 492.35 2013-10-04 484.60 > Lo(AAPL) AAPL.Low 2013-10-01 478.38 2013-10-02 483.75 2013-10-03 480.74 2013-10-04 478.60 4.计算函数 Delt() 计算变化率 Lag() 求滞后K期 Next() 所有观测值的值前进k个单位 first() 求前K个元素 last() 求后K个元素 --计算不同阶段的收益率 periodReturn() dailyReturn() weeklyReturn() monthlyReturn() quarterlyReturn() annualReturn() yearlyReturn() allReturn() Delt()函数 主要是用来计算一个序列的一个阶段到另一个阶段的变化率或者计算两个序列之间的变化率 --当天减去前一天的值,然后除以前一天的值 > Delt(Op(AAPL),type=("arithmetic")) Delt.1.arithmetic 2013-10-01 NA 2013-10-02 0.015006793 2013-10-03 0.010048803 2013-10-04 -0.013557318 2013-10-07 0.005580126 --(关盘价-开盘价)/开盘价 > Delt(Op(AAPL),Cl(AAPL)) Delt.0.arithmetic 2013-10-01 0.0198766851 2013-10-02 0.0080925808 2013-10-03 -0.0144747304 2013-10-04 -0.0017153722 --元素前进一天,485.63 本来是2013-10-02的数据 > Next(AAPL,1) Next 2013-10-01 485.63 2013-10-02 490.51 2013-10-03 483.86 2013-10-04 486.56 将数据转化为周数据或者月数据 周,将周初的开盘价作为开盘价,周内的最低价及最高价作为最高最低价 交易量则汇总周内的所有交易量 > to.weekly(AAPL) AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted 2013-10-04 478.45 492.35 478.38 483.03 306172300 67.19 2013-10-11 486.56 493.84 478.28 492.81 362819100 68.55 2013-10-18 489.83 509.26 489.35 508.89 344302000 70.79 2013-10-23 511.77 528.45 508.03 524.96 311473400 73.02 月,则将月初的开盘价作为开盘价,月初的关盘价作为月末的关盘价, 月内的最高价和最低价作为最高低价,交易量则汇总 > to.monthly(AAPL) AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted 十月 2013 478.45 528.45 478.28 524.96 1324766800 73.02 --分别获取AAPL,MSFT,ORCL,GOOG的信息数据,并存入变量 getSymbols(c("AAPL","MSFT","ORCL","GOOG"),env=new.environment,scr="yahoo") 求出Apple公司在2013.1-2013.10的股票总成交量使用 1.getSymbols("AAPL",env=new.environment,scr="yahoo",from="2013-01-01",to="2013-10-31") --将每个月的汇总数据放入变量AAPL中 2.a=to.monthly(get("AAPL",envir=new.environment)) --汇总1到10月的数据,汇总值为第五个Volume 3.sum(a[1:10,5]) 找出这些股票暴涨暴跌的时间点(例如开盘价或收盘价比前一天涨跌幅度超过2%) AAPL.Cl<-Delt(Cl(get("AAPL",envir=new.environment)),type=("arithmetic")) AAPL.Cl[which(abs(AAPL.Cl)>0.02),] plot(AAPL.Cl)