- R语言安装及环境配置
- 官网下载
- 常用R语言的IDE:RStudio
- RStudio简介
- 安装包
- 调用包
- 调用JQData数据
- 打包调用函数
- get_all_securities - 获取所有标的信息
- get_security_info - 获取单个标的信息
- get_index_stocks - 获取指数成份股
- get_margincash_stocks - 获取融资标的列表
- get_marginsec_stocks - 获取融券标的列表
- get_locked_shares - 获取限售解禁数据
- get_index_weights - 获取指数成份股权重(月度)
- get_industries - 获取行业列表
- get_industry - 查询股票所属行业
- get_industry_stocks - 获取行业成份股
- get_concepts - 获取概念列表
- get_concept_stocks - 获取概念成份股
- get_trade_days - 获取指定范围交易日
- get_all_trade_days - 获取所有交易日
- get_mtss - 获取融资融券信息
- get_money_flow - 获取资金流信息
- get_billboard_list - 获取龙虎榜数据
- get_future_contracts - 获取期货可交易合约列表
- get_dominant_future - 获取主力合约对应的标的
- get_fund_info - 基金基础信息数据
- get_current_tick - 获取最新的 tick 数据
- get_extras - 获取基金净值/期货结算价等
- get_price / get_bars - 获取指定时间周期的行情数据(合并为一个函数)
- get_ticks - 获取tick数据
- get_factor_values - 聚宽因子库数据
- run_query - 模拟JQDataSDK的run_query方法
- get_query_count - 获取查询剩余条数
# R语言安装及环境配置
## R语言可以通过官网下载
[CRAN](https://cran.r-project.org)

## 常用R语言的IDE:RStudio
与其他语言丰富的IDE不同,R语言目前最常用的开发环境为RStudio,同样可以通过[官网](https://www.rstudio.com/)下载
注意:必须先下载安装R语言完成之后,再下载、配置RStudio哦!


# RStudio简介
安装完成之后,我们打开RStudio看一下界面设置

基本上界面划分为5个部分
* Part 1: 目录栏,新建文档等均可在部分实现
* Part 2:草稿纸,编写、修改代码,点击`Run`运行
* Part 3: 控制台,所有代码均在此运行
* Part 4: 环境及历史,可以查看当前存储的变量和类型、格式,查看历史代码
* Part 5: 综合区,查看文件路径、图像展示、包文件及帮助文档
小伙伴们看懂英文很容易就上手啦,还有其他问题可以百度查一查哦!
# 安装包
重所周知,第三方包的安装是非常重要的,下面介绍两种方法安装
* Number 1
通过综合区`Packages`下的`install`可以很方便的安装

填入需要下载包的名字,便可自动下载
Tip1:下载多个包可以用逗号`,`隔开
Tip2:官网镜像可能下载速度有点慢,可以切换到国内镜像下载
* Number 2
通过控制台输入代码下载
```R
install.packages('package1','package2')
```
Tip:包名需要加引号`''`
## 调用包
下载完成之后,需要先调用包才能使用包中的函数,在控制台中使用`library()`函数调用

# 调用JQData数据
现附上[JQData](https://dataapi.joinquant.com/docs)链接
## 打包调用函数
为了方便使用JQData的接口,小编将复杂的调用过程打包成了函数`request`
```R
request <- function(method,list=FALSE,...){
'''
method:需要调用的数据函数
list:判断返回值是否为列表,如get_index_stocks需填TRUE以返回列表
其他参数在此后带参数名填写
'''
#加载包
library(httr)
library(readr)
library(rjson)
#获取调用凭证
url <- "https://dataapi.joinquant.com/apis"
body <- list(
method = "get_token",
mob = "181...", #手机号
pwd = "..." #密码
)
r <- POST(url, body = body, encode = "json")
token <- content(r)
body1 <- list(
method = method,
token = token,
...
)
r1 <- POST(url, body = body1, encode = 'json')
if(method == 'get_fund_info'){
result = fromJSON(content(r1))
return(result)
}else{
if(list==F){
df <- data.frame(read_csv(content(r1)),check.names = T)
return(df)
}else{
l <- strsplit(content(r1),'\n')
return(l)
}
}
}
```
定义完成之后我们就可以方便地调用JQData的api啦!
## get\_all_securities - 获取所有标的信息
```R
df <-request('get_all_securities',code='stock',date='2019-01-05')
rbind(head(df),tail(df)) # 查看数据首尾
```

## get\_security_info - 获取单个标的信息
```R
df <- request('get_security_info',code='000001.XSHE')
df
```

## get\_index_stocks - 获取指数成份股
```R
ls <- request('get_index_stocks',code='000300.XSHG',list = TRUE)
ls
```

## get\_margincash_stocks - 获取融资标的列表
```R
ls <- request('get_margincash_stocks',list = TRUE)
ls
```

## get\_marginsec_stocks - 获取融券标的列表
```R
ls <- request('get_marginsec_stocks',list = TRUE)
ls
```

## get\_locked_shares - 获取限售解禁数据
```R
df <- request('get_locked_shares',code="600000.XSHG",date="2010-09-29",end_date="2018-09-29")
df
```

解释
* num: 解禁股数
* rate1: 解禁股数/总股本
* rate2: 解禁股数/总流通股本
## get\_index_weights - 获取指数成份股权重(月度)
```R
df <- request('get_index_weights',code="000300.XSHG",date="2019-02-02")
rbind(head(df),tail(df))
```

## get_industries - 获取行业列表
```R
df <- request('get_industries',code="sw_l3")
rbind(head(df),tail(df))
```

行业代码
* sw_l1: 申万一级行业
* sw_l2: 申万二级行业
* sw_l3: 申万三级行业
* jq_l1: 聚宽一级行业
* jq_l2: 聚宽二级行业
* zjw: 证监会行业
## get_industry - 查询股票所属行业
```R
df <- request('get_industry',code="000001.XSHE")
df
```

## get\_industry_stocks - 获取行业成份股
```R
ls <- request('get_industry_stocks',code="HY007",list=TRUE)
ls
```

## get_concepts - 获取概念列表
```R
df <- request('get_concepts')
rbind(head(df),tail(df))
```

## get\_concept_stocks - 获取概念成份股
```R
ls <- request('get_concept_stocks',code='GN001',list=T)
ls
```

## get\_trade_days - 获取指定范围交易日
```R
ls <- request('get_trade_days',date='2018-01-01',end_date='2019-02-02',list=T)
ls
```

## get\_all_trade_days - 获取所有交易日
```R
ls <- request('get_all_trade_days',list=T)
ls
```
## get_mtss - 获取融资融券信息
```R
df <- request('get_mtss',code='000001.XSHE',date='2019-01-01',end_date='2019-02-02')
rbind(head(df),tail(df))
```

## get\_money_flow - 获取资金流信息
```R
df <- request('get_money_flow',code='000001.XSHE',date='2019-01-01',end_date='2019-02-02')
rbind(head(df),tail(df))
```

## get\_billboard_list - 获取龙虎榜数据
```R
df <- request('get_billboard_list',code='000001.XSHE',date='2016-08-01',end_date='2019-02-02')
bind(head(df),tail(df))
```

## get\_future_contracts - 获取期货可交易合约列表
```R
ls <- request('get_future_contracts',code='AU',date='2019-01-01',list=T)
ls
```

## get\_dominant_future - 获取主力合约对应的标的
```R
ls <- request('get_dominant_future',code='AU',date='2019-01-01',list=T)
ls
```

## get\_fund_info - 基金基础信息数据
```R
ls <- request('get_fund_info',code='519223.OF',date='2018-12-01')
```

返回:
- fund_name: 基金全称
- fund_type: 基金类型
- fund\_establishment_day: 基金成立日
- fund_manager: 基金管理人及基本信息
- fund\_management_fee: 基金管理费
- fund\_custodian_fee: 基金托管费
- fund_status: 基金申购赎回状态
- fund_size: 基金规模(季度)
- fund_share: 基金份额(季度)
- fund\_asset\_allocation_proportion: 基金资产配置比例(季度)
- heavy\_hold_stocks: 基金重仓股(季度)
- heavy\_hold\_stocks_proportion: 基金重仓股占基金资产净值比例(季度)
- heavy\_hold_bond: 基金重仓债券(季度)
- heavy\_hold\_bond_proportion: 基金重仓债券占基金资产净值比例(季度)
## get\_current_tick - 获取最新的 tick 数据
```R
df <- request('get_current_tick',code='000001.XSHE')
df
```

## get_extras - 获取基金净值/期货结算价等
```R
df <- request('get_extras',code='000001.XSHE',date='2019-01-01',end_date='2019-02-01')
rbind(head(df),tail(df))
```



返回值
* date: 日期
* is_st: 是否是ST,是则返回 True,否则返回 False。股票使用
* acc_net_value: 基金累计净值。基金使用
* unit_net_value: 基金单位净值。基金使用
* futures_sett_price: 期货结算价。期货使用
* futures_positions: 期货持仓量。期货使用
* adj_net_value: 场外基金的复权净值。场外基金使用
## get\_price / get_bars - 获取指定时间周期的行情数据(合并为一个函数)
```R
df <- request('get_price',code='000001.XSHE',count=10,unit='1d',end_date='2019-02-01')
df
```

返回值
* code: 股票代码
* count: 大于0的整数,表示获取bar的条数,不能超过5000
* unit: bar的时间单位, 支持如下周期:1m, 5m,15m, 30m, 60m, 120m, 1d, 1w, 1M。其中m表示分钟,d表示天,w表示周,M表示月
* end_date:查询的截止时间,默认是今天
* fq_ref_date:复权基准日期,该参数为空时返回不复权数据
### get_ticks - 获取tick数据
```R
df <- request('get_ticks',code='000001.XSHE',count=15,end_date='2019-02-01')
head(df)
```

## get_factor_values - 聚宽因子库数据
获取因子值的 API,[点击查看因子列表](https://www.joinquant.com/help/api/help?name=JQData#聚宽因子库(付费))
参数
- code: 单只股票代码
- columns: 因子名称,因子名称,多个因子用逗号分隔
- date: 开始日期
- end_date: 结束日期
```R
df <- request('get_factor_values',code='000001.XSHE',date='2019-01-20',end_date='2019-02-07',columns='net_profit_ratio,cfo_to_ev')
df
```

## run\_query - 模拟JQDataSDK的run_query方法
run\_query api 是模拟了JQDataSDK run_query方法获取财务、宏观、期权等数据
可查询的数据内容请查看[JQData文档](https://www.joinquant.com/help/api/help?name=JQData#获取标的基本信息)
参数:
- table: 要查询的数据库和表名,格式为 `database + . + tablename` 如`finance.STK_XR_XD`
- columns: 所查字段,为空时则查询所有字段,多个字段中间用,分隔。如`id,company_id`,columns不能有空格等特殊字符
- conditions: 查询条件,可以为空,格式为`report_date#>=#2006-12-01&`
`report_date#<=#2006-12-31`,条件内部#号分隔,格式: `column #` 判断符 `# value`,多个条件使用`&`号分隔,表示`and`,conditions不能有空格等特殊字符
- count: 查询条数
```R
df <- request('run_query',table='finance.STK_XR_XD',columns='company_id,company_name,code,report_date',
conditions='report_date#=#2006-12-01',count=10)
df
```

## get\_query_count - 获取查询剩余条数
```R
request('get_query_count',list=T)
```

Error in list == F :
comparison (1) is possible only for atomic and list types --报错?请帮助,谢谢!
2019-11-13
Error in curl::curl_fetch_memory(url, handle = handle) :
Failed to connect to dataapi.com port 443: Connection refused报错,请帮助,谢谢大佬们
2020-04-24