六、OpenQuant Web通讯
六、OpenQuant Web通讯
6.1 line
功能: 上传时序数据,用于绘制折线图、曲线图等时间序列图表
参数:
chart_id: 字符串,图表分组标识,相同chart_id的数据会显示在同一个图表中series_name: 字符串,线条名称,用于区分同一图表中的不同数据系列series_data: 数组,包含两个元素:[timestamp_ms, value]timestamp_ms: 整数,时间戳(毫秒)value: 数值,可以是整数或浮点数
返回值: 无
示例:
import json
def upload_line_data(trader):
ts = 1705123456789 # 时间戳(毫秒)
balance = 10000.0
profit = 45.50
# 上报余额数据
trader.log(json.dumps({
"chart_id": "balance",
"series_name": "balance",
"series_data": [ts, balance],
}), event="line")
# 上报收益数据
trader.log(json.dumps({
"chart_id": "profit",
"series_name": "profit",
"series_data": [ts, profit],
}), event="line")
6.2 stats(看板卡片)
功能: 上传看板统计数据,用于在Web平台显示键值对形式的统计信息卡片
参数:
chart_id: 字符串,面板/分组标题,用于组织多个统计项items: 数组,每个元素为{"key": 字符串, "value": 任意}key: 字符串,统计项的名称value: 任意类型,统计项的值(可以是字符串、数字等)
返回值: 无
示例:
import json
def upload_stats_data(trader):
"""上传看板统计数据"""
balance = 10000.0
# 上报看板统计数据
trader.log(json.dumps({
"chart_id": "balance & status",
"items": [
{"key": "balance", "value": balance},
{"key": "status", "value": "running"},
{"key": "total_trades", "value": 1250},
{"key": "win_rate", "value": "68.5%"},
],
}), event="stats")
6.3 page(键值列表)
功能: 上传页面级别的键值对数据,用于在Web平台显示简单的键值列表,会在实盘列表页面展示
参数:
- 直接是数组,每个元素为
{"key": 字符串, "value": 任意}key: 字符串,键名value: 任意类型,值(可以是字符串、数字等)
返回值: 无
示例:
import json
def upload_page_data(trader):
"""上传页面键值列表数据"""
balance = 10000.0
# 上报页面键值列表数据
trader.log(json.dumps([
{"key": "balance", "value": balance},
{"key": "status", "value": "running"},
{"key": "last_update", "value": "2024-01-15 10:30:00"},
]), event="page")
6.4 table(表格)
功能: 上传表格数据,用于在Web平台显示结构化的表格
参数:
chart_id: 字符串,表格分组标识data: 数组,包含一个或多个表格对象,每个表格对象包含:title: 字符串,表格标题cols: 数组,列名列表rows: 数组,行数据列表,每行是一个数组,元素数量需与cols长度一致- 单元格可以是字符串、数字、
null,或者按钮对象 - 按钮对象格式:
type: 字符串,固定为"button"label: 字符串,按钮显示的文本cmd: 字符串,按钮点击时执行的命令params: 对象,可选,命令参数定义,使用 JSON Schema 格式:type: 字符串,参数类型,一般为"object"properties: 对象,定义各个参数的属性,每个参数可包含:type: 字符串,参数类型(如"number"、"string"等)minimum: 数字,可选,最小值maximum: 数字,可选,最大值default: 任意,可选,默认值
required: 数组,可选,必填参数的名称列表
- 单元格可以是字符串、数字、
返回值: 无
示例:
import json
def upload_table_data(trader):
"""上传表格数据"""
balance = 10000.0
secondary_balance = 5000.0
# 上报表格数据
trader.log(json.dumps({
"chart_id": "balance & status",
"data": [{
"title": "账户信息",
"cols": ["账户", "余额", "状态"],
"rows": [
["主账户", balance, "running"],
["次账户", secondary_balance, "running"],
],
}],
}), event="table")
# 上报多个表格
trader.log(json.dumps({
"chart_id": "trading_info",
"data": [
{
"title": "持仓信息",
"cols": ["交易对", "方向", "数量", "盈亏"],
"rows": [
["BTC_USDT", "多", "0.5", "+125.50"],
["ETH_USDT", "空", "2.0", "-45.20"],
],
},
{
"title": "交易统计",
"cols": ["指标", "数值"],
"rows": [
["总交易次数", "1250"],
["胜率", "68.5%"],
["总盈亏", "+5234.56"],
],
},
],
}), event="table")
# 上报带按钮的表格
balance = 10000.0
table_data = {
"chart_id": "balance & status",
"data": [{
"title": "balance & status",
"cols": ["balance", "status", "action"],
"rows": [
[
balance,
"running",
{
"type": "button",
"label": "Close",
"cmd": "close_partial",
"params": {
"type": "object",
"properties": {
"price": {
"type": "number"
},
"amount": {
"type": "number"
}
},
"required": [
"price",
"amount"
]
}
}
]
]
}]
}
trader.log(json.dumps(table_data), event="table")