跳到主要内容

六、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")