如何写策略(C++)
一个简单的策略
与其他纯web端的量化平台相比,本平台提供的方式支持本地化代码,无需上传到平台上,确保用户策略隐私。c++策略用户只需完成两个文件的编写,json格式的配置文件和cpp格式的策略文件,当然本平台会提供精简的模板保证用户2分钟可完成一个策略。
完整的策略工程
使用c++版本的sdk需要创建一个策略分析器,该分析器主要是对基类strategyAnalyzer的回调函数进行重写。
下面为StrategyAnalyzer派生类实现的一个示例:
class MyMulAnalyzer : public StrategyAnalyzer
{
public:
//初始化函数
void on_initialize(StrategyApi *sApi) final
{
std::cout << "on_initialize is called back" << std::endl;
}
//Timer回调,定时器事件,模拟盘响应,回测时可忽略
void on_timer(StrategyApi *sApi) final
{
std::cout << "on_timer is called back"<< std::endl;
}
//开盘前准备,必须设置要关注的标的
void on_before_market_open(StrategyApi *sApi, const MarketParam & marketParam) final
{
auto symbols = sApi->get_symbol_pool();
cout << symbols.size() << endl;
sApi->set_focus_symbols(set<string>(symbols.begin(), symbols.end()));
}
void on_bar(StrategyApi *sApi, const Bar & bar) final
{
cout << "---------on_bar---------" << endl;
vector<SymbolPosition> symbol_positions = sApi->get_symbol_positions();
//如果有持仓
if(symbol_positions.size() > 0)
{
//平仓
sApi->target_position(bar.symbol,0,bar.close);
}
else
{
//市价目标仓位50000股
sApi->target_position(bar.symbol,50000,bar.close);
}
}
void on_handle_data(StrategyApi *sApi ,int64_t timeExch)
{
cout << "------on_handle_data------" << endl;
}
void on_terminate(StrategyApi *sApi, const StrategyExitInfo& exitInfo) final
{
cout << "----on_terminate----------" << endl;
}
void on_order_update(StrategyApi* sApi, const OrderUpdate& orderUpdate) final
{
cout << "-----on_order_update-------" << endl;
}
void on_first_tick(StrategyApi *sApi, const Quote "e)
{
cout << "------on_first_tick-------" <<
endl;
cout << "quote : " << quote << endl;
}
};
配置config文件(必要)
参考python部分配置文件config
on_initialize-初始化(可选)
函数原型:
virtual void on_initialize(std::shared_ptr<StrategyApi> sApi)
{
std::cout << "multi do nothing" << std::endl;
}
on_before_market_open-盘前运行(必选)
函数原型:
virtual void on_before_market_open(std::shared_ptr<StrategyApi> sApi, const MarketParam &marketParam)
{
std::cout << " onBeforeMarketBegin do nothing" << std::endl;
}
盘中运行(必要)
on_bar-K线响应回调
- 创建实例时设置撮合周期,bar产生时会调用。为了提高效率,只有在关注列表(即在on_initialize回调函数中通过set_symbol_pool进行设置)中和有持仓的标的才会响应行情回调。当group_mode为
single_only
或者both
时响应。
函数原型:
virtual void on_bar(StrategyAPI *sApi, const Bar &bar)
{
std::cout << "multi on bar do noting" << std::endl;
}
on_handle_data-数据到齐响应回调
- 针对某一周期的bar数据或者tick数据,搜集齐后再统一响应回调,, group_mode为
group_only
或者both
时响应
函数原型:
virtual void on_handle_data(StrategyAPI *sApi, int64_t timeExch)
{
std::cout << "on handle bar do noting" << std::endl;
}
on_terminate-运行终止(可选)
- 运行终止时会调用一次。
函数原型:
virtual void on_bar(StrategyAPI *sApi, const Bar &bar)
{
std::cout << "multi on bar do noting" << std::endl;
}
on_timer-定时器(可选)
- 每隔timeCycle毫秒会响应一次,在配置文件realtime中设置timer_cycle来设置,参数默认为0不响应on_timer。该参数针对模拟盘,回测可忽略。
函数原型:
virtual void on_timer(StrategyAPI *sApi)
{
std::cout << "multi on timer do noting" << std::endl;
}
on_order_update-订单状态更新回调(可选)
- 订单状态更新时会响应一次,OrderUpdate为委托更新信息。
函数原型:
virtual void on_order_update(StrategyAPI *sApi, const OrderUpdate &orderUpdate)
{
std::cout << "on_order_update but do nothing" << std::endl;
}
策略api
create_strategy_api-创建StrategyApi
函数原型:
static std::shared_ptr<StrategyApi> create_strategy_api();
参数:无
reg_analyzer-注册分析器
函数原型:
virtual void reg_analyzer(StrategyAnalyzer *analyzer) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
analyzer | StrategyAnalyzer * | 是 | 自己创建的分析器的指针 |
init-StrategyApi初始化
函数原型:
virtual int init(int argc, char *argv[]);
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
argc | int | 是 | 传入的命令行参数个数 |
argv | char ** | 是 | 传入的命令行参数字符串数组 |
wait_for_shutdown-策略主循环
- 分析器创建好,并且注册到strategyApi中,在StrategyApi初始化完成之后就可以进行策略的主循环:根据回测或是模拟的时间逻辑来对应执行分析器中相应的回调函数。
函数原型:
virtual void wait_for_shutdown() = 0;
参数:无
交易函数
set_focus_symbols-设置关注的标的池-盘前
- 调用该函数的位置是在
on_before_market_open
回调中,只有设置了关注的标的,才能进行下单操作。 - 由于K线数据采用的是表格方式输出,而不同交易市场的标的交易时间不同,因此暂时不能保证表对齐,所以目前策略中只支持相同交易市场的标的同时被关注。否则会报错,后续会进行优化。(get_bars_history获取K线添加了
market_mode
参数,该参数目前只能支持single
模式)。
函数原型:
virtual void set_focus_symbols(const std::set<std::string> &symbols) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbols | std::set<std::string> | 是 | 一组关注的标的 |
返回值:无
示例:
sApi->set_focus_symbols({"000001.SZ", "000002.SZ"});
get_focus_and_position_symbols-获取关注的和持仓的标的
函数原型:
virtual std::vector<std::string> get_focus_and_position_symbols() const = 0;
参数:无
返回值:返回symbol的vector
示例:
auto symbols = sApi->get_focus_and_position_symbols();
target_position-目标仓位数量下单
- 调整标的仓位,即根据需要进行下撤单,无直接操作下单接口
函数原型:
virtual std::string target_position(const std::string &symbol, double qty, double price,const std::string &price_type = "",const std::string &side = "long",const std::string &remark = "") = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 策略中的标的代码 |
qty | int | 是 | 目标仓位 |
price | double | 是 | 下单价格 |
price_type | string | 否 | 价格类型 支持以下下单模式,可缺省为空, 部成部撤:FAK 当日有效限价单:DAY 立即全部成交否则自动撤销:FOK |
side | string | 否 | 多空方向,支持方向为多/空,默认为多。 多:long 空:short |
remark | string | 否 | 下单原因说明,填写后可以在客户端管理平台展示 |
返回值:orderID。类型为string ,orderID作为对此条下单操作的标识。
示例:
//以11元限价单买入100股000001
sApi->target_position("000001.SZ",100,11);
//以11元限价买入000001股票至持仓为100股 若不能立马成交自动撤单
sApi->target_position ("000001.SZ",100,11,"FOK","long", "");
target_percent-按比例下单
函数原型:
virtual std::string target_percent(const std::string &symbol, double percent, double price,const std::string &price_type = "",const std::string &side = "long",const std::string &remark = "") = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 策略中的标的代码 |
percent | double | 是 | 交易量为占总资产的比例 |
price | double | 是 | 下单价格 |
price_type | string | 否 | 价格类型 支持以下下单模式,可缺省为空, 部成部撤:FAK 当日有效限价单:DAY 立即全部成交否则自动撤销:FOK |
side | string | 否 | 多空方向,支持方向为多/空,默认为多。 多:long 空:short |
remark | string | 否 | 下单原因说明,填写后可以在客户端管理平台展示 |
返回值:类型为string的订单id ,订单id作为对此条下单操作的标识
示例:
//以11元限价单买入总资产的20%
sApi->target_percent("000001.SZ", 0.2 ,11);
cancel_order-撤单
函数原型:
virtual void cancel_order(const std::string &symbol, const std::string &side = "long", const std::string &remark = "") = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 标的代码 |
side | string | 否 | 多空方向,支持方向为多/空,默认为多。 多:long 空:short |
remark | string | 否 | 撤单原因说明,填写后可以在web端展示。 |
示例:
//撤销股票000001.CS的挂单
sApi->cancel_order("000001.SZ", "long","撤销000001.CS的挂单");
//撤销期货rb1901.CF的空头挂单
sApi->cancel_order ("rb1901.CF", "short");
get_symbol_position-获取单个标的仓位信息
函数原型:
virtual const SymbolPosition &get_symbol_position(const std::string &symbol, const std::string &side = "long") = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 标的代码 |
side | string | 否 | 多空方向,支持方向为多/空,默认为多。 多:long 空:short |
返回值:SymbolPosition对象。
示例:
//获取股票000001.SZ仓位信息
sApi->get_symbol_position ("000001.SZ");
//获取期货IM2306.CFE多仓的仓位信息
sApi->get_symbol_position ("IM2306.CFE", "long");
//获取期货IM2306.CFE空仓的仓位信息
sApi->get_symbol_position ("IM2306.CFE","short");
get_symbol_positions-获取所有持仓标的仓位信息
函数原型:
virtual std::vector<SymbolPosition> get_symbol_positions() = 0;
参数: 无
返回值:元素为SymbolPosition对象的vector容器。
示例:
//获取所有标的的仓位信息
sApi->get_symbol_positions();
get_account-获取标的或者市场所属账户信息
- 获取标的所属账号信息,由于账号获取是异步的,所以下完单立即获取账户数据会有延迟。
函数原型:
virtual const Account &get_account(const std::string &symbol, const std::string &market = "") = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 标的代码,不可缺省 |
market | string | 否 | 市场,可选值有A股市场/期货市场/指数市场/港股市场 A股市场:CS 期货市场:CF 指数市场:IDX 港股市场:HK |
返回值: 标的所属证券的市场账号信息,Account结构体。
- Account结构体
属性 | 类型 | 说明 |
---|---|---|
id | string | 账户 id(userId-market) |
market | string | 市场 |
currency | string | 账户币种(CNY) |
daily_pnl | double | 当天盈亏 - 清算时候清零 |
ur_last_pnl | double | 浮动盈亏 - 按最后价算 |
all_time_pnl | double | 盈亏 |
cash_deposited | double | 存入现金(所有加入的现金) |
cash_available | double | 可用现金 |
cash | double | 现金 |
unit_value | double | 账户基金价值 |
margin | double | 现金分红 |
bonus | double | 持仓占用资金 |
market_value | double | 持仓市值 |
tot_assets | double | 总资产 |
total_commission | double | 总手续费 |
示例:
//用标的获取A股账号的信息
sApi->get_account("000001.SZ", "CS");
//同时填入标的和市场时,返回通过市场获取的账号信息,如下返回期货账号信息
sApi->get_account("000001.SZ", "CF");
get_overall_position-获取标的汇总仓位
由于多个策略可以共享账户资金,因此可能会存在多个策略中都持有某个标的的情况,账户中会将多个策略中标的信息进行汇总。本函数用来获取某个标的在账户中汇总后的仓位信息。
函数原型:
virtual const OverallPosition &get_overall_position(const std::string &symbol) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 标的代码 |
返回值: 该标的在其所属账户中的总仓位信息,OverallPosition对象结构体。
- OverPosition结构体
属性 | 类型 | 说明 |
---|---|---|
account_id | string | 账户ID |
symbol | string | 合约 |
buy_price | double | 加权平均买价(开仓/平仓所有数据加权平均) |
sell_price | double | 加权平均卖价 |
buy_qty | double | 买数量 |
sell_qty | double | 卖数量 |
last_ur_pnl | double | 最后成交价算的盈亏(以OpenPosition计算) |
long_available_qty | double | 多仓可以平仓数量(计算出来) |
short_available_qty | double | 空仓可以平仓数量(计算出来) |
long_qty | double | 多仓数量 |
short_qty | double | 空仓数量 |
long_price | double | 多仓开仓均价 |
short_price | double | 空仓开仓均价 |
long_last_ur_pnl | double | 多仓浮动盈亏 |
short_last_ur_pnl | double | 空仓浮动盈亏 |
long_margin | double | 多仓占用保证金 |
short_margin | double | 空仓占用保证金 |
long_market_value | double | 多仓持仓市值 |
short_market_value | double | 空仓持仓市值 |
示例:
//获取账户下000001.CS的汇总仓位信息
sApi->get_overall_position("000001.SZ");
交易日期函数
get_trade_day_interval-取交易日间隔数
获取某时间区间交易日数,起止时间只能是回测区间内的
函数原型:
virtual int get_trade_day_interval(int start_date, int end_date, const std::string &symbol) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
start_date | int | 是 | 开始时间,格式为YYYYMMDD |
end_date | int | 是 | 结束时间,格式为YYYYMMDD |
symbol | string | 是 | 标的代码 |
返回值:返回值为交易日数
示例:
//获取一段时间内的交易日数,包含所传起止日期
[In]:
sApi->get_trade_day_interval(20200907, 20200909, "000001.SZ");
[Out]:
3
get_last_trade_date-取最近交易日
- 获取最近一个交易日(向前延伸)
函数原型:
virtual int get_last_trade_date(int trade_date, const std::string &symbol) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
trade_date | int | 是 | 给定日期 |
symbol | string | 是 | 标的代码 |
返回值:返回最近一个交易日(向前延伸)
示例:
[In]:
sApi->get_last_trade_date(20200101, "000001.SZ");
[Out]:
20191231
get_next_trade_date-取下一个交易日
- 获取最近一个交易日(向后延伸)
函数原型:
virtual int get_next_trade_date(int date, const std::string &symbol) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
trade_date | int | 是 | 开始时间,格式为YYYYMMDD |
symbol | string | 是 | 标的代码 |
返回值:返回最近一个交易日(向后延伸)
示例:
[In]:
sApi->get_next_trade_date(20200101, "000001.SZ");
[Out]:
20200102
get_trade_dates-取某时间内交易日
- 指定起止日期,获取某个市场一段时间的交易日,包含所传起止日期
函数原型:
virtual std::vector<int> get_trade_dates(int start_date, int end_date, const std::string &market) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
start_date | int | 是 | 开始时间(含当天),格式为YYYYMMDD |
end_date | int | 是 | 结束时间(含当天),格式为YYYYMMDD |
market | string | 是 | 市场,可选值有A股市场/期货市场/指数市场/港股市场 A股市场:CS 期货市场:CF 指数市场:IDX 港股市场:HK |
返回值:类型为int 的 vector容器,日期格式YYMMDD
示例:
//获取一段时间内的交易日期,包含所传起止日期
[In]:
sApi->get_trade_dates(20200601, 20200611, "CS");
[Out]:
{20200601, 20200602, 20200603, 20200604, 20200605, 20200608, 20200609, 20200610, 20200611}
get_prev_trade_dates-取前N个交易日
- 获取指定日期的前N个交易日,不包含指定日期。
函数原型:
virtual std::vector<int> get_prev_trade_dates(int trade_date, int count, const std::string& market) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
trade_date | int | 是 | 交易日,格式为YYYYMMDD |
count | int | 是 | N个交易日 |
market | string | 是 | 市场,可选值有A股市场/期货市场/指数市场/港股市场 A股市场:CS 期货市场:CF 指数市场:IDX 港股市场:HK |
返回值:返回前N个交易日的日期
示例:
//取20150101前5个交易日
[In]:
sApi->get_prev_trade_dates(20200101, 5, "CS");
[Out]:
{20191225, 20191226, 20191227, 20191230, 20191231}
get_next_trade_dates-取后N个交易日
- 获取指定日期后的N个交易日,不包含指定日期
函数原型:
virtual std::vector<int> get_next_trade_dates(int trade_date, int count, const std::string &market) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
trade_date | int | 是 | 交易日,格式为YYYYMMDD |
count | int | 是 | N个交易日 |
market | string | 是 | 市场,可选值有A股市场/期货市场/指数市场/港股市场 A股市场:CS 期货市场:CF 指数市场:IDX 港股市场:HK |
返回值:返回后N个交易日
示例:
//获取20200101之后的5个交易日
[In]:
sApi->get_next_trade_dates(20200101, 5, "CS");
[Out]:
{20200102, 20200103, 20200106, 20200107, 20200108}
date_now-取当前交易日
- 获取当前的交易日。回测情况下是回测历史当天,模拟交易情况下是当前交易日。
函数原型:
virtual int date_now() = 0;
返回值:返回历史当天的交易日期
示例:
[In]:
sApi->date_now();
[Out]:
20200907
time_now-取当前交易时间
- 获取当前的交易时间。回测情况下是回测历史当天,交易情况下是当前交易日。
函数原型:
virtual int64_t time_now() = 0;
参数: 无
返回值:返回历史当前的时间戳,精确到毫秒。类型:int64_t。
示例:
[In]:
sApi->time_now();
[Out]:
1596783600000
标的信息函数
get_ref_data-取标的信息
函数原型:
virtual RefData get_ref_data(const std::string &symbol) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 标的代码 |
返回值:证券基本信息,RefData。
示例:
sApi->get_ref_data("000001.SZ");
get_constituent_symbols-取成分股
- 获取股票指数或者行业板块的成分股数据。获取期货某品种当前可交易的标的数据。
- 获取指数成分股权重数据 :get_table_data-取表格数据
函数原型:
virtual std::vector<std::string> get_constituent_symbols(const std::string &instset, int trade_date) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
instset | string | 是 | 指数代码、板块代码、指数代码列表或者行业板块代码列表,为列表时表示获取的股票同时属于这些指数或者行业。 |
trade_date | int | 是 | 交易日,形式为YYYYMMDD,支持获取历史成分股信息 |
返回值: 返回股票代码的vector容器
示例:
[In]:
sApi->get_constituent_symbols("000300.SH", 20200916);
[Out]: {'000001.SZ', '000002.SZ', '000063.SZ', '000066.SZ', '000069.SZ', '000100.SZ', '000157.SZ', '000166.SZ', '000333.SZ', '000338.SZ', '000425.SZ', '000538.SZ', '000568.SZ', '000596.SZ', '000625.SZ', '000627.SZ', '000651.SZ', '000656.SZ', '000661.SZ', '000671.SZ', '000703.SZ', '000708.SZ', '000709.SZ', '000723.SZ', '000725.SZ', '000728.SZ', '000768.SZ', '000776.SZ', '000783.SZ', '000786.SZ', '000858.SZ', '000860.SZ', '000876.SZ', '000895.SZ', '000938.SZ', '000961.SZ', '000963.SZ', '000977.SZ', '001979.SZ', '002001.SZ', '002007.SZ', '002008.SZ', '002024.SZ', '002027.SZ', '002032.SZ', '002044.SZ', '002050.SZ', '002120.SZ', '002129.SZ', '002142.SZ', '002146.SZ', '002153.SZ', '002157.SZ', '002179.SZ', '002202.SZ', '002230.SZ', '002236.SZ', '002241.SZ', '002252.SZ', '002271.SZ', '002304.SZ', '002311.SZ', '002352.SZ', '002371.SZ', '002410.SZ', '002415.SZ', '002422.SZ', '002456.SZ', '002460.SZ', '002463.SZ', '002466.SZ', '002468.SZ', '002475.SZ', '002493.SZ', '002508.SZ', '002555.SZ', '002558.SZ', '002594.SZ', '002601.SZ', '002602.SZ', '002607.SZ', '002624.SZ', '002673.SZ', '002714.SZ', '002736.SZ', '002739.SZ', '002773.SZ', '002841.SZ', '002916.SZ', '002938.SZ', '002939.SZ', '002945.SZ', '002958.SZ', '003816.SZ', '300003.SZ', '300014.SZ', '300015.SZ', '300033.SZ', '300059.SZ', '300122.SZ', '300124.SZ', '300136.SZ', '300142.SZ', '300144.SZ', '300347.SZ', '300408.SZ', '300413.SZ', '300433.SZ', '300498.SZ', '300601.SZ', '300628.SZ', '600000.SH', '600004.SH', '600009.SH', '600010.SH', '600011.SH', '600015.SH', '600016.SH', '600018.SH', '600019.SH', '600025.SH', '600027.SH', '600028.SH', '600029.SH', '600030.SH', '600031.SH', '600036.SH', '600038.SH', '600048.SH', '600050.SH', '600061.SH', '600066.SH', '600068.SH', '600085.SH', '600089.SH', '600104.SH', '600109.SH', '600111.SH', '600115.SH', '600118.SH', '600170.SH', '600176.SH', '600177.SH', '600183.SH', '600188.SH', '600196.SH', '600208.SH', '600219.SH', '600221.SH', '600233.SH', '600271.SH', '600276.SH', '600297.SH', '600299.SH', '600309.SH', '600332.SH', '600340.SH', '600346.SH', '600352.SH', '600362.SH', '600369.SH', '600372.SH', '600383.SH', '600390.SH', '600398.SH', '600406.SH', '600436.SH', '600438.SH', '600482.SH', '600487.SH', '600489.SH', '600498.SH', '600516.SH', '600519.SH', '600522.SH', '600547.SH', '600570.SH', '600583.SH', '600585.SH', '600588.SH', '600606.SH', '600637.SH', '600655.SH', '600660.SH', '600674.SH', '600690.SH', '600703.SH', '600705.SH', '600741.SH', '600745.SH', '600760.SH', '600795.SH', '600809.SH', '600837.SH', '600848.SH', '600867.SH', '600886.SH', '600887.SH', '600893.SH', '600900.SH', '600919.SH', '600926.SH', '600928.SH', '600958.SH', '600968.SH', '600977.SH', '600989.SH', '600998.SH', '600999.SH', '601006.SH', '601009.SH', '601012.SH', '601018.SH', '601021.SH', '601066.SH', '601077.SH', '601088.SH', '601100.SH', '601108.SH', '601111.SH', '601117.SH', '601138.SH', '601155.SH', '601162.SH', '601166.SH', '601169.SH', '601186.SH', '601198.SH', '601211.SH', '601212.SH', '601216.SH', '601225.SH', '601229.SH', '601231.SH', '601236.SH', '601238.SH', '601288.SH', '601298.SH', '601318.SH', '601319.SH', '601328.SH', '601336.SH', '601360.SH', '601377.SH', '601390.SH', '601398.SH', '601555.SH', '601577.SH', '601600.SH', '601601.SH', '601607.SH', '601618.SH', '601628.SH', '601633.SH', '601658.SH', '601668.SH', '601669.SH', '601688.SH', '601698.SH', '601727.SH', '601766.SH', '601788.SH', '601800.SH', '601808.SH', '601816.SH', '601818.SH', '601828.SH', '601838.SH', '601857.SH', '601877.SH', '601878.SH', '601881.SH', '601888.SH', '601898.SH', '601899.SH', '601901.SH', '601916.SH', '601919.SH', '601933.SH', '601939.SH', '601985.SH', '601988.SH', '601989.SH', '601992.SH', '601997.SH', '601998.SH', '603019.SH', '603156.SH', '603160.SH', '603259.SH', '603260.SH', '603288.SH', '603369.SH', '603501.SH', '603658.SH', '603799.SH', '603833.SH', '603899.SH', '603986.SH', '603993.SH'}
get_continuous_symbol-取连续合约标的
- 传入连续合约代码,获取对应的实际的标的代码。期货专用。
函数原型:
virtual std::string get_continuous_symbol(const std::string &maincfs, int trade_date) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
maincfs | string | 是 | 连续合约的代码,包括主力、次主力合约,当月、次月、下季、隔季连续合约 |
trade_date | int | 是 | 指定某个交易日,不填则默认为回测当天。形式为YYYYMMDD |
返回值:连续合约对应的期货代码。
示例:
//获取主力合约在某交易日对应的标准合约
[In]:
sApi->get_continuous_symbol("jmZ0.CF", 20180820);
[Out]:
jm1901.CF
get_appointed_symbols-取某合约集合
- 获取指定合约集合,如主力合约集合,次主力合约集合。
函数原型:
virtual std::vector<std::string> get_appointed_symbols(const std::string &appoint_type, int trade_date) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
appoint_type | string | 是 | 指定合约的类型 Z0:主力合约;Z1:次主力合约 M0:当月连续;M1:下月连续;M3:下季连续;M6:隔季连续 |
trade_date | int | 是 | 交易日 ,形式为YYYYMMDD |
返回值: 返回指定合约集合的vector容器
示例:
//获取Z0合约集合
[In]:
sApi->get_appointed_symbols("Z0", 20200910);
[Out]: {'APZ0.CZC', 'CFZ0.CZC', 'CJZ0.CZC', 'CYZ0.CZC', 'FGZ0.CZC', 'ICZ0.CFE', 'IFZ0.CFE', 'IHZ0.CFE', 'JRZ0.CZC', 'LRZ0.CZC', 'MAZ0.CZC', 'OIZ0.CZC', 'PMZ0.CZC', 'RIZ0.CZC', 'RMZ0.CZC', 'RSZ0.CZC', 'SFZ0.CZC', 'SMZ0.CZC', 'SRZ0.CZC', 'TAZ0.CZC', 'TFZ0.CFE', 'TSZ0.CFE', 'TZ0.CFE', 'URZ0.CZC', 'WHZ0.CZC', 'ZCZ0.CZC', 'aZ0.DCE', 'agZ0.SHF', 'alZ0.SHF', 'auZ0.SHF', 'bZ0.DCE', 'bbZ0.DCE', 'buZ0.SHF', 'cZ0.DCE', 'csZ0.DCE', 'cuZ0.SHF', 'ebZ0.DCE', 'egZ0.DCE', 'fbZ0.DCE', 'fuZ0.SHF', 'hcZ0.SHF', 'iZ0.DCE', 'jZ0.DCE', 'jdZ0.DCE', 'jmZ0.DCE', 'lZ0.DCE', 'mZ0.DCE', 'niZ0.SHF', 'nrZ0.INE', 'pZ0.DCE', 'pbZ0.SHF', 'ppZ0.DCE', 'rbZ0.SHF', 'rrZ0.DCE', 'ruZ0.SHF', 'scZ0.INE', 'snZ0.SHF', 'spZ0.SHF', 'ssZ0.SHF', 'vZ0.DCE', 'wrZ0.SHF', 'yZ0.DCE', 'znZ0.SHF'}
//获取Y1合约集合
[In]:
sApi->get_appointed_symbols("Y1", 20200910);
[Out]: {'ag2101.SHF', 'cu2101.SHF', 'rb2101.SHF', 'ru2101.SHF', 'zn2101.SHF', 'm2101.DCE', 'i2101.DCE', 'l2101.DCE', 'y2101.DCE', 'pp2101.DCE', 'p2101.DCE', 'j2101.DCE', 'jd2101.DCE', 'FG2101.CZC', 'RM2101.CZC', 'TA2101.CZC', 'SR2101.CZC', 'MA2101.CZC', 'ni2101.SHF', 'al2101.SHF', 'bu2101.SHF', 'pb2101.SHF', 'hc2101.SHF', 'sn2101.SHF', 'wr2101.SHF', 'jm2101.DCE', 'c2101.DCE', 'cs2101.DCE', 'v2101.DCE', 'bb2101.DCE', 'a2101.DCE', 'b2101.DCE', 'fb2101.DCE', 'ZC2101.CZC', 'RI2101.CZC', 'SF2101.CZC', 'LR2101.CZC', 'SM2101.CZC', 'JR2101.CZC', 'WH2101.CZC', 'PM2101.CZC', 'OI2101.CZC', 'CF2101.CZC', 'AP2101.CZC', 'CY2101.CZC', 'sc2101.INE', 'fu2101.SHF', 'sp2101.SHF', 'eg2101.DCE', 'rr2101.DCE', 'nr2101.INE', 'UR2101.CZC', 'CJ2101.CZC', 'ss2101.SHF', 'eb2101.DCE', 'SA2101.CZC'}
is_suspend-是否停牌
判断标的当日是否停止交易。所传日期若为非交易日则返回True。
如若所传symbol是港股,所传日期是A股的交易日,而不是港股的交易日,返回值是True;
如若所传symbol是A股,所传日期是港股的交易日,而不是A股的交易日,返回值也是True;
函数原型:
virtual bool is_suspend(const std::string &symbol, int trade_date) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 策略中的证券代码 |
trade_date | int | 是 | 交易日,形式为YYYYMMDD,可以查询历史上的状态 |
返回值:返回True表示停牌,返回False表示未停牌
示例:
//获取000001.SZ在20200904是否停牌
[In]:
sApi->is_suspend("000001.SZ", 20200904);
[Out]:
0
is_ST-是否ST股
- 判断标的指定日期时是否ST股
函数原型:
virtual bool is_ST(const std::string &symbol, int trade_date) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 策略中的证券代码 |
trade_date | int | 是 | 交易日,形式为YYYYMMDD,可以查询历史上的状态 |
返回值:返回True表示ST股,返回False表示非ST股
示例:
//获取000001.SZ在20180104是否ST
[In]:
sApi->is_ST("000001.SZ", 20180104);
[Out]:
0
is_listed-是否上市
- 判断标的指定日期时是否上市
函数原型:
virtual bool is_listed(const std::string &symbol, int trade_date) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 策略中的证券代码 |
trade_date | int | 是 | 交易日,形式为YYYYMMDD,可以查询历史上的状态 |
返回值:返回True表示上市,返回False表示未上市或者已退市
示例:
//获取000001.SZ在20180104是否上市
[In]:
sApi->is_listed("000001.SZ",20180104);
[Out]:
1
is_trading_now-标的是否正处于交易时间
函数原型:
virtual bool is_trading_now(const std::string &symbol) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 策略中的证券代码 |
示例:
[In]:
sApi->is_trading_now("IFZ0.CFE");
[Out]:
1
is_focus_symbol-标的是否被关注
函数原型:
virtual bool is_focus_symbol(const std::string &symbol) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 标的代码 |
返回值:如果该symbol被关注则返回true;否则返回false。
示例:
[In]:
sApi->is_focus_symbol("000001.SZ");
[Out]:
1
get_symbol_pool-获取当前标的池所有标的
函数原型:
virtual std::vector<std::string> get_symbol_pool() = 0;
参数:无
返回值:返回symbol的vector容器
示例:
//获取当前标的池中所有的标的(关注的上证50成分股)
[In]:
sApi->get_symbol_pool()
[Out]: {600000.SH,600009.SH,600016.SH,600028.SH,600030.SH,600031.SH,600036.SH,600048.SH,600050.SH,600104.SH,600196.SH,600276.SH,600309.SH,600519.SH,600547.SH,600585.SH,600588.SH,600690.SH,600703.SH,600745.SH,
600837.SH,600887.SH,601012.SH,601066.SH,601088.SH,601138.SH,601166.SH,601186.SH,601211.SH,601236.SH,601288.SH,601318.SH,601319.SH,601328.CS,601336.CS,601398.CS,601601.CS,601628.SH,601658.SH,601668.SH,
601688.SH,601816.SH,601818.SH,601857.SH,601888.SH,601988.SH,601989.SH,603160.SH,603259.SH,603993.SH}
数据函数
get_bars_history-取历史K线数据-单标的
- 获取历史K线数据是从调用
on_before_market_open
/on_bar
/on_handle_data
这几个回调函数所处时刻开始向前的获取K线的数据,这样可以确保不能获取到未来数据,保证回测的科学性。 - 调用此api之前需在config文件中设置好需要下载的K线类型/标的/因子/缓存条数,否则可能取不到字段值。
- 单symbol返回的通用数据结果集的表格式是固定的,所输出的列是固定的。用户在配置BarOptions,只需设置复权模式。
函数原型:
virtual DataFramePtr
get_bars_history(const std::string &symbol, const std::string ×pan, int count, const BarOptions &options = BarOptions()) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbol | string | 是 | 标的代码 |
timespan | string | 是 | k线类型,支持的K线类型有日K/一分钟K/五分钟K/十五分钟K/三十分钟K/小时K,对应的参数如下: 日K: 1day 一分钟K:1min 五分钟K:5min 十五分钟:15min 三十分钟:30min 小时K:60min |
count | int | 是 | 获取历史数据条数,超过缓存的数据根据预定的规则。 |
options | BarOptions | 否 | 获取K线配置参数,可缺省。默认为前复权,支持的全部field:"high", "low", "open", "close", "pre_close", "settle", "pre_settle", "volume", "turnover", "total_volume", "total_turnover", "position" 单symbol取K线时只用设置复权模式: 前复权:BarOptions("pre") 后复权:BarOptions("post") 不复权:BarOptions("real") 是否跳过停牌: 跳过停牌:true,默认为true,前值填充 不跳过停牌:false,Nan填充 详见BarOptions |
返回值: 类型为DataFramePtr(std::shared_ptr<FactorDataFrame>),使用该返回值之前需要判断指针是否为nullptr,直接使用可能会报错,采用这种返回值的类型的好处:
输出结果成表格式输出,清晰明了。
可以按列取值,相同属性比较更加方便。
TIPS:
KBar的字段对应的类型:
double: high、low、open、close、pre_close、settle、pre_settle、volume、turnover、total_volume、total_turnover、position
string: symbol
int64_t: trade_date、time_stop
需要注意的是:time_stop虽然存储的格式是int64_t,但是为了方便用户查看,故意打印成time_str的格式:20200803-150000-000。
详见Bar
示例1:
//获取000850.SZ前复权的数据,其中20200807是除权除息日,BarOptions取默认配置
[In]:
string symbols = "000850.SZ";
auto etaBars2 = sApi->get_bars_history(symbols, "1day", 5);
cout << etaBars2->print() << endl;
[Out]:
symbol trade_date time_stop high low open close pre_close settle pre_settle volume turnover total_volume total_turnover position suspend
000850.SZ 20200803 20200803-150000-000 3.91871 3.67194 3.67194 3.89897 3.7 0 0 2.42597e+07 9.40994e+07 2.42597e+07 9.40994e+07 0 0
000850.SZ 20200804 20200804-150000-000 3.87922 3.80026 3.83974 3.82 3.95 0 0 2.14445e+07 8.33882e+07 2.14445e+07 8.33882e+07 0 0
000850.SZ 20200805 20200805-150000-000 3.86935 3.76078 3.82 3.85948 3.87 0 0 1.18386e+07 4.57471e+07 1.18386e+07 4.57471e+07 0 0
000850.SZ 20200806 20200806-150000-000 3.87922 3.76078 3.87922 3.82 3.91 0 0 1.06162e+07 4.09787e+07 1.06162e+07 4.09787e+07 0 0
000850.SZ 20200807 20200807-150000-000 3.83 3.7 3.83 3.75 3.82 0 0 7.17645e+06 2.69941e+07 7.17645e+06 2.69941e+07 0 0
[5 rows x 16 kbar_columns]
示例2:
//获取000850.SZ不复权的数据,其中20200807是除权除息日
//配置options参数为不复权
[In]:
string symbols = "000850.SZ";
auto etaBars2 = sApi->get_bars_history(symbols, "1day", 5, BarOptions("real"));
cout << etaBars2->print() << endl;
[Out]:
symbol trade_date time_stop high low open close pre_close settle pre_settle volume turnover total_volume total_turnover position suspend
000850.SZ 20200803 20200803-150000-000 3.97 3.72 3.72 3.95 3.7 0 0 2.42597e+07 9.40994e+07 2.42597e+07 9.40994e+07 0 0
000850.SZ 20200804 20200804-150000-000 3.93 3.85 3.89 3.87 3.95 0 0 2.14445e+07 8.33882e+07 2.14445e+07 8.33882e+07 0 0
000850.SZ 20200805 20200805-150000-000 3.92 3.81 3.87 3.91 3.87 0 0 1.18386e+07 4.57471e+07 1.18386e+07 4.57471e+07 0 0
000850.SZ 20200806 20200806-150000-000 3.93 3.81 3.93 3.87 3.91 0 0 1.06162e+07 4.09787e+07 1.06162e+07 4.09787e+07 0 0
000850.SZ 20200807 20200807-150000-000 3.83 3.7 3.83 3.75 3.82 0 0 7.17645e+06 2.69941e+07 7.17645e+06 2.69941e+07 0 0
[5 rows x 16 kbar_columns]
示例3:
//获取表格中symbol字段的值
[In]:
etaBars2->get_string_column("symbol"));
[Out]:
{000850.SZ, 000850.SZ, 000850.SZ, 000850.SZ, 000850.SZ}
//获取表格中time_stop字段的值,字段的值是int64_t类型,以表格式打印时显示的time_str的类型
[In]:
etaBars2->get_int_column("time_stop"));
[Out]:
{1595919600000, 1596006000000, 1596092400000, 1596178800000, 1596438000000}
//获取表格中open字段的值
[In]:
etaBars2->get_double_column("open"));
[Out]:
{3.59, 3.62, 3.71, 3.66, 3.72}
get_bars_history-取历史K线数据-多标的
- 获取历史K线数据是从调用
on_before_market_open
/on_bar
/on_handle_data
这几个回调函数所处时刻开始向前的获取K线的数据,这样可以确保不能获取到未来数据,保证回测的科学性。 - 调用此api之前需在config文件中设置好需要下载的K线类型/标的/因子/缓存条数,否则可能取不到字段值。
- 一组symbols返回的通用数据结果集的表格式是比较灵活的,所输出的列是根据用户配置来决定的。BarOptions中可以配置复权模式和所需要的列。
- 建议在取较多symbol时,尽量只取需要的字段,这样可以减少数据的处理从而提高回测的速度,模拟盘的话相应不大。
函数原型:
virtual std::map<std::string, DataFramePtr>
get_bars_history(const std::vector<std::string> &symbols, const std::string ×pan, int count, const BarOptions &options = BarOptions()) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
symbols | std::vector<std::string> | 是 | 一组symbol |
timespan | EBarTimespan | 是 | k线类型,支持的K线类型有日K/一分钟K/五分钟K/十五分钟K/三十分钟K/小时K,对应的参数如下: 日K: 1day 一分钟K:1min 五分钟K:5min 十五分钟:15min 三十分钟:30min 小时K:60min |
count | int | 是 | 获取历史数据条数,超过缓存的数据根据预定的规则。 |
options | BarOptions | 否 | 获取K线配置参数,可缺省。默认为前复权,支持的全部field:"high", "low", "open", "close", "pre_close", "settle", "pre_settle", "volume", "turnover", "total_volume", "total_turnover", "position" 配置BarOptions,只用设置复权模式和所需的字段: 前复权所有字段:BarOptions("pre") 后复权所有字段:BarOptions("post") 不复权所有字段:BarOptions("real") 前复权开盘价:BarOptions("pre",{"open"}) 后复权收盘价:BarOptions("post",{"close"}) 不复权最高价:BarOptions("real",{"high"}) 前复权开盘价/收盘价/最高价/最低价:BarOptions("pre",{"open", "close", "high", "low"}) 后复权开盘价/收盘价/最高价/最低价:BarOptions("post",{"open", "close", "high", "low"}) 不复权开盘价/收盘价/最高价/最低价:BarOptions("real",{"open", "close", "high", "low"}) 是否跳过停牌: 跳过停牌:true,默认为true,前值填充 不跳过停牌:false,Nan填充 详见BarOptions |
返回值: std::map
TIPS:
KBar的字段对应的类型:
double: high、low、open、close、pre_close、settle、pre_settle、volume、turnover、total_volume、total_turnover、position
string: symbol
int64_t: trade_date、time_stop
需要注意的是:time_stop虽然存储的格式是int64_t,但是为了方便用户查看,故意打印成time_str的格式:20200803-150000-000。
详见Bar
示例1:
//获取000001.SZ、000005.SZ、000850.SZ,BarOptions取默认配置。
[In]:
sApi->get_bars_history({"000001.SZ", "000005.SZ", "000850.SZ"}, "1day", 5);
[Out]:
close:
time_stop trade_date 000001.SZ 000005.SZ 000850.SZ
20200804-150000-000 20200804 14.04 3.03 3.82
20200805-150000-000 20200805 13.76 3.07 3.85948
20200806-150000-000 20200806 13.9 3.02 3.82
20200807-150000-000 20200807 13.7 2.94 3.75
20200810-150000-000 20200810 13.95 2.99 3.84
[5 rows x 5 kbar_columns]
high:
time_stop trade_date 000001.SZ 000005.SZ 000850.SZ
20200804-150000-000 20200804 14.15 3.07 3.87922
20200805-150000-000 20200805 13.85 3.1 3.86935
20200806-150000-000 20200806 13.96 3.07 3.87922
20200807-150000-000 20200807 13.9 3.01 3.83
20200810-150000-000 20200810 14.02 3 3.86
[5 rows x 5 kbar_columns]
·
· //取全部的字段结果太长,此处只显示部分
·
turnover:
time_stop trade_date 000001.SZ 000005.SZ 000850.SZ
20200804-150000-000 20200804 0 0 0
20200805-150000-000 20200805 0 0 0
20200806-150000-000 20200806 0 0 0
20200807-150000-000 20200807 0 0 0
20200810-150000-000 20200810 0 0 0
[5 rows x 5 kbar_columns]
volume:
time_stop trade_date 000001.SZ 000005.SZ 000850.SZ
20200804-150000-000 20200804 13.59 3.04 3.95
20200805-150000-000 20200805 14.04 3.03 3.87
20200806-150000-000 20200806 13.76 3.07 3.91
20200807-150000-000 20200807 13.9 3.02 3.82
20200810-150000-000 20200810 13.7 2.94 3.75
[5 rows x 5 kbar_columns]
示例2:
//获取000001.SZ、000005.SZ、000850.SZ,BarOptions配置成前复权,取开盘价和收盘价两个字段。
[In]:
sApi->get_bars_history({"000001.SZ", "000005.SZ", "000850.SZ"}, "1day", 5, BarOptions("pre", {"close", "open"}));
[Out]:
close:
time_stop trade_date 000001.SZ 000005.SZ 000850.SZ
20200804-150000-000 20200804 14.04 3.03 3.82
20200805-150000-000 20200805 13.76 3.07 3.85948
20200806-150000-000 20200806 13.9 3.02 3.82
20200807-150000-000 20200807 13.7 2.94 3.75
20200810-150000-000 20200810 13.95 2.99 3.84
[5 rows x 5 kbar_columns]
open:
time_stop trade_date 000001.SZ 000005.SZ 000850.SZ
20200804-150000-000 20200804 13.66 3.06 3.83974
20200805-150000-000 20200805 13.82 3 3.82
20200806-150000-000 20200806 13.82 3.07 3.87922
20200807-150000-000 20200807 13.8 3 3.83
20200810-150000-000 20200810 13.67 2.97 3.76
[5 rows x 5 kbar_columns]
示例3:
//获取表格中time_stop字段的值,字段的值是int64_t类型,以表格式打印时显示的time_str的类型
[In]:
df->get_int_column("time_stop"));
[Out]:
{1596524400000, 1596610800000, 1596697200000, 1596783600000, 1597042800000}
//获取open对应的表格中000001.CS标的的open字段值
[In]:
df->get_double_column("000001.SZ"));
[Out]:
{13.66, 13.82, 13.82, 13.8, 13.67}
get_one_field-取单个因子数据
函数原型:
virtual DataFramePtr get_one_field(const std::string &field, const std::vector<std::string> &symbols, int start_date, int end_date, int count, bool strict = false) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
field | std::vector<std::string> | 是 | 选取的股票属性,可以选择多个,需要预下载 |
symbols | std::vector<std::string> | 是 | 股票代码vector |
start_date | int | 是 | 开始日期,形式为YYYYMMDD |
end_date | int | 是 | 结束日期,形式为YYYYMMDD |
count | int | 是 | 向前提取的数量,当count= 0时,取的是从开始日期到结束日期之间的数据。当count!= 0 时,取的是从结束日期开始往前取的count条数据。 |
strict | bool | 否 | 报告期是否严格对齐,采用默认值就行。 |
返回值:类型为DataFramePtr(std::shared_ptr<FactorDataFrame>),使用该返回值时需要判断是否为nullptr,直接使用可能会报错。
示例1:
//获取000001.SZ/000002.SZ在20200901~20200909时间段的净利润
//根据区间来取数据,count=0
[In]:
sApi->get_one_field("NET_PROFIT", {"000001.SZ", "000002.SZ"}, 20200901, 20200909, 0);
[Out]:
trade_date 000002.SZ 000001.SZ
20200901 1.86292e+10 1.3678e+10
20200902 1.86292e+10 1.3678e+10
20200903 1.86292e+10 1.3678e+10
20200904 1.86292e+10 1.3678e+10
20200907 1.86292e+10 1.3678e+10
20200908 1.86292e+10 1.3678e+10
20200909 1.86292e+10 1.3678e+10
[7 rows x 3 kbar_columns]
示例2:
//获取000001.SZ/000002.SZ从20200909往前的count条净利润的数据
//根据count来取数据,start_date = 0
[In]:
sApi->get_one_field("NET_PROFIT", {"000001.SZ", "000002.SZ"}, 0, 20200909, 5);
[Out]:
trade_date 000002.SZ 000001.SZ
20200903 1.86292e+10 1.3678e+10
20200904 1.86292e+10 1.3678e+10
20200907 1.86292e+10 1.3678e+10
20200908 1.86292e+10 1.3678e+10
20200909 1.86292e+10 1.3678e+10
示例3:
//获取表格中000001.CS标的的近利润
[In]:
df->get_double_column("000001.SZ"));
[Out]:
{1.3678e+10, 1.3678e+10, 1.3678e+10, 1.3678e+10, 1.3678e+10}
get_field_one_day-取某天因子数据
函数原型:
virtual DataFramePtr get_field_one_day(const std::vector<std::string> &fields, const std::vector<std::string> &symbols, int trade_date) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
fields | std::vector<std::string> | 是 | 选取的股票属性,可以选择多个,需要预下载 |
symbols | std::vector<std::string> | 是 | 股票代码vector |
trade_date | int | 是 | 交易日,形式为YYYYMMDD |
返回值:类型为DataFramePtr(std::shared_ptr<FactorDataFrame>),使用该返回值时需要判断是否为nullptr,直接使用可能会报错。
示例1:
//获取000001.SZ/000002.SZ在20200901这一天的净利润和营业收入
[In]:
sApi->get_field_one_day({"NET_PROFIT","REVENUE"}, {"000001.SZ", "000002.SZ"}, 20200901);
[Out]:
symbol NET_PROFIT REVENUE
000001.SZ 1.3678e+10 7.8328e+10
000002.SZ 1.86292e+10 1.4635e+11
示例2:
//获取表格中REVENUE字段的值
[In]:
df->get_double_column("REVENUE");
[Out]:
{7.8328e+10, 1.4635e+11}
//获取表格中NET_PROFIT字段的值
[In]:
df->get_double_column("NET_PROFIT");
[Out]:
{1.3678e+10, 1.86292e+10}
get_field_one_symbol-取单个标的因子数据
函数原型:
virtual DataFramePtr get_field_one_symbol(const std::vector<std::string> &fields, const std::string &symbol, int start_date, int end_date, int count, bool strict = false) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
fields | std::vector<std::string> | 是 | 选取的股票属性,可以选择多个 |
symbol | string | 是 | 股票代码 |
start_date | int | 是 | 开始日期,形式为YYYYMMDD |
end_date | int | 是 | 结束日期,形式为YYYYMMDD |
count | int | 是 | 向前提取的数量,当count= 0时,取的是从开始日期到结束日期之间的数据。当count!= 0 时,取的是从结束日期开始往前取的count条数据。 |
strict | bool | 否 | 报告期是否严格对齐,直接采用默认值就行 |
返回值:类型为DataFramePtr(std::shared_ptr<FactorDataFrame>),使用该返回值时需要判断是否为nullptr,直接使用可能会报错。
示例1:
//获取000001.CS从20200901到20200909时间段的净利润和营业收入的数据
//根据区间来取数据,count=0
[In]:
sApi->get_field_one_symbol({"NET_PROFIT", "REVENUE"}, "000001.SZ", 20200901, 20200909, 0);
[Out]:
trade_date REVENUE NET_PROFIT
20200901 7.8328e+10 1.3678e+10
20200902 7.8328e+10 1.3678e+10
20200903 7.8328e+10 1.3678e+10
20200904 7.8328e+10 1.3678e+10
20200907 7.8328e+10 1.3678e+10
20200908 7.8328e+10 1.3678e+10
20200909 7.8328e+10 1.3678e+10
[7 rows x 3 kbar_columns]
示例2:
//获取000001.CS从20200909往前的count条净利润和营业收入的数据
//根据count来取数据,start_date = 0
[In]:
sApi->get_field_one_symbol({"NET_PROFIT", "REVENUE"}, "000001.SZ", 0, 20200909, 5);
[Out]:
trade_date REVENUE NET_PROFIT
20200903 7.8328e+10 1.3678e+10
20200904 7.8328e+10 1.3678e+10
20200907 7.8328e+10 1.3678e+10
20200908 7.8328e+10 1.3678e+10
20200909 7.8328e+10 1.3678e+10
示例3:
//获取表格中REVENUE字段的值
[In]:
df->get_string_column("REVENUE");
[Out]:
{7.8328e+10, 7.8328e+10, 7.8328e+10, 7.8328e+10, 7.8328e+10}
//获取表格中NET_PROFIT字段的值
[In]:
df->get_string_column("NET_PROFIT");
[Out]:
{1.3678e+10, 1.3678e+10, 1.3678e+10, 1.3678e+10, 1.3678e+10}
get_table_data-取表格数据
获取表格类型的数据,如期货持仓排名系列数据主力跟踪,申万一级行业指数日K行情数据,指数成分股权重数据等
获取表格类型的数据
函数原型:
virtual DataFramePtr get_table_data( const std::string &field, const std::vector<std::string> &symbols, int start_date, int end_date, int count, const std::vector<std::string> &columns = std::vector<std::string>()) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
field | string | 是 | 因子名 |
symbols | std::vector<std::string> | 是 | 一组股票代码 |
start_date | int | 是 | 开始日期,形式为YYYYMMDD |
end_date | int | 是 | 结束日期,形式为YYYYMMDD |
count | int | 是 | 向前提取的数量,当count= 0时,取的是从开始日期到结束日期之间的数据。当count!= 0 时,取的是从结束日期开始往前取的count条数据。 |
columns | std::vector<std::string> | 否 | 表内字段,默认获取因子数据的所有字段。 |
返回值:类型为DataFramePtr(std::shared_ptr<FactorDataFrame>),使用该返回值时需要判断是否为nullptr,直接使用可能会报错。
示例1:
//根据时间区段来获取主力期货排名数据,count=0
[In]:
sApi->get_table_data("FUT_SHORT_RANK", {"rb1910.SHF"}, 20190301, 20190304, 0);
[Out]:
trade_date symbol rank name volume volumeDiff
20190301 rb1910.SHF 1 鲁证期货 51326 -828
20190301 rb1910.SHF 2 银河期货 40790 6459
20190301 rb1910.SHF 3 永安期货 26222 -1200
20190301 rb1910.SHF 4 方正中期 21602 -7821
20190301 rb1910.SHF 5 国泰君安 21375 -48
20190301 rb1910.SHF 6 信达期货 16654 25
20190301 rb1910.SHF 7 中信期货 16331 -1127
20190301 rb1910.SHF 8 中粮期货 14786 395
20190301 rb1910.SHF 9 东海期货 11557 25
20190301 rb1910.SHF 10 东证期货 9716 -188
20190301 rb1910.SHF 11 五矿经易 9200 -926
20190301 rb1910.SHF 12 天风期货 6930 -1675
20190301 rb1910.SHF 13 国贸期货 6593 39
20190301 rb1910.SHF 14 新湖期货 6261 -199
20190301 rb1910.SHF 15 光大期货 6018 208
20190301 rb1910.SHF 16 东吴期货 5740 -980
20190301 rb1910.SHF 17 华泰期货 5138 -669
20190301 rb1910.SHF 18 浙商期货 4331 -805
20190301 rb1910.SHF 19 海证期货 3965 614
20190301 rb1910.SHF 20 海通期货 3845 -5
20190304 rb1910.SHF 1 鲁证期货 51219 -107
20190304 rb1910.SHF 2 银河期货 36857 -3933
20190304 rb1910.SHF 3 永安期货 26257 35
20190304 rb1910.SHF 4 国泰君安 21804 429
20190304 rb1910.SHF 5 方正中期 19561 -2041
20190304 rb1910.SHF 6 中信期货 18407 2076
20190304 rb1910.SHF 7 信达期货 16668 14
20190304 rb1910.SHF 8 中粮期货 14687 -99
20190304 rb1910.SHF 9 东海期货 12171 614
20190304 rb1910.SHF 10 五矿经易 11466 2266
20190304 rb1910.SHF 11 东证期货 10220 504
20190304 rb1910.SHF 12 天风期货 9043 2113
20190304 rb1910.SHF 13 海通期货 7491 3646
20190304 rb1910.SHF 14 光大期货 6724 706
20190304 rb1910.SHF 15 国贸期货 6690 97
20190304 rb1910.SHF 16 新湖期货 6370 109
20190304 rb1910.SHF 17 东吴期货 5993 253
20190304 rb1910.SHF 18 华泰期货 4750 -388
20190304 rb1910.SHF 19 浙商期货 4237 -94
20190304 rb1910.SHF 20 海证期货 4093 128
[40 rows x 6 kbar_columns]
示例2:
//根据count来获取期货主力排名数据,start_date = 0
[In]:
sApi->get_table_data("FUT_SHORT_RANK", {"rb1910.SHF"}, 0, 20190305, 1);
[Out]:
trade_date symbol rank name volume volumeDiff
20190305 rb1910.SHF 1 鲁证期货 49779 -1440
20190305 rb1910.SHF 2 银河期货 36840 -17
20190305 rb1910.SHF 3 永安期货 26227 -30
20190305 rb1910.SHF 4 国泰君安 24864 3060
20190305 rb1910.SHF 5 中信期货 20030 1623
20190305 rb1910.SHF 6 信达期货 19373 2705
20190305 rb1910.SHF 7 方正中期 18976 -585
20190305 rb1910.SHF 8 中粮期货 14457 -230
20190305 rb1910.SHF 9 东海期货 12381 210
20190305 rb1910.SHF 10 东证期货 10303 83
20190305 rb1910.SHF 11 五矿经易 9823 -1643
20190305 rb1910.SHF 12 天风期货 8848 -195
20190305 rb1910.SHF 13 海通期货 7150 -341
20190305 rb1910.SHF 14 国贸期货 6679 -11
20190305 rb1910.SHF 15 新湖期货 6364 -6
20190305 rb1910.SHF 16 东吴期货 5907 -86
20190305 rb1910.SHF 17 光大期货 5701 -1023
20190305 rb1910.SHF 18 华泰期货 5650 900
20190305 rb1910.SHF 19 申万期货 5490 1630
20190305 rb1910.SHF 20 国富期货 4559 666
[20 rows x 6 kbar_columns]
示例3:
//获取指定column字段的主力期货排名数据
[In]:
sApi->get_table_data("FUT_SHORT_RANK", {"rb1910.SHF"}, 0, 20190305, 1, {"trade_date", "symbol", "rank", "name"});
[Out]:
trade_date symbol rank name
20190305 rb1910.SHF 1 鲁证期货
20190305 rb1910.SHF 2 银河期货
20190305 rb1910.SHF 3 永安期货
20190305 rb1910.SHF 4 国泰君安
20190305 rb1910.SHF 5 中信期货
20190305 rb1910.SHF 6 信达期货
20190305 rb1910.SHF 7 方正中期
20190305 rb1910.SHF 8 中粮期货
20190305 rb1910.SHF 9 东海期货
20190305 rb1910.SHF 10 东证期货
20190305 rb1910.SHF 11 五矿经易
20190305 rb1910.SHF 12 天风期货
20190305 rb1910.SHF 13 海通期货
20190305 rb1910.SHF 14 国贸期货
20190305 rb1910.SHF 15 新湖期货
20190305 rb1910.SHF 16 东吴期货
20190305 rb1910.SHF 17 光大期货
20190305 rb1910.SHF 18 华泰期货
20190305 rb1910.SHF 19 申万期货
20190305 rb1910.SHF 20 国富期货
[20 rows x 4 kbar_columns]
其他函数
get_strategy_info-获取策略信息
函数原型:
virtual StrategyInfo get_strategy_info() = 0;
参数:无
返回值:策略信息StrategyInfo
示例:
auto stratety_info = sApi->get_strategy_info();
is_back_test-是否是回测模式
函数原型:
virtual bool is_back_test() = 0;
参数:无
返回值:如果是回测模式则返回true;否则返回false。
示例:
auto is_back_test = sApi->is_back_test();
is_real_env-是否是实盘环境
函数原型:
virtual bool is_real_env() = 0;
参数:无
返回值:如果是模拟盘返回true;否则返回false。
示例:
auto is_real_env = sApi->is_real_env();
get_value_type-获取动态运行参数类型
函数原型:
virtual std::string get_value_type(const std::string &dynamic_param) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
dynamic_param | string | 是 | 动态参数名称 |
返回值:返回string类型的参数类型(int64_t、double、string)
示例:
auto param_type = sApi->get_value_type("ABC");
get_value_as_string-获取动态运行参数1
- 使用此接口时需要先在web界面上创建策略参数,该参数是动态可修改的。
函数原型:
virtual std::string get_value_as_string(const std::string &dynamic_param) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
dynamic_param | string | 是 | 动态参数名称 |
返回值:返回string类型的动态策略参数
示例:
auto dparam = sApi->get_value_as_string("ABC");
get_value_as_long-获取动态运行参数2
- 使用此接口时需要先在web界面上创建策略参数,该参数是动态可修改的。
函数原型:
virtual int64_t get_value_as_long(const std::string &dynamic_param) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
dynamic_param | string | 是 | 动态参数名称 |
返回值:返回int64_t类型的动态策略参数
示例:
auto dparam = sApi->get_value_as_long("ABC");
get_value_as_double-获取动态运行参数3
- 使用此接口时需要先在web界面上创建策略参数,该参数是动态可修改的。
函数原型:
virtual double get_value_as_double(const std::string &dynamic_param) = 0;
参数:
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
dynamic_param | string | 是 | 动态参数名称 |
返回值:返回double类型的动态策略参数
示例:
auto dparam = sApi->get_value_as_double("ABC");
get_version-获取当前sdk的版本号
获取当前sdk的版本信息
函数原型:
virtual std::string get_version() = 0;
参数:无
示例:
cout << "sdk version: " << sApi->get_version() << endl;
send_custom_message-设置用户消息
- 设置用户自定义运行消息,会显示在web界面上的日志中
函数原型:
void send_custom_message(const std::string &msg);
参数:
参数 | 类型 | 说明 |
---|---|---|
msg | string | 内容 |
示例:
sApi->send_custom_message("this is a test message from sdk to web!");
数据结构
BarOptions-获取K线配置参数
struct ETA_DLL_API BarOptions
{
std::string price_mode = "pre"; // 默认为前复权,支持pre, post, real
bool pre_fill = true; // 默认为前值填充
std::vector<std::string> fields = {"high", "low", "open", "close", "pre_close", "settle", "pre_settle", "volume", "turnover", "total_volume", "total_turnover", "position"}; //需要的字段
std::string alignment; // 默认不对齐,多个symbol的对齐方式
BarOptions(std::string price_mode, bool pre_fill, std::vector<std::string> fields, std::string alignment = "") : price_mode(std::move(price_mode)), pre_fill(std::move(pre_fill)), fields(std::move(fields)), alignment(std::move(alignment)) {};
explicit BarOptions(std::string price_mode, bool pre_fill = true) : price_mode(std::move(price_mode)), pre_fill(std::move(pre_fill)) {};
BarOptions() = default;
};
RefData-股票基础信息
struct RefData
{
std::string symbol = ""; //标的
std::string exchange = ""; //交易所
std::string market = ""; //市场名称
std::string currency = ""; //币种
double lot_size = 0; //一手数目
std::string name = ""; //标的默认名字
std::string exchange_symbol = ""; //交易所原始symbol名称
std::string trade_market = ""; //该标的对应的交易市场
int32_t max_order_vol = 0; //最大委托数量
int32_t min_order_vol = 0; //最小委托数量
int32_t list_date = 0; //上市日
int32_t last_trade_date = 0; //最后交易日
int32_t tplus = 0; //成交T+n
double price_tick = 0; //标的价格浮动最小单位值
bool is_expired = false; //是否已经过期的标的,比如退市,合约交割完毕
bool short_sellable = false; //是否可以卖空
//期货专属
std::string product_name = ""; //品种名称
int32_t value_per_unit = 0; //每单位价值
double margin_rate = 0; //担保金比例%
double long_margin_rate = 0; //多头担保金 0~1
double short_margin_rate = 0; //空头担保金 0~1
double setting_margin_rate = 0; //当前合约保证金比例,如何没有设置则以交易所最低为准 0~1
bool is_standard = false; //是否是交易所标准标的, 比如主力合约就不是(量化平台自己算的)
//A股
};
Bar-K线数据
struct Bar
{
std::string symbol = ""; //交易日
int32_t trade_date = 0; //时间戳
int64_t time_stop = 0; //K线区间的秒数,目前支持 60(1min), 300(5min),1800(30min), 3600(60min), 86400(day)
std::string timespan = 0; //k线类型
double high = 0; //交易日最低价
double low = 0; //交易日开盘价
double open = 0; //交易日收盘价
double close = 0; //成交量
double volume = 0; //成交额
double turnover = 0; //累计成交量
double total_volume = 0; //累计成交额
double total_turnover = 0; //昨收
double pre_close = 0; //持仓
double position = 0; //结算价(期货)
double settle = 0; //昨结价(期货)
double pre_settle = 0; //无交易期间是否填充的(默认不填充)
bool is_suspended = false;//标准时间
std::string timestamp = "";
};
SymbolPosition-策略的标的持仓
- 某一个策略中某只标的的仓位信息。
struct SymbolPosition
{
PositionSide position_side;
std::string symbol; //标的
double pos_qty = 0; //仓位股数 (double)
double pos_daily_qty = 0; //今日仓位股数 (double)
double pos_price = 0; //仓位进仓价 (double)
double pos_high = 0; // 持仓最高价 (double)
double pos_low = 0; // 持仓最低价 (double)
int64_t pos_time = 0; // 持仓时间 (double)
double pos_ur_pnl = 0; // 仓位浮动盈亏 (double)
double available_qty = 0; // 可平仓数量(计算出来,目前因为多账户问题意义不明确)
double daily_ur_pnl = 0; // 今日浮动盈亏,现价-昨收价(结算价-期货),每日结算清零
int pos_trade_date = 0; //持仓交易日(20170101)
double pos_margin = 0; // 仓位保证金
double pos_market_value = 0; // 仓位市值
double pos_daily_overall_pnl = 0; // 当日盈亏
};
StrategyPnL-策略的盈亏信息
- 策略的整体盈亏信息。
struct StrategyPnL
{
std::string id; //策略id
double overall_pnl = 0; //策略盈亏
double ur_pnl = 0; //策略的浮动盈亏
double daily_pnl = 0; //策略当日盈亏
double total_commission = 0; //总手续费
};
OverallPosition-账户的标的持仓
- 由于多个策略可以共享账户资金,因此可能会存在多个策略中都持有某个标的的情况,账户中会将多个策略中标的信息进行汇总。
struct OverallPosition
{
std::string account_id; //账户ID
std::string symbol; //合约
double buy_price = 0; //加权平均买价(开仓/平仓所有数据加权平均)
double sell_price = 0; //加权平均卖价
double buy_qty = 0; //买数量
double sell_qty = 0; //卖数量
double last_ur_pnl = 0; //最后成交价算的盈亏(以OpenPosition计算)
double long_available_qty = 0; //多仓可以平仓数量(计算出来)
double short_available_qty = 0; //空仓可以平仓数量(计算出来)
double long_qty = 0; //多仓数量
double short_qty = 0; //空仓数量
double long_price = 0; //多仓开仓均价
double short_price = 0; //空仓开仓均价
double long_last_ur_pnl = 0; //多仓浮动盈亏
double short_last_ur_pnl = 0; //空仓浮动盈亏
double long_margin = 0; //多仓占用保证金
double short_margin = 0; //空仓占用保证金
double long_market_value = 0; //多仓持仓市值
double short_market_value = 0; //空仓持仓市值
};
Account-账户信息
struct Account
{
std::string id; //账户 id(userId-market)
std::string market; //市场
std::string currency; //账户币种(CNY)
double daily_pnl = 0; //当天盈亏 - 清算时候清零
double ur_last_pnl = 0; //浮动盈亏 - 按最后价算
double all_time_pnl = 0; //盈亏
double cash_deposited = 0; //存入现金(所有加入的现金)
double cash_available = 0; //可用现金
double cash = 0; //现金
double unit_value = 0; //账户基金价值
double margin = 0; //现金分红
double bonus = 0; //持仓占用资金
double market_value = 0; //持仓市值
double tot_assets = 0; //总资产
double total_commission = 0; //总手续费
};
TradeOrder-订单委托信息
struct TradeOrder
{
std::string symbol = ""; //证券代码
std::string channel_id = ""; //渠道号
std::string serial_id = ""; //序列号
int32_t qty = 0; //量
double price = 0; //价
EOrderSide direction; //买卖方向
EOrderType order_type; //下单类型
int64_t timestamp = 0; //下单时间
std::vector<SubTrans> trans; //相匹配的成交单数据
};
OrderUpdate-订单更新信息
struct OrderUpdate
{
std::string symbol;
std::string trade_account;
OrderSide side;
PositionSide position_side;
PositionEffect position_effect;
OrderType order_type;
OrderStatus order_status;
TimeInForce tif;
ExecType exec_type;
double qty;
double price;
double cum_qty;
double avg_px;
double commission;
std::string id;
std::string user_id;
std::string account_id;
std::string strategy_id;
std::string portfolio_id;
std::string external_order_id;
int32_t trade_date;
int64_t created;
int64_t modified;
};
OrderStatusUpdate-订单状态更新
struct ETA_DLL_API OrderStatusUpdate
{
std::string symbol;
std::string trade_account;
OrderSide side;
PositionSide position_side;
PositionEffect position_effect;
OrderType order_type;
OrderStatus order_status;
TimeInForce tif;
double qty;
double price;
double cum_qty;
double avg_px;
double commission;
std::string id;
std::string user_id;
std::string account_id;
std::string strategy_id;
std::string portfolio_id;
std::string external_order_id;
int32_t trade_date;
int64_t created;
int64_t modified;
bool has_execution;
};
SymbolPositionList-标的策略仓位方向
struct SymbolPositionList
{
SymbolPosition long_position;
SymbolPosition short_position;
};
BackTestParam-回测信息
struct BackTestParam
{
int start_date = 0; //交易日 开始日期-20170629
int end_date = 0; //交易日 结束日期-20170729
int64_t start_timestamp = 0; //绝对时间 开始日期-20170628-20:00:00 转换成ms
int64_t end_timestamp = 0; //绝对时间 结束日期-20170629-15:30:00 转换成ms
};
StrategyExitInfo-策略结束信息
struct StrategyExitInfo
{
int32_t code = 0; //退出代码
std::string msg; //消息
BackTestResult result; //回测结果
};
BackTestResult-回测结果
struct BackTestResult
{
std::string back_test_id; //回测ID
double annualized_return = 0; //年化收益率
double maximum_drawdown = 0; //最大回撤
double sharpe_ratio = 0; //夏普比率
double standard_annualized_return = 0; //基准年化收益率
int day_count = 0; //回测天数
double volatility = 0; //策略波动率
double strategy_return = 0; //策略收益
double ur_asset = 0; //策略资产
int64_t quote_count = 0; //回测行情数
int64_t cost_time = 0; //回测耗时
double win_ratio = 0; //胜率
};
ValueField-因子字段
struct ValueField
{
int date = 0;
int report = 0;
double value = std::numeric_limits<double>::quiet_NaN(); // 扩展字段
void* ptr = nullptr; // 任意对象指针
bool operator==(const ValueField &value) const;
friend std::ostream &operator<< (std::ostream& oss, const ValueField& o);
std::string print();
};
MarketParam-开盘数据
struct MarketParam
{
int trade_date; //当前交易日
};
FactorDataFrame-通用数据结果集
class FactorDataFrame {
public:
virtual ~FactorDataFrame() = default;
static size_t PRINT_LINE_SIZE; //打印数据的最大行数,默认100行,其他由省略号代替
virtual std::string print() const = 0; //打印函数
virtual ColumnType get_column_type(const std::string& name) const = 0; //根据列名获取对应列的值类型
virtual std::vector<std::string> get_columns() const = 0; //获取列名
virtual const std::string & get_index_name() const = 0; //获取索引的名称
virtual const std::vector<double>& get_double_column(const std::string& name) const = 0; //根据列名获取类型为double的一列值
virtual const std::vector<int64_t>& get_int_column(const std::string& name) const = 0; //根据列名获取类型为double的一列值
virtual const std::vector<std::string>& get_string_column(const std::string& name) const = 0; //根据列名获取类型为double的一列值
};
typedef std::shared_ptr<gQuant::FactorDataFrame> DataFramePtr;
参数可选项
市场类型
- 类型:string
值 | 说明 |
---|---|
CS | A股市场 |
CF | 期货 |
IDX | 指数 |
HK | 港股 |
订单执行状态
- 类型:int
值 | 说明 |
---|---|
1 | 新单 |
2 | 部成 |
3 | 已成 |
4 | 今日完结 |
5 | 撤单 |
6 | 改单 |
7 | 正在撤单 |
8 | 终止 |
9 | 拒单 |
10 | 挂起 |
11 | 报单 |
12 | 正在计算 |
13 | 过期单 |
14 | restarted |
15 | 正在改单 |
订单开平仓标志
- 类型:int
值 | 说明 |
---|---|
1 | 开仓 |
2 | 平仓 |
3 | 平今仓 |
4 | 平昨仓 |
订单状态
- 类型:int
值 | 说明 |
---|---|
0 | none |
1 | new |
2 | partially_filled |
3 | filled |
4 | done_for_day |
5 | caceled |
6 | replaced |
7 | pending_cacel |
8 | stopped |
9 | rejected |
10 | suspended |
11 | pending_new |
12 | calculated |
13 | expired |
14 | accepted_for_bidding |
15 | pending_replace |
订单时间状态
- 类型:string
值 | 说明 |
---|---|
DAY | 订单在交易日内有效 |
FAK | 订单必须立即执行,不能被立即执行的部分将被取消 |
FOK | 订单必须被完全执行或者完全不执行 |
买卖方向
- 类型:char
值 | 说明 |
---|---|
buy | 买 |
sell | 卖 |
持仓方向
- 类型:char
值 | 说明 |
---|---|
long | 持多 |
short | 持空 |
下单类型
- 类型:int
值 | 说明 |
---|---|
1 | 市价单 |
2 | 限价单 |
level2成交状态
- 类型:char
值 | 说明 |
---|---|
4 | 成交 |
F | 撤单 |
表格数据类型
- 类型:int
值 | 说明 |
---|---|
2 | double |
3 | int |
4 | string |
5 | char |
6 | timestamp |
K线类型
- 类型:string
值 | 说明 |
---|---|
1day | 日K |
1min | 1分钟K |
5min | 5分钟K |
15min | 15分钟K |
30min | 30分钟K |
60min | 60分钟K |
报价列表
- 类型:string
值 | 说明 |
---|---|
bid1 | 买1价 |
bid2 | 买2价 |
bid3 | 买3价 |
bid4 | 买4价 |
bid5 | 买5价 |
bid6 | 买6价 |
bid7 | 买7价 |
bid8 | 买8价 |
bid9 | 买9价 |
bid10 | 买10价 |
ask1 | 卖1价 |
ask2 | 卖2价 |
ask3 | 卖3价 |
ask4 | 卖4价 |
ask5 | 卖5价 |
ask6 | 卖6价 |
ask7 | 卖7价 |
ask8 | 卖8价 |
ask9 | 卖9价 |
ask10 | 卖10价 |
订阅模式
- 类型:string
值 | 说明 |
---|---|
single_only | 独立推送 |
group_only | 组推送 |
both | 两种同时推送 |