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 &quote, 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

Quote对象

行情数据

location

Location对象

数据的来源是来自哪个进程

dest

uint32_t

以16进制打印出来与location配合可以知道数据保存的journal文件名

返回

返回

类型

说明

范例:

void on_quote(Context_ptr & context, const Quote &quote, const location_ptr &location, uint32_t dest) override {
  SPDLOG_INFO("on quote: {}", quote.to_string());
}

on_transaction

逐笔成交行情数据的推送会自动触发该方法的调用

注意 : sim模拟柜台不支持逐笔行情

参数

参数

类型

说明

context

对象

策略的全局变量,通过点标记(”->”)来获取其属性

transaction

Transaction对象

逐笔成交行情数据

location

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

Entrust对象

逐笔委托行情数据

location

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

Deregister对象

断开回调信息

location

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

BrokerStateUpdate对象

客户端状态变化回调信息

location

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

SyntheticData对象

订阅的算子器发布的数据

location

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

OperatorStateUpdate对象

订阅的其他算子器的状态信息

location

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

Source对象

行情柜台ID

instrument

list

代码列表

exchange_id

Exchange对象

交易所ID

返回

返回

类型

说明

范例:

context->subscribe("sim", {"600000"}, {"SSE"});

context->subscribe_all

订阅全市场行情

参数

参数

类型

说明

source

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

InstrumentType

合约类型

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

InstrumentType

合约类型

price

double

委托价格

volume

double

委托量

side

Side

委托方向

price_type

PriceType

订单价格类型(市价、限价、本方最优)

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

InstrumentType

合约类型

price

double

成交价

volume

double

成交量

bid_no

int64_t

买方订单号

ask_no

int64_t

卖方订单号

exec_type

ExecType

SZ: 成交标识

side

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

OperatorState对象

连接状态

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

BrokerState

进程连接状态