c++算子API文档
快速上手
算子逻辑简介
注意
c++算子需要先进行加密打包, 在添加到算子面板运行, 具体方法详见 :
1 #include <kungfu/wingchun/extension.h>
2 #include <kungfu/wingchun/operator/context.h>
3 #include <kungfu/wingchun/operator/operator.h>
4 #include <kungfu/yijinjing/journal/assemble.h>
5 #include <kungfu/yijinjing/time.h>
6
7 using namespace kungfu::longfist::enums;
8 using namespace kungfu::longfist::types;
9 using namespace kungfu::wingchun::op;
10 using namespace kungfu::yijinjing::data;
11 using namespace kungfu::yijinjing;
12 int i = 0;
13 KUNGFU_MAIN_OPERATOR(KungfuOperator101) {
14 public:
15 KungfuOperator101() = default;
16 ~KungfuOperator101() = default;
17
18 void pre_start(Context_ptr & context) override {
19 SPDLOG_INFO("preparing operator");
20 context->subscribe("sim", {"600000"}, {"SSE"});
21 }
22
23 void post_start(Context_ptr & context) override { SPDLOG_INFO("operator started"); }
24
25 void on_quote(Context_ptr & context, const Quote "e, const location_ptr &location, uint32_t dest) override {
26 i++;
27 std::string key = "price";
28 std::string value = fmt::format("{}", quote.last_price);
29 context->publish_synthetic_data(key, value);
30 SPDLOG_INFO("on quote: {} i {} location->uid {}", quote.last_price, i, location->location_uid);
31 }
32
33 void on_broker_state_change(Context_ptr & context, const BrokerStateUpdate &broker_state_update,
34 const location_ptr &location) override {
35 SPDLOG_WARN("on broker state changed: {}", broker_state_update.to_string());
36 };
37
38 void on_operator_state_change(Context_ptr & context, const OperatorStateUpdate &operator_state_update,
39 const location_ptr &location) override {
40 SPDLOG_WARN("on operator state changed: {}", operator_state_update.to_string());
41 };
42 };
函数定义
基本方法
pre_start
启动前调用函数,在策略启动前调用,用于完成添加交易账户,订阅行情,策略初始化计算等
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void pre_start(Context_ptr &context) override{
SPDLOG_INFO("pre_start");
}
post_start
启动后调用函数,策略连接上行情交易柜台后调用,本函数回调后,策略可以执行添加时间回调、获取策略持仓、报单等操作
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void post_start(Context_ptr &context) override{
SPDLOG_INFO("post_start");
}
pre_stop
策略退出前方法 (当关闭策略的时候,策略退出之前调用这个方法)
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void pre_stop(Context_ptr &context) override{
SPDLOG_INFO("pre_stop");
}
post_stop
进程退出前方法 (当关闭策略的时候,策略进程退出之前调用这个方法)
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void post_stop(Context_ptr &context) override{
SPDLOG_INFO("post_stop");
}
on_quote
行情数据的推送会自动触发该方法的调用。
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
quote |
行情数据 |
|
location |
数据的来源是来自哪个进程 |
|
dest |
uint32_t |
以16进制打印出来与location配合可以知道数据保存的journal文件名 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void on_quote(Context_ptr & context, const Quote "e, const location_ptr &location, uint32_t dest) override {
SPDLOG_INFO("on quote: {}", quote.to_string());
}
on_transaction
逐笔成交行情数据的推送会自动触发该方法的调用
注意 : sim模拟柜台不支持逐笔行情
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
transaction |
逐笔成交行情数据 |
|
location |
数据的来源是来自哪个进程 |
|
dest |
uint32_t |
以16进制打印出来与location配合可以知道数据保存的journal文件名 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void on_transaction(Context_ptr &context, const Transaction &transaction, const location_ptr &location, uint32_t dest) override {
SPDLOG_INFO("on transaction: {}", transaction.to_string());
}
on_entrust
逐笔委托行情数据的推送会自动触发该方法的调用
注意 : sim模拟柜台不支持逐笔行情
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
entrust |
逐笔委托行情数据 |
|
location |
数据的来源是来自哪个进程 |
|
dest |
uint32_t |
以16进制打印出来与location配合可以知道数据保存的journal文件名 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void on_entrust(Context_ptr &context, const Entrust &entrust, const location_ptr &location, uint32_t dest) override {
SPDLOG_INFO("on entrust: {}", entrust.to_string());
}
on_deregister
交易账户(TD)进程 / 行情(MD)进程断开回调此函数
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
deregister |
断开回调信息 |
|
location |
数据的来源是来自哪个进程 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void on_deregister(Context_ptr &context, const Deregister &deregister,const location_ptr &location) override {
SPDLOG_INFO("on_deregister: {}", deregister.to_string());
}
on_broker_state_change
客户端状态变化回调
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
broker_state_update |
客户端状态变化回调信息 |
|
location |
数据的来源是来自哪个进程 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void on_broker_state_change(Context_ptr &context, const BrokerStateUpdate &brokerStateUpdate,const location_ptr &location) override {
SPDLOG_INFO("on_broker_state_change: {}", brokerStateUpdate.to_string());
}
on_synthetic_data
订阅的算子器发布的数据返回
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
synthetic_data |
订阅的算子器发布的数据 |
|
location |
数据的来源是来自哪个进程 |
|
dest |
uint32_t |
以16进制打印出来与location配合可以知道数据保存的journal文件名 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void on_synthetic_data(Context_ptr &context, const SyntheticData &synthetic_data, const location_ptr &location,uint32_t dest) override {
SPDLOG_INFO("on_synthetic_data: {}", synthetic_data.to_string());
}
on_operator_state_change
订阅的算子器状态变化回调
参数
参数 |
类型 |
说明 |
context |
对象 |
策略的全局变量,通过点标记(”->”)来获取其属性 |
operator_state_update |
订阅的其他算子器的状态信息 |
|
location |
数据的来源是来自哪个进程 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
void on_operator_state_change(Context_ptr &context, const OperatorStateUpdate &operator_state_update, const location_ptr &location) override {
SPDLOG_INFO("on_operator_state_change: {}", operator_state_update.to_string());
}
行情交易函数
context->subscribe
订阅行情(支持动态订阅)
参数
参数 |
类型 |
说明 |
source |
行情柜台ID |
|
instrument |
list |
代码列表 |
exchange_id |
交易所ID |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
context->subscribe("sim", {"600000"}, {"SSE"});
context->subscribe_all
订阅全市场行情
参数
参数 |
类型 |
说明 |
source |
行情柜台ID |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
context->subscribe_all("xtp");
context->subscribe_operator
订阅算子器/bar数据
注意 : 注意 :算子器的 group 默认为 ‘default’ ; bar数据的 group 为 ‘bar’
参数
参数 |
类型 |
说明 |
group |
str |
组名 |
name |
str |
名字ID |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
context->subscribe_operator(group, name)
# 例如 : 订阅算子id为test的算子器
# context->subscribe_operator("default", "test")
# 例如 : 订阅Bar_id为 bar1 的bar数据
# context->subscribe_operator("bar", "bar1")
context->publish_synthetic_data
发布算子数据 (给订阅这个算子器的算子/策略发布标识为key,内容为value的数据)
参数
参数 |
类型 |
说明 |
key |
str |
标识 |
value |
str |
内容 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
context->publish_synthetic_data(key, value)
# 例如 : 给订阅这个算子器的算子/策略发布标识为'test',内容为"208.43"的数据
# context->publish_synthetic_data("test", "208.43")
辅助函数
info级别日志
输出INFO级别 Log 信息
参数 |
类型 |
说明 |
msg |
str |
Log信息 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
SPDLOG_INFO(msg);
warning级别日志
输出WARN级别Log信息
参数
参数 |
类型 |
说明 |
msg |
str |
Log信息 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
SPDLOG_WARN(msg)
error级别日志
输出ERROR级别Log信息
参数
参数 |
类型 |
说明 |
msg |
str |
Log信息 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
SPDLOG_ERROR(msg)
context->add_timer
注册时间回调函数
参数
参数 |
类型 |
说明 |
nano |
uint64_t |
触发回调的纳秒时间戳 |
callback |
object |
回调函数 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
// 5s后撤单
context->add_timer(time::now_in_nano() + 5*1e9,[context,order_id](const kungfu::event_ptr &e){
int action_id = context->cancel_order(order_id);
std::cout << “action_id” << action_id << std::endl;
});
context->add_time_interval
时间间隔回调函数
参数
参数 |
类型 |
说明 |
nano |
uint64_t |
触发回调的纳秒时间戳 |
callback |
object |
回调函数 |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
// 每10s回调一次
context->add_time_interval(10 * 1e9,[&](const kungfu::event_ptr &e){
std::cout << “调用add_time_interval 函数” << std::endl;
});
context->clear_timer()
取消定时器
参数
参数 |
类型 |
说明 |
timer_id |
int32_t |
时间回调函数ID |
返回
返回 |
类型 |
说明 |
无 |
无 |
无 |
范例:
auto timer_id = context->add_time_interval(1e9,[&](const kungfu::event_ptr &e){
std::cout << “调用add_time_interval 函数” << std::endl;
});
context->clear_timer(timer_id)
context.req_deregister()
关闭策略进程
范例:
context->req_deregister()
常量定义
Source柜台
属性 |
值 |
说明 |
CTP |
“ctp“ |
CTP柜台 |
XTP |
“xtp“ |
XTP柜台 |
SIM |
“sim“ |
SIM柜台 |
Exchange交易所
属性 |
值 |
说明 |
BSE |
“BSE” |
北交所 (北京证券交易所) |
SSE |
“SSE” |
上交所 (上海证券交易所) |
SZE |
“SZE” |
深交所 (深圳证券交易所) |
SHFE |
“SHFE” |
上期所 (上海期货交易所) |
DCE |
“DCE” |
大商所 (大连商品交易所) |
CZCE |
“CZCE” |
郑商所 (郑州商品交易所) |
CFFEX |
“CFFEX” |
中金所 (中国金融期货交易所) |
INE |
“INE” |
能源中心 (上海国际能源交易中心) |
GFEX |
“GFEX” |
广期所(广州期货交易所) |
InstrumentType 代码类型
属性 |
说明 |
Unknown |
未知 |
Stock |
股票 |
Future |
期货 |
Bond |
债券 |
StockOption |
股票期权 |
TechStock |
科技股 |
Fund |
基金 |
Index |
指数 |
Repo |
回购 |
CryptoFuture |
数字货币期货 |
CryptoUFuture |
数字货币期货U本位 |
Crypto |
数字货币 |
PriceType 报单类型
属性 |
说明 |
Limit |
限价,通用 |
Any |
市价,通用,对于股票上海为最优五档剩余撤销,深圳为即时成交剩余撤销 |
FakBest5 |
上海深圳最优五档即时成交剩余撤销,不需要报价 |
ForwardBest |
仅深圳本方方最优价格申报, 不需要报价 |
ReverseBest |
上海最优五档即时成交剩余转限价,深圳对手方最优价格申报,不需要报价 |
Fak |
股票(仅深圳)即时成交剩余撤销,不需要报价;期货即时成交剩余撤销,需要报价 |
Fok |
股票(仅深圳)市价全额成交或者撤销,不需要报价;期货全部或撤销,需要报价 |
EnhancedLimit |
增强限价盘-港股 |
AtAuctionLimit |
增强限价盘-港股 |
AtAuction |
竞价盘-港股 , 期货(竞价盘的价格就是开市价格) |
Side 买卖
属性 |
说明 |
Buy |
买 |
Sell |
卖 |
Lock |
锁仓 |
Unlock |
解锁 |
Exec |
行权 |
Drop |
放弃行权 |
Purchase |
申购 |
Redemption |
赎回 |
Split |
拆分 |
Merge |
合并 |
MarginTrade |
融资买入 |
ShortSell |
融券卖出 |
RepayMargin |
卖券还款 |
RepayStock |
买券还券 |
CashRepayMargin |
现金还款 |
StockRepayStock |
现券还券 |
SurplusStockTransfer |
余券划转 |
GuaranteeStockTransferIn |
担保品转入 |
GuaranteeStockTransferOut |
担保品转出 |
ExecType 标识
属性 |
说明 |
Unknown |
未知 |
Cancel |
撤单 |
Trade |
成交 |
Location 标识
属性 |
说明 |
mode |
交易规则(目前只支持 LIVE,实时交易) |
category |
类别(TD/MD) (这条数据的来源是 td还是md) |
group |
柜台id (比如 : xtp , ctp , sim) |
name |
对于交易进程(如:on_order,on_trade)是账户名(比如: 123456, 123321 ) , 对于行情进程(如:on_quote)是柜台ID (比如: xtp , sim) |
uid |
mode/category/group/name 组成的字符串的哈希值 |
uname |
location的整体信息 (比如 : td/sim/123/live (数据来源是td , 柜台是sim柜台 , 账号是 123 , 交易规则是实时交易) ) |
BrokerState 进程连接状态
属性 |
说明 |
Pending |
等待中 |
Idle |
无数据 |
DisConnected |
已断开 |
Connected |
已连接 |
LoggedIn |
已登录 |
LoginFailed |
登录失败 |
Ready |
就绪 |
OperatorState 连接状态
属性 |
说明 |
Pending |
等待中 |
DisConnected |
已断开 |
ErrConnectedor |
错误连接 |
Ready |
就绪 |
数据结构
Quote 行情信息
属性 |
类型 |
说明 |
data_time |
int64_t |
数据生成时间(交易所时间) |
instrument_id |
str |
合约ID |
exchange_id |
str |
交易所ID |
instrument_type |
合约类型 |
|
pre_close_price |
double |
昨收价 |
pre_settlement_price |
double |
昨结价 |
last_price |
double |
最新价 |
volume |
double |
数量 |
turnover |
double |
成交金额 |
pre_open_interest |
double |
昨持仓量 |
open_interest |
double |
持仓量 |
open_price |
double |
今开盘 |
high_price |
double |
最高价 |
low_price |
double |
最低价 |
upper_limit_price |
double |
涨停板价 |
lower_limit_price |
double |
跌停板价 |
close_price |
double |
收盘价 |
settlement_price |
double |
结算价 |
iopv |
double |
基金实时参考净值 |
total_bid_volume |
double |
总委托买入量 |
total_ask_volume |
double |
总委托卖出量 |
total_trade_num |
int64_t |
总成交笔数 |
bid_price |
array |
申买价 |
ask_price |
array |
申卖价 |
bid_volume |
array |
申买量 |
ask_volume |
array |
申卖量 |
Entrust 逐笔委托
属性 |
类型 |
说明 |
data_time |
int64_t |
数据生成时间(交易所时间) |
instrument_id |
str |
合约ID |
exchange_id |
str |
交易所ID |
instrument_type |
合约类型 |
|
price |
double |
委托价格 |
volume |
double |
委托量 |
side |
委托方向 |
|
price_type |
订单价格类型(市价、限价、本方最优) |
|
main_seq |
int64_t |
主序号 |
seq |
int64_t |
子序号 |
orig_order_no |
int64_t |
原始订单号 上海为原始订单号, 深圳为索引号 |
biz_index |
int64_t |
业务序号 |
Transaction 逐笔成交
属性 |
类型 |
说明 |
data_time |
int64_t |
数据生成时间(交易所时间) |
instrument_id |
str |
合约ID |
exchange_id |
str |
交易所ID |
instrument_type |
合约类型 |
|
price |
double |
成交价 |
volume |
double |
成交量 |
bid_no |
int64_t |
买方订单号 |
ask_no |
int64_t |
卖方订单号 |
exec_type |
SZ: 成交标识 |
|
side |
买卖方向 |
|
main_seq |
int64_t |
主序号 |
seq |
int64_t |
子序号 |
biz_index |
int64_t |
业务序号 |
SyntheticData 订阅的算子器返回数据
属性 |
类型 |
说明 |
update_time |
int64_t |
更新时间 |
key |
str |
订阅的算子器发布的标识 |
value |
str |
订阅的算子器发布的内容 |
tag_a |
str |
占位(目前没有用到) |
tag_b |
str |
占位(目前没有用到) |
tag_c |
str |
占位(目前没有用到) |
OperatorStateUpdate 订阅的其他算子器状态变化信息
属性 |
类型 |
说明 |
state |
连接状态 |
|
update_time |
int64_t |
更新时间 |
location_uid |
int64_t |
mode/category/group/name 组成的字符串的哈希值 |
value |
str |
内容 |
info_a |
str |
占位(目前没有用到) |
info_b |
str |
占位(目前没有用到) |
Deregister 断开回调信息
属性 |
类型 |
说明 |
mode |
enums |
交易规则(目前只支持 LIVE,实时交易) |
category |
enums |
类别(TD/MD) (这条数据的来源是 td还是md) |
group |
str |
柜台ID (比如 : xtp , ctp) |
name |
str |
对于交易进程(如:on_order,on_trade)是账户名(比如: 123456, 123321 ) , 对于行情进程(如:on_quote)是柜台ID (比如: xtp , sim) |
location_uid |
uint32_t |
mode/category/group/name 组成的字符串的哈希值 |
BrokerStateUpdate 客户端状态变化回调信息
属性 |
类型 |
说明 |
location_uid |
uint32_t |
mode/category/group/name 组成的字符串的哈希值 |
state |
进程连接状态 |