快速开始

下载SDK

这里下载最新的R SDK下载地址

安装配置

R语言环境的安装

linux或其他类unix操作系统中,R语言环境的安装大多推荐是用源码安装方式,tar包请从Cran镜像下载, 因为需要Rcpp扩展包的支持,请选择最新的R3.1+版本。

解压后进入目录,运行命令

$ ./configure
$ make

另外,现在常用的linux发行版本,如debian,CentOS等都有直接可用的二进制安装包。 比如,在debian下,用包管理器可以查到相关的R扩展工具包:

$ aptitude search r-cran- 

可根据需要选择安装相应的二进制包,不需要自己编译。

windows环境下,可以直接选择下载R-3.1.1-win.exe,安装注意根据你的操作系统32位还是64位来选择,然后在本地运行即可。

R环境中扩展包的安装

首先,运行R,或R的图形界面窗口中的菜单。 下面以控制台命令为例说明: 知道package名,要安装,可以直接运行install.packages('package_name') 命令,把参数换成你需要的扩展包名即可,比如需要安装xts

> install.packages('xts')

会让你选择镜像站点,然后安装过程是全自动的,包括依赖的包也会自动完成,上例中, 会先安装zoo包 如果记不清楚包名,还可以直接不带参数,install.packages()会返回所有的可用包列表。 为了方便安装,我们的包提供的是编译好的二进制包,直接解压在你个人的R扩展包目录下即可使用。 比如我的机器中,扩展包目录是~/R/i486-pc-linux-gnu-library/3.1/ Windows环境下,通常可以把解压的gmsdk.dll直接放在R安装目录下的library中,类似于\library\gmsdk\libs\i386\

R环境中使用扩展包

先需要加载包,用命令:

> library('gmsdk')

> require('gmsdk')  

如果提示需要别的包,请按提示安装,比如

> install.packages('Rcpp')

检查和使用

安装好后,输入如下命令检查:

> gmsdk::version()
[1] "v2.1.1"

使用我们提供的云服务,测试下历史数据的查询:

> username = 'demo@myquant.cn'
> password = '123456'
> gmsdk::login(username, password)
[1] "成功"

> gmsdk::query_bars('CFFEX.IF1509', 60, '2015-06-18 09:15:00', '2015-06-18 09:30:00')
            timestamp      bar_time exchange symbol   open   high    low  close volume     amount
1  2015-06-18 09:16:00 20150618091500    CFFEX IF1509 5119.6 5124.0 5102.8 5103.2    634  971737800
2  2015-06-18 09:16:59 20150618091600    CFFEX IF1509 5103.0 5103.0 5092.8 5094.2    982 1501137300
3  2015-06-18 09:18:00 20150618091700    CFFEX IF1509 5093.4 5105.4 5092.4 5104.6    415  634968060
4  2015-06-18 09:18:59 20150618091800    CFFEX IF1509 5104.4 5109.2 5102.8 5106.6    280  428878320
5  2015-06-18 09:20:00 20150618091900    CFFEX IF1509 5106.0 5107.4 5101.8 5101.8    204  312431880
6  2015-06-18 09:21:00 20150618092000    CFFEX IF1509 5101.8 5108.2 5101.2 5104.6    200  306301560
7  2015-06-18 09:21:59 20150618092100    CFFEX IF1509 5104.4 5104.8 5097.6 5098.8    314  480430500
8  2015-06-18 09:23:00 20150618092200    CFFEX IF1509 5098.2 5100.0 5090.2 5090.2    266  406553580
......

注:请注意Windows平台下R自带的RGui控制台窗口,有显示更新方面的问题,运行R程序会导致不响应, 建议使用RStudio。

我的第一个策略

为了方便,直接在代码中增加注释说明

# 设置系统时区,为了避免某些系统不能识别导致时间显示错误
Sys.setenv(TZ='Asia/Shanghai')

# 设置时间显示精度,显示毫秒
op <- options(digits.secs=6)

# 事件响应函数,简单回显
echo_data <- function(data) {
  print(data)
}

# 加载gmsdk
library(gmsdk)

# 分别设置交易的服务地址, 本地终端交易服务
#td_uri = 'localhost:8001'  

# 用户名、密码及代码
username = 'demo@myquant.cn'
password = '123456'
strategy_id = 'strategy_1'
symbols = 'CFFEX.IF1509.bar.15,CFFEX.IF1509.tick'
mode=3

# 回放相关参数,暂时不用
playback_start_time = '2015-06-18 09:15:00'
playback_end_time   = '2015-06-18 10:30:00'

# 以下是三种初始化方式
# 初始化行情
#md_init(mode, symbols)

# 初始化交易
#trade_init(strategy_id, td_uri)

# 初始化策略,行情和交易一起初始化
strategy(username,
        password,
        strategy_id,
        symbols,
        mode,
        playback_start_time,
        playback_end_time)

# 设置行情数据的处理
set_bar_handler(echo_data)
set_tick_handler(echo_data)

# 设置交易数据的处理
trade_set_execrpt_handler(echo_data)
trade_set_order_new_handler(echo_data)
trade_set_order_rejected_handler(echo_data)
trade_set_order_partially_filled_handler(echo_data)
trade_set_order_filled_handler(echo_data)
trade_set_order_stopped_handler(echo_data)
trade_set_order_cancel_rejected_handler(echo_data)
trade_set_trade_error_handler(echo_data)

# 设置交易中的下单,每5个bar下一次多单
bar_count = 0
interval = 5

on_bar <- function(bar) {
  print(bar)
  bar_count <<- bar_count + 1
  if (bar_count %% interval == 0) {
    trade_open_long('CFFEX', 'IF1509', 0.0, 1)
  } else {
    # 尝试平仓
    trade_close_long('CFFEX', 'IF1509', 0.0, 1)
  }
}

# 重新设置分时数据处理函数
set_bar_handler(on_bar)

tryCatch({
  run()
},  interrupt = function(interrupt) {
  cat(" -- an interrupt caught.\n");
  ##print(interrupt);
}, finally = {
  logout();
  cat("gmsdk service stopped.\n");
})

以上代码在有行情时,会输出对应的行情数据,包括股指IF1509的逐笔行情、15秒分时及下单的各级回应。 注:Ctrl + C 用户事件响应有些问题,停止策略需要杀掉进程

R API定义

SDK服务的登录、登出

gmsdk::login

掘金服务登录

参数

参数名 类型 说明
username string 掘金账号
password string 掘金密码
addr string 掘金数据服务器地址, <机器名/IP>:<端口号>格式,可不填,默认为cloud.myquant.cn

gmsdk::logout

登出

SDK服务的错误处理

gmsdk::set_error_handler

设置错误处理函数

回调函数模板:

on_md_error <- function(error, msg) {
        //handle the error info 
    }

行情初始化方法

gmsdk::md_init

行情初始化方法,新版行情接口进行了简化,通过mode来区分实时、模拟、回放和查询模式

参数:

参数名 类型 说明
mode int 订阅的行情类型,可选枚举值:
MD_MODE_LIVE,MD_MODE_SIMULATED,MD_MODE_PLAYBACK
symbols string 订阅代码列表
start_time string 回放行情的开始时间,仅用于MD_PLAYBACK模式,
格式:yyyy-mm-dd HH:MM:SS
end_time string 回放行情的结束时间,仅用于MD_PLAYBACK模式,
格式:yyyy-mm-dd HH:MM:SS

订阅和退订

gmsdk::subscribe

参数:

参数名 类型 说明
symbols string 订阅代码列表,参数格式: 'CFFEX.IF1506.tick,SHFE.ag1506.bar.60'

gmsdk::unsubscribe

退订

参数:

参数名 类型 说明
symbols string 退订代码列表

历史行情查询部分

gmsdk::query_bars

按时间段查询分时行情数据,支持单个代码

参数

参数名 类型 说明
symbols string 证券代码, 如CFFEX.IF1308
bar_type int bar周期,以秒为单位,比如60表示1分钟bar
begin_time string 开始时间, 如2013-8-14 00:00:00
end_time string 结束时间, 如2013-8-15 00:00:00

返回值:

bar数据列表

gmsdk::query_last_bars

查询最近的分时数据,支持多个代码

参数名 类型 说明
symbols string 多个证券代码列表, 如 'CFFEX.IF1308,CFFEX.1401,SHFE.AG1311'
bar_type int bar类型,以秒为单位, 如 60 表示1分钟分时K线

返回值:

bar数据列表

gmsdk::query_last_n_bars

查询最近的n笔分时数据,支持单个代码

参数名 类型 说明
symbols string 证券代码, 如CFFEX.IF1308
bar_type int bar类型,以秒为单位, 如 60 表示1分钟分时K线
n int bar类型,以秒为单位, 如 60 表示1分钟分时K线
end_time string 截止日期

返回值:

bar数据列表

gmsdk::query_ticks

按时间段查询逐笔行情

参数

参数名 类型 说明
symbols string 证券代码, 如CFFEX.IF1308
begin_time string 开始时间, 如2013-8-14 00:00:00
end_time string 结束时间, 如2013-8-15 00:00:00

返回值:

tick数据列表

gmsdk::query_last_ticks

查询最近的逐笔行情

参数

参数名 类型 说明
symbol_list string 多个证券代码列表, 如 'CFFEX.IF1308,CFFEX.1401,SHFE.AG1311'

返回值:

tick数据列表

gmsdk::query_last_n_ticks

查询最近的n笔逐笔行情

参数

参数名 类型 说明
symbols string 证券代码, 如CFFEX.IF1308
n int 数据个数
end_time string 截止日期

返回值:

tick数据列表

gmsdk::query_daily_bars

按时间段查询日线数据

参数

参数名 类型 说明
symbol string 证券代码, 如CFFEX.IF1308
begin_time string 开始时间, 如2013-8-14 00:00:00
end_time string 结束时间, 如2013-8-15 00:00:00

返回值:

DailyBar数据列表

gmsdk::query_last_daily_bars

查询最近日线数据

参数

参数名 类型 说明
symbol_list string 多个证券代码列表, 如 'CFFEX.IF1308,CFFEX.1401,SHFE.AG1311'

返回值:

DailyBar数据列表

gmsdk::query_last_n_daily_bars

查询最近n笔日线数据

参数

参数名 类型 说明
symbols string 证券代码, 如CFFEX.IF1308
n int 数据个数
end_time string 截止日期

返回值:

DailyBar数据列表

gmsdk::get_instruments

查询交易代码

参数:

参数名 类型 说明
exchange string 交易所名字,比如:SHSE,SZSE,CFFEX,DCE,SHFE,CZCE *
sec_type int 证券类型,比如:1,2,3,4,5==股票,基金,指数,期货,期权
is_active int 当前是否可以交易,1=可交易,0=全部

返回值:

交易代码列表

gmsdk::get_instruments_by_name

根据交易代码名字进行模糊查找,适用场景,比如根据期货品种查询所有合约

参数:

参数名 类型 说明
name string 交易代码名关键字,比如:300,IF, CF

返回值:

交易代码列表。

gmsdk::get_constituents

查询指数的成分股构成

参数:

参数名 类型 说明
index_symbol string 指数代码, 如SHSE.000300

返回值:

成分股列表

gmsdk::get_financial_index

查询某个时间段的财务指标

参数:

参数名 类型 说明
symbol_list string 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin string 开始日期, 如2015-10-19
t_end string 结束日期, 如2015-10-30

返回值:

财务指标列表

gmsdk::get_last_financial_index

查询最新的财务指标

参数:

参数名 类型 说明
symbol string 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码

返回值:

财务指标列表

gmsdk::get_last_n_financial_index

查询最新N笔财务指标

参数:

参数名 类型 说明
symbol string 证券代码, 带交易所代码以确保唯一,如SHSE.600000
n int 提取的数据条数

返回值:

财务指标列表

gmsdk::get_share_index

查询某个时间段的股本指标

参数:

参数名 类型 说明
symbol_list string 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin string 开始日期, 如2015-10-19
t_end string 结束日期, 如2015-10-30

返回值:

股本指标列表

gmsdk::get_last_share_index

查询最新的股本指标

参数:

参数名 类型 说明
symbol string 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码

返回值:

股本指标列表

gmsdk::get_last_n_share_index

查询最新N笔股本指标

参数:

参数名 类型 说明
symbol string 证券代码, 带交易所代码以确保唯一,如SHSE.600000
n int 提取的数据条数

返回值:

股本指标列表

gmsdk::get_market_index

查询某个时间段的市场指标

参数:

参数名 类型 说明
symbol_list string 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin string 开始日期, 如2015-10-19
t_end string 结束日期, 如2015-10-30

返回值:

市场指标列表

gmsdk::get_last_market_index

查询最新的市场指标

参数:

参数名 类型 说明
symbol string 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码

返回值:

市场指标列表

gmsdk::get_last_n_market_index

查询最新N笔市场指标

参数:

参数名 类型 说明
symbol string 证券代码, 带交易所代码以确保唯一,如SHSE.600000
n int 提取的数据条数

返回值:

市场指标列表

gmsdk::get_calendar

查询市场交易日历

参数:

参数名 类型 说明
exchange string 市场代码
start_time string 查询开始时间
end_time string 查询结束时间

返回值:

交易日列表

行情部分事件响应处理的关联函数

gmsdk::set_bar_handler

设置分时数据响应处理函数

回调函数模板:

    on_bar <- function(bar) {
        //handle the bar 
    }

gmsdk::set_tick_handler

设置tick逐笔行情响应处理函数

回调函数模板:

on_tick <- function(tick) {
        //handle the tick 
    }

交易基本操作

gmsdk::trade_init

交易初始化

参数

参数名 类型 说明
strategy_id string 策略ID
addr string 交易服务器地址, 格式 host name/ip:port num

gmsdk::trade_reconnect

重新连接交易通道

交易下单、撤单

gmsdk::trade_open_long

开多单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_open_long_sync

开多单同步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_open_short

开空单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_open_long_sync

开空单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_long

平多单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_long_yesterday

平昨多单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_long_sync

平多单同步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_long_yesterday_sync

平昨多单同步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_short

平空单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_short_yesterday

平昨空单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_short_sync

平空单同步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_close_short_yesterday_sync

平昨空单同步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_cancel_order

撤单异步接口

参数

参数名 类型 说明
cl_ord_id string 客户端委托ID,委托的唯一识别符(client order id)
交易帐户查询

gmsdk::trade_cancel_order_sync

撤单同步接口

参数

参数名 类型 说明
cl_ord_id string 客户端委托ID,委托的唯一识别符(client order id)
交易帐户查询

gmsdk::trade_place_order

原始下单异步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
order_type int 委托类型
side int 买卖方向 1: 买, 2: 卖
position_effect int 开平标志 1: 开, 2:平,3:平今, 4:平昨
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_place_order_sync

原始下单同步接口

参数

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
order_type int 委托类型
side int 买卖方向 1: 买, 2: 卖
position_effect int 开平标志 1: 开, 2:平,3:平今, 4:平昨
price double 价格:price==0为市价单,否则为限价单
volume double 数量

返回值:

委托请求的Order对象

gmsdk::trade_list_positions

查询所有持仓

参数:

返回值:

持仓列表

gmsdk::trade_query_position

查询指定代码和方向的持仓

参数:

参数名 类型 说明
exchange string 交易所代码
sec_id string 证券代码
side int 买卖方向 1: 买, 2: 卖

返回值:

持仓列表

gmsdk::trade_query_cash

查询帐户资金情况

参数:

返回值:

策略资金信息

gmsdk::trade_query_order

查询订单

参数:

参数名 类型 说明
cl_ord_id string 委托单的cl_ord_id, 下单时获得

返回值:

指定cl_ord_id 的委托信息

gmsdk::trade_get_orders

查询当前策略的委托信息。

参数:

参数名 类型 说明
start_time string 查询开始时间,如果为空或NULL, 则查询当天的委托
end_time string 查询结束时间,如果为空或NULL, 则查询当天的委托

返回值:

委托列表

gmsdk::trade_get_orders_by_symbol

根据代码查询当前策略的委托信息。

参数:

参数名 类型 说明
exchange string 市场代码
sec_id string 交易代码
start_time string 查询开始时间,如果为空或NULL, 则查询当天的委托
end_time string 查询结束时间,如果为空或NULL, 则查询当天的委托

返回值:

委托列表

gmsdk::get_broker_cash

查询当前策略关联的柜台账户的资金信息。

参数:

返回值:

资金信息列表

gmsdk::get_broker_positions

查询当前策略关联柜台账户的全部持仓信息。

参数:

返回值:

持仓信息列表

gmsdk::get_broker_accounts

查询当前策略关联柜台账户的信息。

参数:

返回值:

柜台账户列表

设置交易事件的响应函数

gmsdk::trade_set_execrpt_handler

设置成交回报响应的处理函数

gmsdk::trade_set_order_cancel_rejected_handler

设置撤单失败的响应处理

gmsdk::trade_set_order_new_handler

设置委托被接受的处理

gmsdk::trade_set_order_rejected_handler

设置委托被拒绝的处理

gmsdk::trade_set_order_partially_filled_handler

设置委托部分成交的处理

gmsdk::trade_set_order_filled_handler

设置委托订单完全成交的处理

gmsdk::trade_set_order_stopped_handler

设置委托停止交易的处理

gmsdk::set_error_handler

设置交易错误的响应处理

策略基本操作

gmsdk::strategy_init

初始化策略,同时初始化策略需要的行情和交易接口,输入参数如下:

参数

参数名 类型 说明
username string 掘金终端账号
password string 掘金终端密码
strategy_id string 策略ID
subscribe_symbols string 行情订阅的代码列表
mode int 枚举类型,行情模式
begin_time string 回放开始时间
end_time string 回放结束时间

gmsdk::run

在相关事件响应函数都设置完成后,用run函数来启动策略,

其他API

gmsdk::version

版本查询

gmsdk::get_strerror

查询错误码文本信息

参数

参数名 类型 说明
errorno int 错误码

简单说明:

为方便R语言中数据的处理习惯,gmsdk包中的接口数据返回已经转换成了Data Frame格式,可根据对应的列名直接访问,相应的字段意义也可以参考列名直接获得,省去了查询文档的麻烦。

举例如下:

> gmsdk::query_bars('CFFEX.IF1509', 60, '2015-06-18 09:15:00', '2015-06-18 09:30:00')
             timestamp       bar_time exchange symbol   open   high    low  close volume     amount
1  2015-06-18 09:16:00 20150618091500    CFFEX IF1509 5119.6 5124.0 5102.8 5103.2    634  971737800
2  2015-06-18 09:16:59 20150618091600    CFFEX IF1509 5103.0 5103.0 5092.8 5094.2    982 1501137300
3  2015-06-18 09:18:00 20150618091700    CFFEX IF1509 5093.4 5105.4 5092.4 5104.6    415  634968060
4  2015-06-18 09:18:59 20150618091800    CFFEX IF1509 5104.4 5109.2 5102.8 5106.6    280  428878320
5  2015-06-18 09:20:00 20150618091900    CFFEX IF1509 5106.0 5107.4 5101.8 5101.8    204  312431880
6  2015-06-18 09:21:00 20150618092000    CFFEX IF1509 5101.8 5108.2 5101.2 5104.6    200  306301560
7  2015-06-18 09:21:59 20150618092100    CFFEX IF1509 5104.4 5104.8 5097.6 5098.8    314  480430500
8  2015-06-18 09:23:00 20150618092200    CFFEX IF1509 5098.2 5100.0 5090.2 5090.2    266  406553580
......

如果对应时间段没有数据,会返回如下信息:

> gmsdk::query_bars('CFFEX.IF1409', 15, '2014-09-08 09:15:00', '2014-09-08 09:30:00')
[1] timestamp bar_time  exchange  symbol    open      high      low       close     volume    amount   
<0 rows> (or 0-length row.names)