快速开始

下载SDK

这里下载最新的C/C++ SDK下载地址

安装配置

C/C++ SDK包下载后只需解压即可使用。解压文件里提供了lib和dll文件,请根据策略程序的解决方案平台选择使用32位或者64位的dll,策略运行依赖于这个库文件,需要放在策略的可执行文件目录。

我的第一个策略

方式一,直接使用例子运行。

解压SDK包,使用visual studio 2010及以上版本运行examples中的策略示例。

方式二,通过策略向导创建自己的策略。

  1. 先参考这里注册账号,登录终端。

  2. 参考这里创建策略基本架构。编程语言选择C++,订阅上交所浦发银行(证券代码:600000)的Tick行情。

  3. 编写自己的策略逻辑。

以下是一个完整的策略代码示例额,策略逻辑:每收到一笔Tick行情,以最新价买入100股。

//处理逐笔行情事件
void on_tick(Tick *tick)
{
    gm_td_open_long(tick->exchange, tick->sec_id, tick->last_price, 100);
    cout << " openlong:  exchange " << tick->exchange
        << " sec_id " << tick->sec_id
        << " price" << tick->last_price;
}

int main(int argc, char *[])
{
    int ret = -1;

    //初始化策略,根据配置文件
    ret = strategy_init_with_config("strategy.ini");

    if (ret)
    {
        cout << "strategy init  error:" << ret << endl;
        system("pause");
        return ret;
    }

    // 设置事件回调函数
    gm_md_set_tick_callback(on_tick);

    cout << "策略起动成功!" << gm_strerror(ret) << endl;

    // 执行并等待策略运行结束
    ret = gm_run();

    if (ret)
    {
        cout << "error:" << ret << " msg:" << gm_strerror(ret) << endl;
        getchar();
    }

    return 0;
}

4.编译策略并运行。策略运行起来后,控制台打印策略的每一笔下单记录,在掘金终端的模拟交易中可查看策略的运行详情。

C/C++ API范例

策略接口范例

策略构建

如何构建策略

构建策略的三种方式:

  1. 掘金终端构建自己的策略,然后在构建的策略类中重写基类方法。

  2. 修改SDK包中的例子,构建自己的策略类。

  3. 参考API定义文档,自定义策略类。

策略运行

如何初始化策略

策略在运行前,必须先初始策略对象。

示例:策略初始化并订阅上交所浦发银行的实时Tick数据和1分钟的Bar数据。

方式一:以参数方式初始化策略

int ret = strategy_init("your username", 
                        "your password", 
                        "strategy_id", 
                        "SHSE.600000.tick,SHSE.600000.bar.60",
                        MD_MODE_LIVE,
                        "localhost:8001");

方式二:以配置文件方式初始化策略

strategy.ini为策略的配置文件,通过终端向导构建策略时会生成,设置了订阅上交所浦发银行的实时Tick数据和1分钟的Bar数据。

int ret = strategy_init_with_config("strategy.ini");

strategy.ini文件配置示例:

[strategy]
;掘金用户名
username=-
;掘金密码
password=-
;策略ID
strategy_id=3c7e70be-7e02-11e5-b293-5ec5d48ea63a
;订阅证券代码或合约代码列表
subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60
;行情模式,2-实时行情模式,3-模拟行情模式,4-回放行情模式
mode=2
;交易服务地址,使用掘金终端交易时,地址为localhost:8001, 如果此项配置为空,则订单发往掘金云服务器
td_addr=localhost:8001
如何运行策略

完善策略逻辑后,先初始化策略,然后运行策略。策略运行后,策略开始接收数据并执行策略逻辑。

int ret = gm_run();
如何停止策略
  1. 直接关闭程序来停止策略

  2. 调用api方式停止策略

gm_logout();    

策略模式

策略支持三种运行模式:

  1. 实时行情模式:订阅行情服务器推送的实时行情,也就是交易所的实时行情,只在交易时段提供。适用的场景是策略仿真交易和实盘交易阶段。

  2. 模拟行情模式:模拟行情是近期的历史行情,行情服务器将7*24小时不间断循环推送,推送频率近似实时行情。适用的场景是策略开发阶段,主要就是能方便随时随地都能有数据,能开发/调试策略,不受交易时段的限制。

  3. 回测模式:订阅指定时段、指定交易代码、指定数据类型的行情,行情服务器将按指定条件全速回放对应的行情数据。适用的场景是策略回测阶段,快速验证策略的绩效是否符合预期。

策略支持三种运行模式对应策略初始化的枚举值:

  1. 实时行情模式:MD_MODE_LIVE

  2. 模拟行情模式:MD_MODE_SIMULATED

  3. 回测模式:MD_MODE_PLAYBACK

如何回测策略

示例:回测时间为2014-10-25 09:30:00到2015-10-29 15:00:00,策略初始资金为1,000,000,委托成交为全部成交,手续费率万分之3,滑点比率为0.246,数据使用前复权。回测的证券代码及数据周期由订阅行情决定。

方式一:策略回测参数设置

int ret =strategy_backtest_config("2014-10-25 09:30:00", "2015-10-29 15:15:00", 
                1000000, 1, 0.0003, 0.246, 1);

方式二:初始化策略时配置文件中设置

int ret = strategy_init_with_config("strategy.ini");

在strategy.ini配置文件中添加backtest节点。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;策略回测参数配置
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[backtest]
;历史数据回放开始时间
start_time=2014-10-25 09:30:00
;历史数据回放结束时间
end_time=2015-10-29 15:15:00
;策略初始资金
initial_cash=1000000
;委托量成交比率,默认=1(每个委托100%成交)
transaction_ratio=1
;手续费率,默认=0(不计算手续费)
commission_ratio=0.0008
;滑点比率,默认=0(无滑点)
slippage_ratio=0.246
;行情复权模式,0=不复权,1=前复权
price_type=1
如何在非交易时间段调试策略

首先关联模拟交易通道

示例:订阅上交所浦发银行Tick行情和1分钟的Bar的模拟行情。

方式一:通过参数的方式设置:

int ret = strategy_init("your username", 
                        "your password", 
                        "strategy_id", 
                        "SHSE.600000.tick,SHSE.600000.bar.60",
                        MD_MODE_SIMULATED,
                        "localhost:8001");

方式二:通过配置方式初始化策略,策略的配置文件subscribe_symbols和mode节点值设置如下:

;订阅证券代码或合约代码列表
subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60
;行情模式,2-实时行情模式,3-模拟行情模式,4-回放行情模式
mode=3
如何设置策略仿真交易

首先需关联仿真交易通道

示例:订阅上交所浦发银行Tick行情和1分钟的Bar的实时行情。

方式一:通过参数的方式设置:

int ret = strategy_init("your username", 
                        "your password", 
                        "strategy_id", 
                        "SHSE.600000.tick,SHSE.600000.bar.60",
                        MD_MODE_LIVE,
                        "localhost:8001");

方式二:通过配置方式初始化策略,策略的配置文件strategy节点值设置如下:

;订阅证券代码或合约代码列表
subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60
;行情模式,2-实时行情模式,3-模拟行情模式,4-回放行情模式
mode=2
如何设置策略实盘交易
  1. 关联实盘交易通道

  2. 参考如何设置策略仿真交易,接收实时行情即可开始实盘交易。

策略事件

策略提供哪些事件

策略的基类提供策略3类事件:

  1. 登录事件:策略初始化时触发。

  2. 行情数据事件:接收实时行情数据时触发,主要有Tick行情事件和Bar行情事件。

  3. 交易相关事件:交易时触发,主要有下单、撤单、订单回报事件。

用户重写自己关注事件的回调方法完善策略逻辑。

数据接口范例

行情模式

掘金SDK提供回测行情、模拟行情、实时行情及历史行情数据。

  1. 回测行情、模拟行情和实时行情在订阅了symbol后,在策略的on_tick方法和on_bar方法中接收行情数据。

  2. 各频率的历史行情数据提供对应的api提取。

数据定义

数据类型分为Tick数据和Bar数据。

  1. Tick行情是指按交易所实际发送的行情数据。

  2. Bar数据是指各种频率的行情数据,可订阅1分、15分、60分的实时Bar数据。

  3. 日频数据提供DailyBar数据类型,日频仅在回测和历史数据提取时可用,不能实时订阅。

行情数据服务连接

如何初始化并连接行情数据服务

方式一:初始化策略的方式初始化行情服务,请参考如何初始化策略

方式二:直接通过行情数据初始化方法,该方式在仅需行情数据服务时使用

示例:初始化行情服务连接并订阅上交所浦发银行Tick行情和1分钟Bar数据

int ret = -1;
ret = gm_login("your username", "your password");
ret = gm_md_init(MD_MODE_LIVE, "SHSE.600000.tick,SHSE.600000.bar.60");

说明:

  1. 使用行情数据初始化方法时,需先调用gm_login方法登录SDK并认证。

  2. 行情支持实时行情、仿真行情和回测行情,初始化为回测行情时,请设置回测的起始时间参数。

如何重连行情服务

接收实时/模拟行情中途断开了连接,调用本函数重连

int ret = gm_md_reconnect();
如何订阅连接行情服务时的登录事件

初始化策略时或者直接初始化行情服务连接时,都会触发登录行情服务的事件

  1. 定义登录行情服务事件的回调方法

  2. 设置登录行情服务事件的回调方法

void on_md_login()
{

}

gm_md_set_login_callback(on_md_login);

行情订阅/退订

如何订阅指定证券代码的实时行情

示例:订阅上交所浦发银行Tick行情和1分钟Bar行情。

方式一:在策略初始化时订阅行情

  1. 初始化策略并订阅行情

  2. 设置策略的事件并编写事件的回调方法

  3. 运行策略

int ret = strategy_init("your username", 
                        "your password", 
                        "strategy_id", 
                        "SHSE.600000.tick, SHSE.600000.bar.60",
                        MD_MODE_LIVE,
                        "localhost:8001");

gm_md_set_tick_callback(on_tick);
gm_md_set_bar_callback(on_bar);

ret = gm_run();


void on_tick(Tick *tick)
{

}

void on_bar(Bar *bar)
{

}

方式二:在策略程序运行中订阅行情

  1. 初始化策略对象

  2. 订阅行情

  3. 设置策略的事件并编写事件的回调方法

  4. 运行策略

int ret = strategy.Init("your username", 
                        "your password", 
                        "strategy_id", 
                        "",
                        MD_MODE_LIVE,
                        "localhost:8001");

ret = gm_md_subscribe("SHSE.600000.tick,SHSE.600000.bar.60");

gm_md_set_tick_callback(on_tick);
gm_md_set_bar_callback(on_bar);

ret = gm_run();


void on_tick(Tick *tick)
{

}

void on_bar(Bar *bar)
{

}


如何订阅指定证券代码的DailyBar

日频行情仅在策略回测时订阅使用,其他策略运行模式下订阅将接收不到DailyBar。

示例:订阅上交所浦发银行的日频行情和深交所平安银行的日频行情。

1.策略初始化时订阅

int ret = strategy_init("your username", 
                        "password", 
                        "strategy_id", 
                        "SHSE.600000.bar.daily,SZSE.000001.bar.daily",
                        MD_MODE_SIMULATED,
                        "localhost:8001");

2.策略运行中订阅

int ret = gm_md_subscribe("SHSE.600000.bar.daily,SZSE.000001.bar.daily");
如何退订指定证券代码的行情

示例:退订上交所浦发银行的Tick行情和深交所平安银行的1分钟周期的Bar行情。

int ret = gm_md_unsubscribe("SHSE.600000.tick,SZSE.000001.bar.60");

历史数据提取

如何提取指定时间的Tick数据

示例:提取上交所浦发银行和深交所平安银行2015-10-29 9:30:00到2015-10-29 15:00:00的Tick数据。

Tick *tick = nullptr;
int  count = 0;
int  ret = gm_md_get_ticks("SHSE.600000,SZSE.000001", 
            "2015-10-29 9:30:00", "2015-10-29 15:00:00", 
            &tick, &count);
如何提取指定时间的Bar数据

示例:提取上交所浦发银行和深交所平安银行2015-10-29 10:00:00到2015-10-29 15:00:00的1分钟 周期Bar数据,提取30s、5分钟周期的Bar数据修改参数bar_type为30、300即可。

Bar *bar = nullptr;
int count = 0;
int ret = strategy.GetBars("SHSE.600000,SZSE.000001", 60, 
            "2015-10-29 10:00:00", "2015-10-29 15:00:00", 
            &bar, &count);
如何提取指定日期的DailyBar

示例:提取上交所浦发银行和深交所平安银行2014-10-29到2015-10-29的DailyBar。

DailyBar *dbar = nullptr;
int count = 0;
int ret = gm_md_get_dailybars("SHSE.600000,SZSE.000001", 
                            "2014-10-29", "2015-10-29",
                            &dbar, &count);

如何提取最近N笔Tick数据

示例:提取上交所浦发银行和深交所平安银行最近100笔Tick数据。

Tick *tick = nullptr;
int count = 0;
int ret = gm_md_get_last_n_ticks("SHSE.600000,SZSE.000001", 100, 
                            &tick, &count);
如何提取最近N个Bar数据

示例:提取上交所浦发银行和深交所平安银行最近20笔1分钟周期的bar数据,提取30s、5分钟周期的Bar数据修改参数bar_type为30、300即可。

Bar *bar = nullptr;
int count = 0;
int ret = gm_md_get_last_n_bars("SHSE.600000,SZSE.000001", 60, 20,
                             &bar, &count);
如何提取最近N个交易日的DailyBar

示例:提取上交所浦发银行和深交所平安银行最近20笔DailyBar数据。

DailyBar *dbar = nullptr;
int count = 0;
int ret = gm_md_get_last_n_dailybars("SHSE.600000,SZSE.000001", 20,
                            &dbar, &count);
如何提取最近1笔Tick数据

示例:提取上交所浦发银行和深交所平安银行最近1笔Tick数据。

Tick *tick = nullptr;
int  count = 0;
int  ret = gm_md_get_last_ticks("SHSE.600000,SZSE.000001", 
                            &tick, &count);
如何提取最近1个Bar数据

示例:提取上交所浦发银行和深交所平安银行最近1个1分钟周期的Bar数据,提取30s、5分钟周期的Bar数据修改参数bar_type为30、300即可。

Bar *bar = nullptr;
int count = 0;
int ret = gm_md_get_last_bars("SHSE.600000,SZSE.000001", 60,
                            &bar, &count);
如何提取最近1笔DailyBar数据

示例:提取上交所浦发银行和深交所平安银行最近1笔DailyBar数据。

DailyBar *dbar = nullptr;
int count = 0;
int ret = gm_md_get_last_dailybars("SHSE.600000,SZSE.000001", 
                            &dbar, &count);

行情事件

如何处理Tick事件和Bar事件

Tick、Bar事件在接收实时行情时触发,在Tick和Bar事件的回调方法中可接收订阅的Tick行情和Bar行情。

  1. 定义行情事件的回调方法
  2. 设置行情事件的回调方法
void on_tick(Tick *tick)
{

}

void on_bar(Bar *bar)
{

}

gm_md_set_tick_callback(on_tick);
gm_md_set_bar_callback(on_bar);
如何处理行情状态事件

行情状态事件在开盘、收盘、回放行情结束时触发。

  1. 定义行情状态事件的回调方法
  2. 设置行情状态事件的回调方法
void on_md_event(MDEvent *event)
{

}

gm_md_set_event_callback(on_md_event);

交易接口范例

交易相关数据类型

交易涉及到持仓、委托、成交回报、资金、绩效指标等数据类型,各数据类型的定义请点击相应的链接查看。

交易服务连接

如何初始化并连接交易服务

方式一:初始化策略的方式初始化并连接交易服务,请参考如何初始化策略

方式二:直接通过交易服务方法初始化,该方式在仅需交易服务时使用

示例:初始化交易服务,并连接到本地掘金终端服务

int ret = -1;
ret = gm_login("your username", "your password");
ret = gm_td_init("strategy_id", "localhost:8001");

说明 使用交易服务方法初始化时,需先调用gm_login方法登录SDK并认证

如何重连交易服务

交易服务断开时,可以调用本方法重连交易服务

int ret = gm_td_reconnect();

如何订阅连接交易服务时的登录事件

初始化策略时或者直接初始化交易服务连接时,都会触发登录交易服务的事件

  1. 定义登录交易服务事件的回调方法

  2. 设置登录交易服务事件的回调方法

void on_td_login()
{

}

gm_td_set_login_callback(on_td_login);

委托

如何开多仓

示例:市价买入1000股上交所浦发银行股票,市价开1手IF1512的多单。

注意:股票、基金等现货品种只有买入和卖出,对应下单类型是开多仓和平多仓。

1.调用异步接口,必须在策略执行了gm_run方法后调用有效。

int ret = -1;
Order order;
memset(&order, 0, sizeof(Order));

ret = gm_td_open_long("SHSE", "600000", 0, 1000, &order);
ret = gm_td_open_long("CFFEX", "IF1512", 0, 1, &order);

2.调用同步接口,无需策略执行gm_run方法。

int ret = -1;
Order order;
memset(&order, 0, sizeof(Order));

ret = gm_td_open_long_sync("SHSE", "600000", 0, 1000, &order);
ret = gm_td_open_long_sync("CFFEX", "IF1512", 0, 1, &order);
如何平多仓

示例:市价卖出1000股上交所浦发银行股票,市价平1手IF1512的多单。

注意:股票、基金等现货品种只有买入和卖出,对应下单类型是开多仓和平多仓。

1.调用异步接口,必须在策略执行了gm_run方法后调用有效。

int ret = -1;
Order order;
memset(&order, 0, sizeof(Order));

ret = gm_td_close_long("SHSE", "600000", 0, 1000, &order);
ret = gm_td_close_long("CFFEX", "IF1512", 0, 1, &order);

2.调用同步接口,无需策略执行gm_run方法。

int ret = -1;
Order order;
memset(&order, 0, sizeof(Order));

ret = gm_td_close_long_sync("SHSE", "600000", 0, 1000, &order);
ret = gm_td_close_long_sync("CFFEX", "IF1512", 0, 1, &order);
如何开空仓

示例:市价开1手IF1512的空单。

1.调用异步接口,必须在策略执行了gm_run方法后调用有效。

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_open_short("CFFEX", "IF1512", 0, 1, &order);

2.调用同步接口,无需策略执行gm_run方法。

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_open_short_sync("CFFEX", "IF1512", 0, 1, &order);
如何平空仓

示例:市价平1手IF1512的空单。

1.调用异步接口,必须在策略执行了gm_run方法后调用有效。

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_short("CFFEX", "IF1512", 0, 1, &order);

2.调用同步接口,无需策略执行gm_run方法。

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_short_sync("CFFEX", "IF1512", 0, 1, &order);
如何自定义下单

示例:市价开1手IF1512的多单

定义委托单对象

Order order;
memset(&order, 0, sizeof(Order));
strcpy_s( order.exchange, sizeof(order.exchange), "CFFEX" );
strcpy_s( order.sec_id, sizeof(order.sec_id), "IF1512");
order.side = OrderSide_Bid;
order.position_effect = PositionEffect_Open;
order.price = 0;
order.order_type = OrderType_BOC;
order.volume = 1;       

说明:

order.side: 设置买卖方向

order.position_effect:设置开平类型,上期所可设置平昨

order.order_type:设置委托类型,市价单还是限价单

1.调用异步接口,必须在策略执行了gm_run方法后调用有效。

int ret = gm_td_place_order(&order);

2.调用同步接口,无需策略执行gm_run方法。

int ret = gm_td_place_order_sync(&order);
如何撤回未成交订单

1.调用异步接口,必须在策略执行了gm_run方法后调用有效。

int ret = gm_td_cancel_order( "cl_ord_id" );

2.调用同步接口,无需策略执行gm_run方法。

int ret = gm_td_cancel_order_sync( "cl_ord_id" );      

说明:执行的结果由OnExecRpt, OnOrderCancelled, OnOrderCancelRejected回调方法返回

如何查询指定委托当前详情

初始化策略后直接调用接口。

Order *porder = nullptr;
int ret = gm_td_get_order( "cl_ord_id", &porder);

回报

订单的回报以交易事件的方式给出,当前提供的交易事件有:

  • 委托执行回报事件
  • 订单拒绝事件
  • 订单被柜台接受事件
  • 订单全部成交事件
  • 订单部分成交事件
  • 订单停止成交事件
  • 订单撤单拒绝事件

具体事件处理请参考交易事件处理章节。

资金

如何查询资金

Api提供查询当前策略的资金信息,初始化策略后直接调用接口。

Cash *cash = nullptr;
int ret = gm_td_get_cash(&cash);

持仓

如何获取指定证券代码的持仓

示例:获取上交所浦发银行持仓情况,初始化策略后直接调用接口。

Position *position = nullptr; 
int ret = gm_td_get_position("SHSE", "600000", OrderSide_Bid, &position);
如何获取当前策略的全部持仓信息

初始化策略后直接调用接口。

Position *position = nullptr;
int count = 0;
int ret = gm_td_get_positions(&position, &count);

绩效

如何获取当前策略的绩效指标

初始化策略后直接调用接口。

Indicator *indicator = nullptr;
int ret = gm_td_get_indicator( &indicator );

交易事件

当我们在程序下一笔委托单到交易服务时,将产生一系列交易事件。

如何处理订单执行回报事件

订单执行回报事件在委托执行时触发,订单的任何执行回报都会触发本事件。

  1. 定义订单执行回报事件的回调方法
  2. 设置订单执行回报事件的回调方法
void on_execrpt(ExecRpt *res)
{

}

gm_td_set_execrpt_callback(on_execrpt);
如何处理订单拒绝事件
  1. 定义订单拒绝事件的回调方法
  2. 设置订阅订单拒绝事件的回调方法
void on_order_rejected(Order *res)
{

}

gm_td_set_order_rejected_callback( on_order_rejected);
如何处理订单被交易所接收事件
  1. 定义订单接收事件的回调方法
  2. 设置订单接收事件的回调方法
void on_order_new(Order *res)
{

}

gm_td_set_order_new_callback(on_order_new);
如何处理订单全部成交事件

当一笔订单全部成交时触发本事件

  1. 定义订单全成事件的回调方法
  2. 设置订单全成事件的回调方法
void on_order_filled(Order *res)
{

}

gm_td_set_order_filled_callback(on_order_filled);
如何处理委托单部分成交的事件

当一笔订单有部分成交时触发。

  1. 定义订单部成事件的回调方法
  2. 设置订单部成事件的回调方法
void on_order_partiall_filled(Order *res)
{

}

gm_td_set_order_partially_filled_callback(on_order_partiall_filled);
如何处理停止订单执行事件

当订单停止执行时触发本事件,例如限价单收市时还未成交。

  1. 定义停止订单执行事件的回调方法
  2. 设置停止订单执行事件的回调方法
void on_order_stop_executed(Order *res)
{

}

gm_td_set_order_stop_executed_callback(on_order_stop_executed);
如何处理撤单拒绝事件
  1. 定义撤单拒绝事件的回调方法
  2. 设置撤单拒绝事件的回调方法
void on_order_cancel_rejected(ExecRpt *res)
{

}

gm_td_set_order_cancel_rejected_callback(on_order_cancel_rejected);
如何处理委托单状态变化事件

在自己的策略类中重写策略基类的OnOrderStatus方法,当委托单的状态发生变化时触发。

void on_order_status(Order *res)
{

}

gm_td_set_order_status_callback(on_order_status);

错误与版本等接口范例

如何处理策略登录事件
如何获取API版本信息
const char *version = gm_version();
如何获取API返回值及错误事件参数值的文本信息
  1. API返回值及错误事件的参数值都有统一的定义,查看返回值编码
  2. 调用方法获取错误信息
const char *error = gm_strerror(error_no);
如何获取策略运行中的错误信息

交易服务和行情服务均提供错误事件,自定义错误事件的回调方法可以获取行情和交易错误的信息。

行情错误事件:

  1. 定义行情错误事件的回调方法
  2. 设置行情错误事件的回调方法
void on_md_error(int error_code, const char *error_msg)
{

}

gm_md_set_error_callback(on_md_error);

交易错误事件:

  1. 定义交易错误事件的回调方法
  2. 设置交易错误事件的回调方法
void on_td_error(int error_code, const char *msg)
{

}

gm_td_set_error_callback(on_td_error);

C/C++ API接口

枚举常量定义

OrderStatus

委托状态定义

enum OrderStatus {
    OrderStatus_New = 1,                        //已报
    OrderStatus_PartiallyFilled = 2,            //部成
    OrderStatus_Filled = 3,                     //已成
    OrderStatus_DoneForDay = 4,                 //
    OrderStatus_Canceled = 5,                   //已撤
    OrderStatus_PendingCancel = 6,              //待撤
    OrderStatus_Stopped = 7,                    //停止
    OrderStatus_Rejected = 8,                   //已拒绝
    OrderStatus_Suspended = 9,                  //挂起
    OrderStatus_PendingNew = 10,                //待报
    OrderStatus_Calculated = 11,                //计算
    OrderStatus_Expired = 12,                   //已过期
    OrderStatus_AcceptedForBidding = 13,        //接受竞价
    OrderStatus_PendingReplace = 14             //待修改
};

PositionEffect

开平标识

enum PositionEffect {
    PositionEffect_Open = 1,                     //开仓
    PositionEffect_Close = 2,                    //平仓
    PositionEffect_CloseToday     = 3            //平今仓
    PositionEffect_CloseYesterday = 4            //平昨仓
};

ExecRptType

成交回报类型

enum ExecType {
    ExecType_New = 1,                   //已报
    ExecType_DoneForDay = 4,            //当日已完成
    ExecType_Canceled = 5,              //已撤销
    ExecType_PendingCancel = 6,         //待撤销
    ExecType_Stopped = 7,               //已停止
    ExecType_Rejected = 8,              //已拒绝
    ExecType_Suspended = 9,             //挂起
    ExecType_PendingNew = 10,           //待报
    ExecType_Calculated = 11,           //已计算
    ExecType_Expired = 12,              //过期
    ExecType_Restated = 13,             //重置
    ExecType_PendingReplace = 14,       //待修改
    ExecType_Trade = 15,                //成交
    ExecType_TradeCorrect = 16,         //成交更正
    ExecType_TradeCancel = 17,          //撤销
    ExecType_OrderStatus = 18,          //委托状态
    ExecType_CancelRejected = 19        //撤单被拒绝
};

Side

买卖方向

enum OrderSide {
    OrderSide_Bid = 1,              //多方向
    OrderSide_Ask = 2               //空方向
};

OrderType

委托类型

enum OrderType {
    OrderType_LMT = 0,       //限价委托(limit)                        
    OrderType_BOC = 1,       //对方最优价格(best of counterparty)     
    OrderType_BOP = 2,       //己方最优价格(best of party)            
    OrderType_B5TC = 3,      //最优五档剩余撤销(best 5 then cancel)   
    OrderType_B5TL = 4,      //最优五档剩余转限价(best 5 then limit)  
    OrderType_IOC = 5,       //即时成交剩余撤销(immediately or cancel)
    OrderType_FOK = 6,       //即时全额成交或撤销(fill or kill)       
    OrderType_AON = 7,       //全额成交或不成交(all or none)          
    OrderType_MTL = 8,       //市价剩余转限价(market then limit)      
    OrderType_EXE = 9        //期权行权(option execute)  
};

OrderRejectReason

委托拒绝原因

enum OrderRejectReason {
    OrderRejectReason_UnknownReason = 1,                //未知原因
    OrderRejectReason_RiskRuleCheckFailed = 2,          //不符合风控规则
    OrderRejectReason_NoEnoughCash = 3,                 //资金不足
    OrderRejectReason_NoEnoughPosition = 4,             //仓位不足
    OrderRejectReason_IllegalStrategyID = 5,            //非法策略ID
    OrderRejectReason_IllegalSymbol = 6,                //非法交易标的
    OrderRejectReason_IllegalVolume = 7,                //非法委托量
    OrderRejectReason_IllegalPrice = 8,                 //非法委托价
    OrderRejectReason_NoMatchedTradingChannel = 9,      //没有匹配的交易通道
    OrderRejectReason_AccountForbidTrading = 10,        //交易账号被禁止交易
    OrderRejectReason_TradingChannelNotConnected = 11,  //交易通道未连接
    OrderRejectReason_StrategyForbidTrading = 12,       //策略不允许交易
    OrderRejectReason_NotInTradingSession = 13          //非交易时段
};

行情数据类型

Tick

实时行情数据类型

typedef struct Tick
{
    char                   exchange[LEN_EXCHANGE];   ///<交易所代码
    char                   sec_id[LEN_SECID];        ///<证券ID
    double                 utc_time;                 ///<utc时间,精确到毫秒
    char                   strtime[LEN_ISO_DATATIME];  ///交易时间

    //以下为基础字段
    float                  last_price;               ///<最新价
    float                  open;                     ///<开盘价
    float                  high;                     ///<最高价
    float                  low;                      ///<最低价

    float                  bid_p1;                   ///<买价一
    float                  bid_p2;                   ///<买价二
    float                  bid_p3;                   ///<买价三
    float                  bid_p4;                   ///<买价四
    float                  bid_p5;                   ///<买价五
    int                    bid_v1;                   ///<买量一
    int                    bid_v2;                   ///<买量二
    int                    bid_v3;                   ///<买量三
    int                    bid_v4;                   ///<买量四
    int                    bid_v5;                   ///<买量五
    float                  ask_p1;                   ///<卖价一
    float                  ask_p2;                   ///<卖价二
    float                  ask_p3;                   ///<卖价三
    float                  ask_p4;                   ///<卖价四
    float                  ask_p5;                   ///<卖价五
    int                    ask_v1;                   ///<卖量一
    int                    ask_v2;                   ///<卖量二
    int                    ask_v3;                   ///<卖量三
    int                    ask_v4;                   ///<卖量四
    int                    ask_v5;                   ///<卖量五

    double                 cum_volume;               ///<成交总量
    double                 cum_amount;               ///<成交总金额/最新成交额,累计值
    long long              cum_position;             ///<合约持仓量(期),累计值
    double                 last_amount;              ///<瞬时成交额
    int                    last_volume;              ///<瞬时成交量(中金所提供)
    float                  upper_limit;              ///涨停价
    float                  lower_limit;              ///跌停价
    float                  settle_price;             ///今日结算价
    int                    trade_type;               ///1:'双开', 2: '双平', 3: '多开', 4:'空开', 5: '空平', 6:'多平', 7:'多换', 8:'空换' 
    float                  pre_close;                ///昨收价
}Tick;

Bar

周期数据类型

typedef struct Bar
{
    char                    exchange[LEN_EXCHANGE];   ///<交易所代码
    char                    sec_id[LEN_SECID];        ///<证券ID
    int                     bar_type;                 ///<分时周期类型(enum BarType)
    double                  utc_time;                     ///bar的开始时间
    char                    strtime[LEN_ISO_DATATIME];    ///bar的开始时间
    double                  utc_endtime;                  ///bar的结束时间
    char                    strendtime[LEN_ISO_DATATIME]; ///bar的结束时间

    float                   open;                     ///<开盘价
    float                   close;                    ///<收盘价
    float                   high;                     ///<最高价
    float                   low;                      ///<最低价
    double                  volume;                   ///<成交量
    double                  amount;                   ///<成交金额
    float                   pre_close;                ///前收盘价

    float                   adj_factor;                 //复权因子
    int                     flag;                       //除权出息,停牌等标记
}Bar;

DailyBar

日频数据类型

typedef struct DailyBar
{
    char                    exchange[LEN_EXCHANGE];     ///<交易所代码
    char                    sec_id[LEN_SECID];          ///<证券ID
    int                     bar_type;                   ///<分时周期类型(enum BarType)
    double                  utc_time;                   ///<UTC时间戳
    char                    strtime[LEN_ISO_DATATIME];  ///交易时间

    float                   open;                       ///<开盘价
    float                   close;                      ///<收盘价
    float                   high;                       ///<最高价
    float                   low;                        ///<最低价
    double                  volume;                     ///<成交量
    double                  amount;                     ///<成交金额

    long long               position;                   ///<持仓量
    float                   settle_price;               ///<结算价
    float                   upper_limit;                ///<涨停价
    float                   lower_limit;                ///<跌停价
    float                   pre_close;                  ///昨收价

    float                   adj_factor;                 //复权因子
    int                     flag;                       //除权出息,停牌等标记
}DailyBar;

MarketEvent

交易市场事件数据类型

typedef struct MDEvent
{
    double    utc_time;      //UTC时间戳[带毫秒]
    int       event_type;    //事件类型(1:开盘  2:收盘, 3:回放结束)
}MDEvent;

Instrument

交易代码数据类型

struct Instrument
{
    char       symbol[LEN_SYMBOL];        //交易代码
    int        sec_type;                  //代码类型
    char       sec_name[LEN_SEC_NAME];    //代码名称
    double     multiplier;                //合约乘数
    double     margin_ratio;              //保证金比率
    double     price_tick;                //价格变更单位 
    double     upper_limit;               //当天涨停板
    double     lower_limit;               //当天跌停板
    int        is_active;                 //当天是否交易
    char       update_time[LEN_ISO_DATATIME]; //更新时间
};

Constituent

成分股数据类型

struct Constituent
{
    char       symbol[LEN_SYMBOL];        //交易代码
    double     weight;                    //代码权重
};

FinancialIndex

财务指标数据类型

struct FinancialIndex
{
    char   symbol[LEN_SYMBOL];            //交易代码
    char   pub_date[LEN_PUB_DATE];        //公告日期
    double eps;                           //每股收益
    double bvps;                          //每股净资产
    double cfps;                          //每股现金流
    double afps;                          //每股公积金
    double total_asset;                   //总资产
    double current_asset;                 //流动资产
    double fixed_asset;                   //固定资产
    double liability;                     //负债合计
    double current_liability;             //流动负债
    double longterm_liability;            //长期负债
    double equity;                        //所有者权益
    double income;                        //主营业务收入
    double operating_profit;              //主营业务利润
    double net_profit;                    //净利润
};

ShareIndex

股本指标数据类型

struct ShareIndex
{
    char   symbol[LEN_SYMBOL];            //交易代码
    char   pub_date[LEN_PUB_DATE];        //公告日期
    double total_share;                   //总股本
    double flow_a_share;                  //流通A股
    double nonflow_a_share;               //限售流通A股
};

MarketIndex

市场指标数据类型

struct MarketIndex
{
    char   symbol[LEN_SYMBOL];            //交易代码
    char   pub_date[LEN_PUB_DATE];        //公告日期
    double pe_ratio;                      //收益率
    double pb_ratio;                      //市净率
    double ps_ratio;                      //市销率
    double market_value;                  //市值
    double market_value_flow;             //流通市值
};

TradeDate

交易日数据类型

struct TradeDate
{
    double   utc_time;                    //交易日(utc)
    char     strtime[LEN_ISO_DATATIME];   //交易日(string)
};

StockAdjustFactor

复权因子

struct StockAdjustFactor
{
    char       symbol[LEN_SYMBOL];         //股票代码
    char       trade_date[LEN_TRADE_DATE]; //交易日
    double     adj_factor;                 //复权因子
};

StockDivident

分红送股事件明细

struct StockDivident
{ 
    char       symbol[LEN_SYMBOL];         //股票代码
    char       div_date[LEN_TRADE_DATE];   //除权除息日
    double     cash_div;                   //每股派现
    double     share_div_ratio;            //每股送股比例
    double     share_trans_ratio;          //每股转增股比例
    double     allotment_ratio;            //每股配股比例
    double     allotment_price;            //配股价
};

VirtualContract

虚拟合约明细

struct VirtualContract
{
    char     vsymbol[LEN_SYMBOL];        //主力合约或连接合约代码
    char     symbol[LEN_SYMBOL];         //真实symbol
    char     trade_date[LEN_TRADE_DATE]; //交易日
};

交易数据类型

Position

持仓数据类型

typedef struct Position
{
    char strategy_id[LEN_ID];       //策略id

    char exchange[LEN_EXCHANGE];    //交易所代码
    char sec_id[LEN_SECID];         //交易标的代码,本地代码如IF1502
    int side;                       //买卖方向
    double volume;                  //持仓数量
    double volume_today;            //今仓量
    double amount;                  //持仓市值
    double vwap;                    //持仓成本

    double price;                   //当前价格
    double fpnl;                    //浮动赢动
    double cost;                    //持仓成本
    double order_frozen;            //挂单冻结仓位量
    double order_frozen_today;      //挂单冻结今仓仓位
    double available;               //可平仓位量
    double available_today;         //可平今仓位(volume_today-order_frozen_today)
    double available_yesterday;     //可平昨仓位(available - available_today)
    double last_price;              //上一次成交价
    double last_volume;             //上一次成交量

    double init_time;               //建仓时间
    double transact_time;           //仓位变更时间
}Position;

Order

委托数据类型

typedef struct Order
{
    char strategy_id[LEN_ID];       //策略id
    char account_id[LEN_ID];        //帐号id, 系统自动根据配置补充

    char cl_ord_id[LEN_ID];         //委托订单的客户方id
    char order_id[LEN_ID];          //委托订单的柜台生成id
    char ex_ord_id[LEN_ID];         //委托订单的交易所接受后生成id

    char exchange[LEN_EXCHANGE];    //交易所代码
    char sec_id[LEN_SECID];         //交易标的代码,本地代码如IF1502

    int position_effect;            //开平标志,取值参考enum PositionEffect
    int side;                       //买卖方向,取值参考enum OrderSide
    int order_type;                 //委托类型,取值参考enum OrderType
    int order_src;                  //委托来源,取值参考enum OrderSrc
    int status;                     //委托状态,取值参考enum OrderStatus
    int ord_rej_reason;             //委托拒绝原因,取值参考enum OrderRejectReason
    char ord_rej_reason_detail[LEN_INFO];   //委托被拒绝原因描述

    double price;                   //委托价格
    double stop_price;              //止损价
    double volume;                  //委托量
    double filled_volume;           //已成量
    double filled_vwap;             //已成均价
    double filled_amount;           //已成金额

    double sending_time;            //委托发送时间
    double transact_time;           //委托处理时间
 }Order;

ExecRpt

成交回报数据类型

typedef struct ExecRpt
{
    char strategy_id[LEN_ID];       //策略id

    char cl_ord_id[LEN_ID];         //委托订单的客户方id
    char order_id[LEN_ID];          //委托订单的柜台生成id
    char exec_id[LEN_ID];           //委托订单的交易所生成id

    char exchange[LEN_EXCHANGE];    //交易所代码
    char sec_id[LEN_SECID];         //交易标的代码,本地代码如IF1502

    int position_effect;            //开平仓标识
    int side;                       //买卖方向
    int ord_rej_reason;             //委托被拒绝原因类型
    char ord_rej_reason_detail[LEN_INFO];  //委托被拒绝原因描述
    int exec_type;

    double price;                   //成交价格
    double volume;                  //成交数量
    double amount;                  //成交金额

    double transact_time;           //成交时间
    }ExecRpt;

Cash

资金数据类型

typedef struct Cash
{
    char strategy_id[LEN_ID];       //策略id
    int currency;                   //货币类别

    double nav;                     //帐户净值
    double fpnl;                    //浮动赢亏
    double pnl;                     //总赢亏
    double profit_ratio;            //收益率
    double frozen;                  //持仓冻结金额
    double order_frozen;            //挂单冻结金额
    double available;               //可用资金

    double cum_inout;               //累计出入金总额
    double cum_trade;               //累计交易额
    double cum_pnl;                 //累计赢亏
    double cum_commission;          //累计交易费

    double last_trade;              //上次交易金额
    double last_pnl;                //上次总赢亏
    double last_commission;         //上次交易费
    double last_inout;              //上次出入金
    int change_reason;              //帐户变动类别

    double transact_time;           //帐户变动时间戳
}Cash;

Indicator

绩效指标

typedef struct Indicator
{
    char  strategy_id[LEN_ID];                   //策略ID                                             
    char  account_id[LEN_ID];                    //账号ID                                             

    double nav;                                  //净值(cum_inout + cum_pnl + fpnl - cum_commission)  
    double pnl;                                  //净收益(nav-cum_inout)                              
    double profit_ratio;                         //收益率(pnl/cum_inout)   
    double profit_ratio_bench;                   //基准收益率

    double sharp_ratio;                          //夏普比率                                           
    double risk_ratio;                           //风险比率     
    int open_count;                              //开仓次数
    int trade_count;                             //交易次数                                           
    int win_count;                               //盈利次数                                           
    int lose_count;                              //亏损次数                                           
    double win_ratio;                            //胜率                                               
    double max_profit;                           //最大收益                                           
    double min_profit;                           //最小收益                                           
    double max_single_trade_profit;              //最大单次交易收益                                   
    double min_single_trade_profit;              //最小单次交易收益                                   
    double daily_max_single_trade_profit;        //今日最大单次交易收益                               
    double daily_min_single_trade_profit;        //今日最小单次交易收益                               
    double max_position_value;                   //最大持仓市值或权益                                 
    double min_position_value;                   //最小持仓市值或权益                                 
    double max_drawdown;                         //最大回撤                                           
    double daily_pnl;                            //今日收益                                           
    double daily_return;                         //今日收益率                                         
    double annual_return;                        //年化收益率       

    double cum_inout;                            //累计出入金
    double cum_trade;                            //累计交易额
    double cum_pnl;                              //累计平仓收益(没扣除手续费)
    double cum_commission;                       //累计手续费

    double transact_time;                        //指标计算时间        
}Indicator;

BrokerAccount

柜台账户信息

typedef struct BrokerAccount
{
    char account_id[LEN_ID];                      //账号ID
    char username[LEN_USERNAME];                  //用户名
    bool permissible;                             //账号是否允许交易
    int  status;                                  //账户状态
}BrokerAccount;

策略初始化方法

strategy_init

初始化策略,设置服务地址,账号密码,策略ID,以及需要订阅的symbol列表。策略自动连接服务,并登陆,订阅对应的行情,准备好运行。

函数原型:

int strategy_init(
    const char   *username,
    const char   *password,
    const char   *strategy_id,
    const char   *subscribe_symbol_list,
    int           mode = MD_MODE_LIVE,
    const char   *td_addr = NULL
    );

参数:

参数名 类型 说明
username const char* 掘金终端账号
password const char* 掘金终端密码
strategy_id const char* 策略ID
subscribe_symbols const char* 行情订阅的代码列表
mode int 枚举类型,行情模式
td_addr const char* 交易服务器uri, 如设置为localhost:8001,则终端用户指向本地客户端 ,
如果设置为NULL, 则使用掘金云端服务

返回值:

返回值编码

示例:

初始化时订阅上交所浦发银行的Tick和1分钟Bar实时行情

int ret = strategy_init("your username", 
                        "your password", 
                        "strategy_id", 
                        "SHSE.600000.tick,SHSE.600000.bar.60",
                        MD_MODE_LIVE,
                        "localhost:8001");

注意项:

symbol_list 订阅代码表的参数格式

strategy_init_with_config

使用配置文件初始化策略,配置文件已设置服务地址,账号密码,策略ID,行情模式以及需要订阅的symbol列表

函数原型:

int strategy_init_with_config(const char *config_file);

参数:

参数名 类型 说明
config_file const char* 策略配置文件名

返回值:

返回值编码

示例:

strategy.ini文件配置:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;策略基本配置
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[strategy]
;掘金用户名
username=-
;掘金密码
password=-
;策略ID
strategy_id=3c7e70be-7e02-11e5-b293-5ec5d48ea63a
;订阅证券代码或合约代码列表
subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60
;行情模式,2-实时行情模式,3-模拟行情模式,4-回放行情模式
mode=2
;交易服务地址,使用掘金终端交易时,地址为localhost:8001, 如果此项配置为空,则订单发往掘金云服务器
td_addr=localhost:8001
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;策略回测参数配置
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[backtest]
;历史数据回放开始时间
start_time=2014-10-25 09:30:00
;历史数据回放结束时间
end_time=2015-10-29 15:15:00
;策略初始资金
initial_cash=1000000
;委托量成交比率,默认=1(每个委托100%成交)
transaction_ratio=1
;手续费率,默认=0(不计算手续费)
commission_ratio=0.0008
;滑点比率,默认=0(无滑点)
slippage_ratio=0.246
;行情复权模式,0=不复权,1=前复权
price_type=1
int ret = strategy_init_with_config("strategy.ini");

strategy_backtest_config

回测参数设置, 仅在回测模式下有效

函数原型:

int strategy_backtest_config(
    const char  *start_time,
    const char  *end_time,
    double initial_cash = 1000000,
    double transaction_ratio = 1,
    double commission_ratio = 0,
    double slippage_ratio = 0,
    int    price_type = 1,
    const char *bench_symbol = NULL,
    int    check_cache
    );

参数:

参数名 类型 说明
start_time const char* 回放行情开始时间,格式:yyyy-mm-dd HH:MM:SS
end_time const char* 回放行情结束时间,格式:yyyy-mm-dd HH:MM:SS
initial_cash double 回测初始资金,默认1000000
transaction_ratio double 委托量成交比率,默认1,按委托量全部成交
commission_ratio double 手续费率,默认0,无手续费
slippage_ratio double 滑点比率,默认0,无滑点
price_type int 复权方式,0-不复权,1-前复权
bench_symbol const char* 基准代码
check_cache int 回测时是否使用本地缓存数据,0-不使用,1-使用, 默认为值为 1

返回值:

返回值编码

示例:

回测时间为2014-10-25 09:30:00到2015-10-29 15:15:00,策略初始资金为1,000,000,委托成交为全部成交,手续费率万分之3,滑点比率为0.246,数据使用前复权。回测的证券代码及数据周期由订阅行情决定。

int ret = strategy_backtest_config("2014-10-25 09:30:00", "2015-10-29 15:15:00", 
                    1000000, 1, 0.0003, 0.246, 1);

策略启停方法

gm_run

运行策略

函数原型:

int gm_run();

参数:

返回值:

返回值编码

示例:

int ret = gm_run();

gm_logout

停止策略

函数原型:

void gm_logout();

参数:

返回值:

示例:

gm_logout();

行情订阅方法

gm_md_subscribe

订阅行情

函数原型:

int gm_md_subscribe(const char *symbol_list);

参数:

参数名 类型 说明
symbol_list const char * 订阅代码列表

返回值:

返回值编码

示例:

通过策略对象订阅上交所浦发银行Tick和1分钟Bar实时数据

int ret = gm_md_subscribe("SHSE.600000.tick,SHSE.600000.bar.60");

注意项:

symbol_list 订阅代码表的参数格式 当在回测模式下,需要显式关闭本地缓存api才能正常工作, 如何关闭本地缓存,请参见 strategy_backtest_config

gm_md_unsubscribe

退订指定行情

函数原型:

int gm_md_unsubscribe(const char *symbol_list);

参数:

参数名 类型 说明
symbol_list const char * 退订代码列表

返回值:

返回值编码

示例:

通过策略对象退订上交所浦发银行Tick和1分钟Bar实时数据

int ret = gm_md_unsubscribe("SHSE.600000.tick,SHSE.600000.bar.60");

注意项:

symbol_list 订阅代码表的参数格式 当在回测模式下,需要显式关闭本地缓存api才能正常工作, 如何关闭本地缓存,请参见 strategy_backtest_config

gm_md_resubscribe

重置订阅条件,相当于先退订原来所有行情,再重新订阅指定的行情

函数原型:

int gm_md_resubscribe(const char *symbol_list);

参数:

参数名 类型 说明
symbol_list const char * 订阅代码列表

返回值:

返回值编码

symbol_list 订阅代码表的参数格式 当在回测模式下,需要显式关闭本地缓存api才能正常工作, 如何关闭本地缓存,请参见 strategy_backtest_config

行情事件方法

gm_md_set_tick_callback

设置行情事件回调方法,收到tick行情时调用设置的回调方法。

函数原型:

void gm_md_set_tick_callback(MDTickCallback cb);

参数:

参数名 类型 说明
cb MDTickCallback Tick行情回调方法指针

返回值:

示例:

订阅Tick行情事件

void on_tick(Tick *tick);

gm_md_set_tick_callback(on_tick);

gm_md_set_bar_callback

设置行情事件回调方法,收到Bar行情时调用设置的回调方法。

函数原型:

void gm_md_set_bar_callback(MDBarCallback cb);

参数:

参数名 类型 说明
cb MDBarCallback Bar数据回调方法指针

返回值:

示例:

订阅Bar行情事件

void on_bar(Bar *bar);

gm_md_set_bar_callback(on_bar);

gm_md_set_error_callback

设置行情错误事件回调方法,行情出错时调用设置的回调方法,如行情连接断开错误。

函数原型:

void gm_md_set_error_callback(MDErrorCallback cb);

参数:

参数名 类型 说明
cb MDErrorCallback 行情错误回调方法指针

返回值:

示例:

订阅行情错误事件

void on_md_error(int error_code, const char *error_msg);

gm_md_set_error_callback(on_md_error);

gm_md_set_event_callback

设置行情事件的回调方法,如行情状态事件在开盘、收盘、回放行情结束事件。

函数原型:

void gm_md_set_event_callback(MDEventCallback cb);

参数:

参数名 类型 说明
cb MDEventCallback 行情事件回调方法指针

返回值:

示例:

订阅行情事件

void on_md_event(MDEvent *event);

gm_md_set_event_callback(on_md_event);

数据提取方法

gm_md_get_ticks

提取指定时间段的历史Tick数据,支持单个代码提取或多个代码组合提取。

函数原型:

int gm_md_get_ticks(const char *symbol_list, 
    const char *t_begin, 
    const char *t_end, 
    Tick **tick, 
    int *count);

参数:

参数名 类型 说明
symbol_list const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin const char * 开始时间, 如2015-10-30 09:30:00
t_end const char * 结束时间, 如2015-10-30 15:00:00
tick Tick ** 提取的Tick 数据
count int * 提取的Tick数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行2015-10-30 09:30:00到2015-10-30 15:00:00时间段的所有Tick数据

Tick *tick = nullptr;
int  count = 0;
int  ret = gm_md_get_ticks("SHSE.600000,SZSE.000001", 
            "2015-10-29 9:30:00", "2015-10-29 15:00:00", 
            &tick, &count);

gm_md_get_bars

提取指定时间段的历史Bar数据,支持单个代码提取或多个代码组合提取。

函数原型:

int gm_md_get_bars(const char *symbol_list, 
                int bar_type, 
                const char *t_begin, 
                const char *t_end, 
                Bar **bar, 
                int *count);

参数:

参数名 类型 说明
symbol_list const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
bar_type int bar周期,以秒为单位,比如60即1分钟bar
t_begin const char * 开始时间, 如2015-10-30 09:30:00
t_end const char * 结束时间, 如2015-10-30 15:00:00
bar Bar ** 提取的Bar 数据
count int * 提取的Bar数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行2015-10-30 09:30:00到2015-10-30 15:00:00时间段的1分钟Bar数据

Bar *bar = nullptr;
int count = 0;
int ret = strategy.GetBars("SHSE.600000,SZSE.000001", 60, 
            "2015-10-29 10:00:00", "2015-10-29 15:00:00", 
            &bar, &count);

gm_md_get_dailybars

提取指定时间段的历史日周期Bar数据,支持单个代码提取或多个代码组合提取。DailyBar比Bar多了部分静态数据,如结算价,涨跌停等。

函数原型:

int gm_md_get_dailybars(const char *symbol_list, 
            const char *t_begin, 
            const char *t_end, 
            DailyBar **dbar, 
            int *count);

参数:

参数名 类型 说明
symbol_list const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin const char * 开始日期, 如2015-10-19
t_end const char * 结束日期, 如2015-10-30
dbar DailyBar ** 提取的DailyBar 数据
count int * 提取的DailyBar数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行2015-10-19到2015-10-30时间段的DailyBar数据。

DailyBar *dbar = nullptr;
int count = 0;
int ret = gm_md_get_dailybars("SHSE.600000,SZSE.000001", 
                            "2015-10-19", "2015-10-30",
                            &dbar, &count);

gm_md_get_last_ticks

提取最新的1笔Tick数据,支持单个代码提取或多个代码组合提取。

函数原型:

int gm_md_get_last_ticks(const char *symbol_list, 
                        Tick **tick, int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
tick Tick ** 提取的Tick数据
count int * 提取的Tick数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行的最近1笔Tick数据

Tick *tick = nullptr;
int  count = 0;
int  ret = gm_md_get_last_ticks("SHSE.600000,SZSE.000001", 
                            &tick, &count);

gm_md_get_last_bars

提取最新1条Bar数据,支持单个代码提取或多个代码组合提取。

函数原型:

int gm_md_get_last_bars(const char *symbol_list, 
                        int bar_type,   
                        Bar **bar, 
                        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
bar_type int bar周期,以秒为单位,比如60即1分钟bar
bar Bar ** 提取的Bar数据
count int * 提取的Bar数据个数

返回值:

返回值编码

示例:

通过策略对象提取上交所浦发银行和深交所平安银行的最新的1笔1分钟Bar数据

Bar *bar = nullptr;
int count = 0;
int ret = gm_md_get_last_bars("SHSE.600000,SZSE.000001", 60,
                            &bar, &count);

gm_md_get_last_dailybars

提取最新1条DailyBar数据,支持单个代码提取或多个代码组合提取。

函数原型:

int gm_md_get_last_dailybars(const char *symbol_list, 
                        DailyBar **dbar, 
                        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
dbar DailyBar ** 提取的DailyBar数据
count int * 提取的DailyBar数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行的最近一笔DailyBar数据

DailyBar *dbar = nullptr;
int count = 0;
int ret = gm_md_get_last_dailybars("SHSE.600000,SZSE.000001", 
                            &dbar, &count);

gm_md_get_last_n_ticks

提取单个代码最新n笔Tick数据。

函数原型:

int gm_md_get_last_n_ticks(const char *symbol, 
        int n, 
        Tick **tick, 
        int *count);

参数:

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

返回值:

返回值编码

示例:

提取上交所浦发银行的最近10笔Tick数据

Tick *tick = nullptr;
int count = 0;
int ret = gm_md_get_last_n_ticks("SHSE.600000", 10, &tick, &count);

gm_md_get_last_n_ticks_by_time

提取指定时间点前单个代码最新n笔Tick数据。

函数原型:

int gm_md_get_last_n_ticks_by_time(const char *symbol, 
        int n, 
        const char *end_time, 
        Tick **tick, 
        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000
n int 提取的数据条数
end_time string 指定时间点
tick Tick ** 提取的Tick数据
count int * 提取的Tick数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行的2016-01-01前最近10笔Tick数据

Tick *tick = nullptr;
int count = 0;
int ret = gm_md_get_last_n_ticks_by_time("SHSE.600000", "2016-01-01 00:00:00", 10, &tick, &count);

gm_md_get_last_n_bars

提取单个代码的最新n条Bar数据。

函数原型:

int gm_md_get_last_n_bars(const char *symbol, 
                int bar_type, 
                int n, 
                Bar **bar, 
                int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000
bar_type int bar周期,以秒为单位,比如60即1分钟bar
n int 提取的数据条数
bar Bar ** 提取的Bar数据
count int * 提取的Bar数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行的最近10笔1分钟Bar数据

Bar *bar = nullptr;
int count = 0;
int ret = gm_md_get_last_n_bars("SHSE.600000", 60, 10, &bar, &count);

gm_md_get_last_n_bars_by_time

提取指定时间点前单个代码最新n笔Bar数据。

函数原型:

int gm_md_get_last_n_bars_by_time(const char *symbol, 
        int bar_type, 
        int n, 
        const char *end_time, 
        Bar **bar, 
        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000
bar_type int bar周期,以秒为单位,比如60即1分钟bar
n int 提取的数据条数
end_time string 指定时间点
tick Tick ** 提取的Tick数据
count int * 提取的Tick数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行的2016-01-01前最近10笔Bar数据

Bar *bar = nullptr;
int count = 0;
int ret = gm_md_get_last_n_bar_by_time("SHSE.600000", "2016-01-01 00:00:00", 10, &bar, &count);

gm_md_get_last_n_dailybars

提取单个代码的最新n条DailyBar数据。

函数原型:

int gm_md_get_last_n_dailybars(const char *symbol, 
                int n, 
                DailyBar **dbar, 
                int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000
n int 提取的数据条数
dbar DailyBar ** 提取的Bar数据
count int * 提取的Bar数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行的最近10笔1分钟DailyBar数据

DailyBar *dbar = nullptr;
int count = 0;
int ret = gm_md_get_last_n_dailybars("SHSE.600000", 10, &dbar, &count);

gm_md_get_last_n_dailybars_by_time

提取指定时间点前单个代码最新n笔Dailybar数据。

函数原型:

int gm_md_get_last_n_dailybars_by_time(const char *symbol, 
        int n, 
        const char *end_time, 
        Dailybar **dbar, 
        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000
n int 提取的数据条数
end_time string 指定时间点
dbar Dailybar ** 提取的Tick数据
count int * 提取的Tick数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行的2016-01-01前最近10笔Dailybar数据

Dailybar *dbar = nullptr;
int count = 0;
int ret = gm_md_get_last_n_dailybars_by_time("SHSE.600000", "2016-01-01 00:00:00", 10, &tick, &count);

gm_md_get_instruments

查询交易代码

函数原型:

int gm_md_get_instruments(
        const char *exchange, 
        int sec_type, 
        int is_active,
        Instrument **instrument, 
        int *count);

参数:

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

返回值:

返回值编码

示例:

提取上交所的可交易的股票代码

Instrument *instrument = nullptr;
int count = 0;
int ret = gm_md_get_instruments("SHSE", 1, 1, &instrument, &count);

gm_md_get_instruments_by_name

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

函数原型:

int gm_md_get_instruments_by_name(
        const char *name, 
        Instrument **instrument, 
        int *count);

参数:

参数名 类型 说明
name const char * 交易代码名关键字,比如:300,IF, CF
instrument Instrument ** 提取的instrument数据
count int * 提取的instrument数据个数

返回值:

返回值编码

示例:

提取IF的所有合约

Instrument *instrument = nullptr;
int count = 0;
int ret = gm_md_get_instruments_by_name("IF", &instrument, &count);

gm_md_get_constituents

查询指数的成分股构成

函数原型:

int gm_md_get_constituents(
        const char *index_symbol, 
        Constituent **constituent, 
        int *count);

参数:

参数名 类型 说明
index_symbol const char * 指数代码, 如SHSE.000300
constituent Constituent ** 提取的constituent数据
count int * 提取的constituent数据个数

返回值:

返回值编码

示例:

提取沪深300指数的成分股

Constituent *constituent = nullptr;
int count = 0;
int ret = gm_md_get_conbstituents("SHSE.000300", &constituent, &count);

gm_md_get_financial_index

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

函数原型:

int gm_md_get_financial_index(const char *symbol_list, 
            const char *t_begin, 
            const char *t_end, 
            FinancialIndex **fi, 
            int *count);

参数:

参数名 类型 说明
symbol_list const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin const char * 开始日期, 如2015-10-19
t_end const char * 结束日期, 如2015-10-30
fi FinancialIndex ** 提取的FinancialIndex 数据
count int * 提取的FinancialIndex数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行2015-10-19到2015-10-30时间段的FinancialIndex数据。

FinancialIndex *fi = nullptr;
int count = 0;
int ret = gm_md_get_financial_index("SHSE.600000,SZSE.000001", 
                            "2015-10-19", "2015-10-30",
                            &fi, &count);

gm_md_get_last_financial_index

查询最新的财务指标

函数原型:

int gm_md_get_last_financial_index(const char *symbol_list, 
                        FinancialIndex **fi, 
                        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
fi FinancialIndex ** 提取的FinancialIndex数据
count int * 提取的FinancialIndex数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行的最近一笔FinancialIndex数据

FinancialIndex *fi = nullptr;
int count = 0;
int ret = gm_md_get_last_financial_index("SHSE.600000,SZSE.000001", 
                            &fi, &count);

gm_md_get_last_n_financial_index

查询最新N笔财务指标

函数原型:

int gm_md_get_last_n_financial_index(const char *symbol, 
                int n, 
                FinancialIndex **fi, 
                int *count);

参数:

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

返回值:

返回值编码

示例:

提取上交所浦发银行的最近10笔FinancialIndex数据

FinancialIndex *fi = nullptr;
int count = 0;
int ret = gm_md_get_last_n_financial_index("SHSE.600000", 10, &fi, &count);

gm_md_get_share_index

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

函数原型:

int gm_md_get_share_index(const char *symbol_list, 
            const char *t_begin, 
            const char *t_end, 
            ShareIndex **si, 
            int *count);

参数:

参数名 类型 说明
symbol_list const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin const char * 开始日期, 如2015-10-19
t_end const char * 结束日期, 如2015-10-30
si ShareIndex ** 提取的ShareIndex 数据
count int * 提取的ShareIndex数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行2015-10-19到2015-10-30时间段的ShareIndex数据。

ShareIndex *si = nullptr;
int count = 0;
int ret = gm_md_get_share_index("SHSE.600000,SZSE.000001", 
                            "2015-10-19", "2015-10-30",
                            &si, &count);

gm_md_get_last_share_index

查询最新的股本指标

函数原型:

int gm_md_get_last_share_index(const char *symbol_list, 
                        ShareIndex **si, 
                        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
si ShareIndex ** 提取的ShareIndex数据
count int * 提取的ShareIndex数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行的最近一笔ShareIndex数据

ShareIndex *si = nullptr;
int count = 0;
int ret = gm_md_get_last_share_index("SHSE.600000,SZSE.000001", 
                            &si, &count);

gm_md_get_last_n_share_index

查询最新N笔股本指标

函数原型:

int gm_md_get_last_n_share_index(const char *symbol, 
                int n, 
                ShareIndex **si, 
                int *count);

参数:

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

返回值:

返回值编码

示例:

提取上交所浦发银行的最近10笔ShareIndex数据

ShareIndex *si = nullptr;
int count = 0;
int ret = gm_md_get_last_n_share_index("SHSE.600000", 10, &si, &count);

gm_md_get_market_index

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

函数原型:

int gm_md_get_market_index(const char *symbol_list, 
            const char *t_begin, 
            const char *t_end, 
            MarketIndex **mi, 
            int *count);

参数:

参数名 类型 说明
symbol_list const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
t_begin const char * 开始日期, 如2015-10-19
t_end const char * 结束日期, 如2015-10-30
mi MarketIndex ** 提取的MarketIndex 数据
count int * 提取的MarketIndex数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行2015-10-19到2015-10-30时间段的MarketIndex数据。

MarketIndex *mi = nullptr;
int count = 0;
int ret = gm_md_get_market_index("SHSE.600000,SZSE.000001", 
                            "2015-10-19", "2015-10-30",
                            &mi, &count);

gm_md_get_last_market_index

查询最新的市场指标

函数原型:

int gm_md_get_last_market_index(const char *symbol_list, 
                        MarketIndex **mi, 
                        int *count);

参数:

参数名 类型 说明
symbol const char * 证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码
mi MarketIndex ** 提取的MarketIndex数据
count int * 提取的MarketIndex数据个数

返回值:

返回值编码

示例:

提取上交所浦发银行和深交所平安银行的最近一笔MarketIndex数据

MarketIndex *mi = nullptr;
int count = 0;
int ret = gm_md_get_last_market_index("SHSE.600000,SZSE.000001", 
                            &mi, &count);

gm_md_get_last_n_market_index

查询最新N笔市场指标

函数原型:

int gm_md_get_last_n_market_index(const char *symbol, 
                int n, 
                MarketIndex **mi, 
                int *count);

参数:

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

返回值:

返回值编码

示例:

提取上交所浦发银行的最近10笔MarketIndex数据

MarketIndex *mi = nullptr;
int count = 0;
int ret = gm_md_get_last_n_market_index("SHSE.600000", 10, &mi, &count);

gm_md_get_calendar

查询市场交易日历

函数原型:

int gm_md_get_calendar(const char *exchange, const char *start_time, const char *end_time, TradeDate **trade_date, int *count);

参数:

参数名 类型 说明
exchange const char * 市场代码
start_time const char * 查询开始时间
end_time const char * 查询结束时间
mi TradeDate ** 提取的TradeDate数据
count int * 提取的TradeDate数据个数

返回值:

返回值编码

示例:

提取上交所2016年的交易日历

TradeDate *td = nullptr;
int count = 0;
int ret = gm_md_get_calendar("SHSE", "2016-01-01", "2016-12-31", &td, &count);

gm_md_get_stock_adj

查询复权因子

函数原型:

int gm_md_get_stock_adj(const char *symbol, const char *start_time, const char *end_time, StockAdjustFactor **adj_factor, int *count);

参数:

参数名 类型 说明
symbol const char * 如:SZSE.000001
start_time const char * 查询开始时间
end_time const char * 查询结束时间
adj_factor StockAdjustFactor ** 提取的StockAdjustFactor数据
count int * 提取的StockAdjustFactor数据个数

返回值:

返回值编码

gm_md_get_divident

查询分红送股明细

函数原型:

int gm_md_get_divident(const char *symbol, const char *start_time, const char *end_time, StockDivident **divident, int *count);

参数:

参数名 类型 说明
symbol const char * 如:SZSE.000001
start_time const char * 查询开始时间
end_time const char * 查询结束时间
divident StockDivident ** 提取的StockDivident数据
count int * 提取的StockDivident数据个数

返回值:

返回值编码

gm_md_get_virtual_contract

查询虚拟合约和真实合约对应关系

函数原型:

int gm_md_get_virtual_contract(const char *vsymbol, const char *start_time, const char *end_time, VirtualContract **vcontract, int *count);

参数:

参数名 类型 说明
vsymbol const char * 如:CFFEX.IF, CFFEX.IF00
start_time const char * 查询开始时间
end_time const char * 查询结束时间
vcontract VirtualContract ** 提取的VirtualContract数据
count int * 提取的VirtualContract数据个数

返回值:

返回值编码

交易下单方法

gm_td_open_long

异步开多仓接口,以参数指定的symbol、价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_open_long(const char *exchange,
                const char *sec_id, 
                double price, 
                double volume, 
                Order *order=NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如上交所SHSE
sec_id const char * 证券代码,如浦发银行600000
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 委托量
order Order 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

市价买入1000股上交所浦发银行

Order order;
memset(&order, 0, sizeof(Order));

int ret = gm_td_open_long("SHSE", "600000", 0, 1000, &order);

注意事项:

该接口为异步下单接口,需执行gm_run方法后才能正常运行

gm_td_open_short

异步开空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_open_short(const char *exchange, 
                const char *sec_id, 
                double price, 
                double volume, 
                Order *order=NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如金融期货交易所 CFFEX
sec_id const char * 证券代码,如股指期货合约1511 IF1511
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 委托量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价开1手股指期货合约IF1511的空单

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_open_short("CFFEX", "IF1511", 0, 1, &order);

注意事项:

  1. 该接口为异步下单接口,需执行gm_run方法后才能正常运行

  2. 平仓接口只对期货有效,现货不存在空仓单

gm_td_close_long

异步平多仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_close_long(const char *exchange, 
                const char *sec_id, 
                double price, 
                double volume, 
                Order *order=NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如上交所 SHSE
sec_id const char * 证券代码,如浦发银行 600000
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

在策略类的方法中以市价卖出1000股上交所浦发银行

Order order;
memset(&order, 0, sizeof(Order));

int ret = gm_td_close_long("SHSE", "600000", 0, 1000, &order);

注意事项:

该接口为异步下单接口,需执行gm_run方法后才能正常运行

gm_td_close_short

异步平空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_close_short(const char *exchange, 
                const char *sec_id, 
                double price, 
                double volume, 
                Order *order=NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如股指期货交易所CFFEX
sec_id const char * 证券代码,如股指期货合约IF1511
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价平1手股指期货合约IF1511的空单

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_short("CFFEX", "IF1511", 0, 1, &order);

注意事项:

  1. 该接口为异步下单接口,需执行gm_run方法后才能正常运行

  2. 平仓接口只对期货有效,现货不存在平仓

gm_td_close_long_yesterday

异步平昨多仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。 此api用于平上期所昨仓, gm_td_close_long 为平今仓。

函数原型:

int gm_td_close_long_yesterday(const char *exchange, 
                                const char *sec_id, 
                                double price, 
                                double volume, 
                                Order *order=NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如股指期货交易所CFFEX
sec_id const char * 证券代码,如股指期货合约IF1511
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价平1手白银合约ag1512的多单,

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_long_yesterday("SHFE", "ag1512", 0, 1, &order);

注意事项:

  1. 该接口为异步下单接口,需执行gm_run方法后才能正常运行

  2. 平仓接口只对期货有效,现货不存在平仓

gm_td_close_short_yesterday

异步平昨空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。 此api用于平上期所昨仓, gm_td_close_short 为平今仓。

函数原型:

int gm_td_close_short_yesterday(const char *exchange, 
                                const char *sec_id, 
                                double price, 
                                double volume, 
                                Order *order=NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如股指期货交易所CFFEX
sec_id const char * 证券代码,如股指期货合约IF1511
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价平1手白银合约ag1512的空单,

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_short_yesterday("SHFE", "ag1512", 0, 1, &order);

注意事项:

  1. 该接口为异步下单接口,需执行gm_run方法后才能正常运行

  2. 平仓接口只对期货有效,现货不存在平仓

gm_td_place_order

异步下单原生函数,需要创建Order对象,填充对应字段,一般异步下单接口建议使用gm_td_open_long、gm_td_open_short、gm_td_close_long、gm_td_close_short4个快捷下单接口。如果价格price字段为0,为市价单,否则为限价单。

函数原型:

int gm_td_place_order(Order *o);

参数:

参数名 类型 说明
o Order * 委托Order对象

返回值:

返回值编码

示例:

以市价开1手IF1511的多单

Order order;
memset(&order, 0, sizeof(Order));
strcpy_s( order.exchange, sizeof(order.exchange), "CFFEX" );
strcpy_s( order.sec_id, sizeof(order.sec_id), "IF1511");
order.side = OrderSide_Bid;
order.position_effect = PositionEffect_Open;
order.price = 0;
order.order_type = OrderType_BOC;
order.volume = 1;  

Order orderRet = gm_td_place_order( order );

注意事项:

该接口为异步下单接口,需执行gm_run方法后才能正常运行

gm_td_cancel_order

异步撤单接口,根据参数cl_ord_id指定的客户端订单ID,撤销之前的下单委托。撤单是否成功取决于订单当前的状态。

函数原型:

int gm_td_cancel_order(const char *cl_ord_id);

参数:

参数名 类型 说明
cl_ord_id const char * 客户端委托ID,委托的唯一识别符

返回值:

返回值编码

示例:

int ret = gm_td_cancel_order( "cl_ord_id" );

注意事项:

  1. 该接口为异步下单接口,需执行gm_run方法后才能正常运行

  2. 执行的结果由OnExecRpt, OnOrderCancelled, OnOrderCancelRejected回调方法返回

gm_td_open_long_sync

同步开多仓接口,以参数指定的symbol, 价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_open_long_sync(const char *exchange, 
                    const char *sec_id, 
                    double price, 
                    double volume, 
                    Order *order = NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如上交所SHSE
sec_id const char * 证券代码,如浦发银行600000
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 委托量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价买入1000股上交所浦发银行

Order order;
memset(&order, 0, sizeof(Order));

int ret = gm_td_open_long_sync("SHSE", "600000", 0, 1000, &order);

gm_td_open_short_sync

同步开空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_open_short_sync(const char *exchange, 
                    const char *sec_id, 
                    double price, 
                    double volume, 
                    Order *order = NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如金融期货交易所 CFFEX
sec_id const char * 证券代码,如股指期货1511合约 IF1511
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 委托量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价开1手股指期货IF1511合约的空单

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_open_short_sync("CFFEX", "IF1511", 0, 1, &order);

注意事项:

开空仓接口只对期货有效,现货不存在空仓单

gm_td_close_long_sync

同步平多仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_close_long_sync(const char *exchange, 
                    const char *sec_id, 
                    double price, 
                    double volume, 
                    Order *order = NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如上交所SHSE
sec_id const char * 证券代码,如浦发银行 600000
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

通过策略对象调用该接口,以市价卖出1000股上交所浦发银行

Order order;
memset(&order, 0, sizeof(Order));

int ret = gm_td_close_long("SHSE", "600000", 0, 1000, &order);

gm_td_close_short_sync

同步平空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。

函数原型:

int gm_td_close_short_sync(const char *exchange, 
                    const char *sec_id, 
                    double price, 
                    double volume, 
                    Order *order = NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如股指期货交易所CFFEX
sec_id const char * 证券代码,如股指期货合约IF1511
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价平1手股指期货合约IF1511的空单

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_short_sync("CFFEX", "IF1511", 0, 1, &order);

注意事项:

平空仓接口只对期货有效,现货不存在平空仓

gm_td_close_long_yesterday_sync

同步平昨多仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单, 此接口用于平上期所的昨仓

函数原型:

int gm_td_close_long_yesterday_sync(const char *exchange, 
                                    const char *sec_id, 
                                    double price, 
                                    double volume, 
                                    Order *order = NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如上交所SHSE
sec_id const char * 证券代码,如浦发银行 600000
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价平1手白银合约ag1512的多单,

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_long_yesterday_sync("SHFE", "ag1512", 0, 1, &order);

gm_td_close_short_yesterday_sync

同步平昨空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。此接口用于平上期所的昨仓

函数原型:

int gm_td_close_short_yesterday_sync(const char *exchange, 
                                    const char *sec_id, 
                                    double price, 
                                    double volume, 
                                    Order *order = NULL);

参数:

参数名 类型 说明
exchange const char * 交易所代码, 如股指期货交易所CFFEX
sec_id const char * 证券代码,如股指期货合约IF1511
price double 委托价,如果price=0,为市价单,否则为限价单
volume double 平仓量
order Order * 输出参数,返回委托请求的Order对象,Order对象空间由用户分配并传入

返回值:

返回值编码

示例:

以市价平1手白银合约ag1512的多单,

Order order;
memset(&order, 0, sizeof(Order));
int ret = gm_td_close_long_yesterday_sync("SHFE", "ag1512", 0, 1, &order);

注意事项:

平空仓接口只对期货有效,现货不存在平空仓

gm_td_place_order_sync

同步下单原生函数,需要创建Order对象,填充对应字段,一般同步下单接口建议使用gm_td_open_long_sync、gm_td_open_short_sync、gm_td_close_long_sync、gm_td_close_short_sync 4个快捷下单接口。如果价格price字段为0,为市价单,否则为限价单。

函数原型:

int gm_td_place_order_sync(Order *o);

参数:

参数名 类型 说明
o Order 委托Order对象

返回值:

返回值编码

示例:

通过策略对象调用该接口,以市价开1手IF1511的多单

Order order;
memset(&order, 0, sizeof(Order));
strcpy_s( order.exchange, sizeof(order.exchange), "CFFEX" );
strcpy_s( order.sec_id, sizeof(order.sec_id), "IF1511");
order.side = OrderSide_Bid;
order.position_effect = PositionEffect_Open;
order.price = 0;
order.order_type = OrderType_BOC;
order.volume = 1;

int ret = gm_td_place_order_sync(&order);

gm_td_cancel_order_sync

同步撤单接口,根据参数clordid指定的客户端订单ID,撤销之前的下单委托。撤单是否成功取决于订单当前的状态。

函数原型:

int gm_td_cancel_order_sync(const char *cl_ord_id);

参数:

参数名 类型 说明
cl_ord_id const char * cl_ord_id 客户端委托ID,委托的唯一识别符

返回值:

返回值编码

示例:

int ret = gm_td_cancel_order_sync( "cl_ord_id" );

注意事项:

执行的结果由OnExecRpt, OnOrderCancelled,OnOrderCancelRejected回调方法返回

gm_td_get_cash

查询当前策略的资金信息。

函数原型:

int gm_td_get_cash(Cash **res);

参数:

参数名 类型 说明
res Cash ** 资金查询结果

返回值:

返回值编码

示例:

查询当前策略的资金信息

Cash *cash = nullptr;
int ret = gm_td_get_cash(&cash);

gm_td_get_position

查询当前策略指定symbol(由交易所代码和证券ID组成)和买卖方向的持仓信息。

函数原型:

int gm_td_get_position(const char *exchange, 
                    const char *sec_id, 
                    int side, 
                    Position **res);

参数:

参数名 类型 说明
exchange const char * 交易所代码
sec_id const char * 证券代码
side int 买卖方向
res Position ** 持仓查询结果

返回值:

返回值编码

示例:

在策略类的方法中查询买入浦发银行的持仓信息

Position *position = nullptr; 
int ret = gm_td_get_position("SHSE", "600000", OrderSide_Bid, &position);

gm_td_get_positions

查询当前策略的全部持仓信息。

函数原型:

int gm_td_get_positions(Position **res, int *count);

参数:

参数名 类型 说明
res Position ** 持仓查询结果
count int * 持仓记录条数

返回值:

返回值编码

示例:

查询当前策略全部持仓信息

Position *position = nullptr;
int count = 0;
int ret = gm_td_get_positions(&position, &count);

gm_td_get_orders

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

函数原型:

int gm_td_get_orders(const char *start_time, const char *end_time, Order **res, int *count);

参数:

参数名 类型 说明
start_time char * 查询开始时间,如果为空或NULL, 则查询当天的委托
end_time char * 查询结束时间,如果为空或NULL, 则查询当天的委托
res Order ** 委托查询结果
count int * 委托记录条数

返回值:

返回值编码

示例:

查询策略的委托信息

Order *o = nullptr;
int count = 0;
int ret = gm_td_get_orders("2016-03-16 00:00:00", "2016-03-18 00:00:00", &o, &count);

gm_td_get_order

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

函数原型:

int gm_td_get_order(const char *cl_ord_id, Order **res);

参数:

参数名 类型 说明
cl_ord_id char * 委托单的cl_ord_id, 下单时获得
res Order ** 委托查询结果

返回值:

返回值编码

示例:

查询策略的委托信息

Order *o = nullptr;
int ret = gm_td_get_order("afdsfsdfds-dsflskjkdf", &o);

gm_td_get_unfinished_orders

查询未结委托。

函数原型:

int gm_td_get_unfinished_orders(Order **res, int *count);

参数:

参数名 类型 说明
res Order ** 委托查询结果
count int * 委托记录条数

返回值:

返回值编码

示例:

查询策略的委托信息

Order *o = nullptr;
int count = 0;
int ret = gm_td_get_unfinished_orders(&o, &count);

gm_td_get_orders_by_symbol

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

函数原型:

int gm_td_get_orders_by_symbol(const char *exchange, const char *sec_id, const char *start_time, const char *end_time, Order **res, int *count);

参数:

参数名 类型 说明
exchange char * 市场代码
sec_id char * 交易代码
start_time char * 查询开始时间,如果为空或NULL, 则查询当天的委托
end_time char * 查询结束时间,如果为空或NULL, 则查询当天的委托
res Order ** 委托查询结果
count int * 委托记录条数

返回值:

返回值编码

示例:

查询策略的委托信息

Order *o = nullptr;
int count = 0;
int ret = gm_td_get_orders_by_symbol("SHSE", "600000", "2016-03-16 00:00:00", "2016-03-18 00:00:00", &o, &count);

gm_td_get_indicator

查询当前策略的绩效信息。

函数原型:

int gm_td_get_indicator(Indicator **res);

参数:

返回值:

当前策略的绩效信息

示例:

查询当前策略的绩效信息

Indicator *indicator = nullptr;
int ret = gm_td_get_indicator( &indicator );

gm_td_get_broker_cash

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

函数原型:

int gm_td_get_broker_cash(Cash **res, int* count);

参数:

参数名 类型 说明
res Cash ** 资金查询结果
count int * 资金账户个数

返回值:

返回值编码

示例:

查询当前策略的资金信息

Cash *cash = nullptr;
int   count = 0;
int ret = gm_td_get_broker_cash(&cash, &count);

gm_td_get_broker_positions

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

函数原型:

int gm_td_get_broker_positions(Position **res, int *count);

参数:

参数名 类型 说明
res Position ** 持仓查询结果
count int * 持仓记录条数

返回值:

返回值编码

示例:

查询当前策略全部持仓信息

Position *position = nullptr;
int count = 0;
int ret = gm_td_get_broker_positions(&position, &count);

gm_td_get_broker_accounts

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

函数原型:

int gm_td_get_broker_accounts(BrokerAccount **res, int *count);

参数:

参数名 类型 说明
res BrokerAccount ** 账户查询结果
count int * 账户记录条数

返回值:

返回值编码

示例:

查询当前策略关联的全部账户

BrokerAccount *accounts = nullptr;
int count = 0;
int ret = gm_td_get_broker_accounts(&accounts, &count);

交易事件方法

gm_td_set_execrpt_callback

设置委托执行回报事件的回调方法。

函数原型:

void gm_td_set_execrpt_callback(TDExecRptCallback cb);

参数:

参数名 类型 说明
cb TDExecRptCallback 委托回报回调方法指针

返回值:

示例:

订阅委托回报事件

void on_execrpt(ExecRpt *res);

gm_td_set_execrpt_callback(on_execrpt);

gm_td_set_order_rejected_callback

设置订单被拒绝事件的回调方法。

函数原型:

void gm_td_set_order_rejected_callback(TDOrderRejectedCallback cb);

参数:

参数名 类型 说明
cb TDOrderRejectedCallback 订单拒绝回调方法指针

返回值:

示例:

订阅订单拒绝事件

void on_order_rejected( Order *res);

gm_td_set_order_rejected_callback(on_order_rejected);

gm_td_set_order_new_callback

设置委托下单成功回调方法。

函数原型:

void gm_td_set_order_new_callback(TDOrderNewCallback cb);

参数:

参数名 类型 说明
cb TDOrderNewCallback 委托下单成功回调方法指针

返回值:

示例:

订阅委托下单成功事件

void on_order_new( Order *res);

gm_td_set_order_new_callback(on_order_new);

gm_td_set_order_filled_callback

设置订单完全成交事件的回调方法。

函数原型:

void gm_td_set_order_filled_callback(TDOrderFilledCallback cb);

参数:

参数名 类型 说明
cb TDOrderFilledCallback 订单完全成交回调方法指针

返回值:

示例:

订阅委托下单成功事件

void on_order_filled( Order *res);

gm_td_set_order_filled_callback(on_order_filled);

gm_td_set_order_partially_filled_callback

设置订单部分成交事件的回调方法。

函数原型:

void gm_td_set_order_partially_filled_callback(TDOrderPartiallyFilledCallback cb);

参数:

参数名 类型 说明
cb TDOrderPartiallyFilledCallback 部分成交回调方法

返回值:

示例:

订阅委托部成事件

void on_order_partially_filled( Order *res);

gm_td_set_order_partially_filled_callback(on_order_partially_filled);

gm_td_set_order_stop_executed_callback

设置订单停止执行事件的回调方法,比如,限价单到收市仍然未能成交。

函数原型:

void gm_td_set_order_stop_executed_callback(TDOrderStopExecutedCallback cb);

参数:

参数名 类型 说明
cb TDOrderStopExecutedCallback 订单停止执行的回调方法

返回值:

示例:

订阅订单停止执行事件

void on_order_stop_executed( Order *res);

gm_td_set_order_stop_executed_callback(on_order_stop_executed);

gm_td_set_order_cancelled_callback

设置订单撤单成功事件的回调方法。

函数原型:

void gm_td_set_order_cancelled_callback(TDOrderCancelledCallback cb);

参数:

参数名 类型 说明
cb TDOrderCancelledCallback 订单撤单成功回调方法指针

返回值:

示例:

订阅订单撤单成功事件

void on_order_cancelled( Order *res);

gm_td_set_order_cancelled_callback(on_order_cancelled);

gm_td_set_order_cancel_rejected_callback

设置订单撤单请求拒绝事件的回调方法。

函数原型:

void gm_td_set_order_cancel_rejected_callback(TDOrderCancelRejectedCallback cb);

参数:

参数名 类型 说明
cb TDOrderCancelRejectedCallback 订单撤单拒绝回调方法指针

返回值:

示例:

订阅委托撤单拒绝事件

void on_order_cancel_rejected( ExecRpt *res);

gm_td_set_order_cancel_rejected_callback(on_order_cancel_rejected);

gm_td_set_backtest_finish_callback

设置回测完成事件的回调方法。

函数原型:

void gm_td_set_backtest_finish_callback(TDBacktestFinishCallback cb);

参数:

参数名 类型 说明
cb TDBacktestFinishCallback 回测完成事件的回调方法指针

返回值:

示例:

订阅委托撤单拒绝事件

void OnBacktestFinish(Indicator *indicator);

gm_td_set_backtest_finish_callback(OnBacktestFinish);

其他方法

gm_login

SDK认证及登录方法

函数原型:

int gm_login(const char *username, 
        const char *password, 
        const char *addr = NULL);

参数:

参数名 类型 说明
username const char * 掘金终端账号
password const char * 账号对应的密码
addr const char * 认证服务,默认空值通过本地服务认证

返回值:

返回值编码

示例:

int ret = gm_login("your username", "your password");

gm_md_init

初始化并连接数据服务,订阅数据。一般编写自己的策略时使用策略的初始化方法,而仅需数据服务时才使用本方法,调要本方法前必须先调用gm_login方法。

函数原型:

int gm_md_init(int mode = MD_MODE_NULL, 
            const char *subscribe_symbol_list = NULL, 
            const char *start_time = NULL, 
            const char *end_time = NULL);

参数:

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

返回值:

返回值编码

示例:

订阅浦发银行的2015-10-29 9:30:00 到 2015-10-29 15:00:00的Tick回放数据

int ret = gm_md_init(MD_MODE_PLAYBACK, 
                "SHSE.600000.tick", 
                "2015-10-29 9:30:00", 
                "2015-10-29 15:00:00");

gm_td_init

初始化并连接交易服务。一般编写自己的策略时使用策略的初始化方法,而仅需交易服务时才使用本方法,调要本方法前必须先调用gm_login方法。

函数原型:

int gm_td_init(const char *strategy_id, const char *addr=NULL);

参数:

参数名 类型 说明
strategy_id const char * 策略ID
addr const char * 交易服务地址,默认连接本地终端服务

返回值:

返回值编码

示例:

初始化交易服务,并连接本地掘金终端交易服务

int ret = gm_td_init( "strtegy_id" );

gm_md_reconnect

重连行情数据服务。如果接收实时/模拟行情中途断开了连接,可以调用本方法重连。

函数原型:

int gm_md_reconnect();

参数:

返回值:

返回值编码

示例:

int ret = gm_md_reconnect();

gm_td_reconnect

重连交易服务。如果交易服务中途断开了连接,可调用本方法重连。

函数原型:

int gm_td_reconnect();

参数:

返回值:

返回值编码

示例:

int ret = gm_td_reconnect();

gm_md_set_error_callback

设置行情错误事件回调方法。

函数原型:

void gm_md_set_error_callback(MDErrorCallback cb);

参数:

参数名 类型 说明
cb MDErrorCallback 行情错误事件回调方法指针

返回值:

示例:

订阅行情错误事件

void on_md_error(int error_code, const char *error_msg);

gm_md_set_error_callback(on_md_error);

gm_td_set_error_callback

设置行情错误事件回调方法。

函数原型:

void gm_td_set_error_callback(TDErrorCallback cb);

参数:

参数名 类型 说明
cb TDErrorCallback 交易错误事件回调方法指针

返回值:

示例:

订阅交易错误事件

void on_td_error(int error_code, const char *msg)

gm_td_set_error_callback(on_td_error);

gm_strerror

根据错误编码,获取错误文本信息

函数原型:

const char* gm_strerror(int errorno);

参数:

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

返回值:

错误码对应的文本信息

示例:

const char* err = gm_strerror( error_no );

gm_version

响应行情状态事件,收到MarketDataEvent数据后本函数被调用。

函数原型:

const char* gm_version();

参数:

返回值:

返回当前SDK的版本号

示例:

const char* version = gm_version();

gm_set_timer

设置定时器

函数原型:

void gm_set_timer(int interval);

参数:

参数名 类型 说明
interval int 定时器时间间隔,单位为毫秒

返回值:

示例:


//回调函数
void OnTimer(int interval)
{
   //todo ...
}

//设置定时器回调函数
gm_set_timer_callback(OnTimer);

//设置定时器,每1秒触发一次
gm_set_timer(1000);

gm_unset_timer

设置定时器

函数原型:

void gm_unset_timer(int interval);

参数:

参数名 类型 说明
interval int 定时器时间间隔,单位为毫秒

返回值:

示例:

//取消1秒定时器
gm_unset_timer(1000);

gm_set_timer_callback

设置定时器回调

函数原型:

void gm_set_timer_callback(TimerCallback cb)

参数:

参数名 类型 说明
cb funtion ptr 定时器回调函数

返回值:

示例:


//回调函数
void OnTimer(int interval)
{
   //todo ...
}

//设置定时器回调函数
gm_set_timer_callback(OnTimer);

//设置定时器,每1秒触发一次
gm_set_timer(1);

gm_set_timeout_val

设置同步API的超时时间,系统默认为30秒

函数原型:

void gm_set_timeout_val(int seconds);

参数:

参数名 类型 说明
seconds int 超时时间,单位为秒

返回值:

gm_get_timeout_val

获取同步API的超时时间

函数原型:

int gm_get_timeout_val();

参数:

返回值:

超时时间,单位为秒