Privora 泊睿操作手册
你的云原生数据工作站与量化盯盘神器。无论是构建自动化的数据流水线,还是利用系统内置的 A/H 股数据源运行个人的量化策略,在这里都无需编写繁琐的底层代码即可轻松实现。
新手起步
- 注册与问卷: 首次注册登录后,系统会引导您填写「欢迎问卷」(所属角色、使用目的等),完成后系统将自动为您播放功能引导(Product Tour),逐一走一遍侧边栏各个模块,帮助您快速熟悉布局。
- 重新触发引导: 若您跳过了引导,可随时点击左侧导航栏底部的「功能引导」重新学习。
- 中英切换: 点击侧边栏的「语言」即可实时切换系统语言。
AI 助手
1. 入口
- 登录后,侧边栏底部(语言切换旁)会出现「AI 助手」入口,点击展开对话抽屉;当前以文字输入为主,不需要开麦克风也能使用。该入口仅在管理员为你所在环境启用此功能后才会出现。
2. 能做什么
- 用自然语言问平台怎么用、查某个看板/资产的数据;也可以问「你能做什么」,它会列出当前对你开放的操作清单。
3. 口述记账
- 可以口述录入一笔真实持仓交易(买/卖),资产类型覆盖股票、黄金、场外基金(说 6 位基金代码);账户、金额等关键信息会先在确认卡片里回显,你确认后才真正入账。
4. 组合摘要卡
- 问类似「我的持仓怎么样」的问题,会返回一张汇总卡:合计市值与浮动盈亏一目了然。
首页总览
1. 六张统计卡
- 持仓总市值、当日盈亏、订阅数、Token 数、近 7 天 API 调用次数、调度作业总数/活跃数——任意一张卡没有数据时都会给出对应的引导操作(如「去创建 Token」),不会只显示一个冷冰冰的 0。
2. 新用户引导
- 刚注册、还没有持仓或订阅的账号会看到 2 张场景卡,指向典型用法的入口;同时提供一份 7 步上手清单:创建 Token → 订阅一个数据资产 → 完成第一次 API 调用 → 配置一条告警规则 → 接入 Webhook(飞书/微信)→ 跑一次回测 → 接入 Agent,完成度会体现在欢迎语和进度条里。
3. 活跃用户运营看板
- 清单全部完成后,该区域切换为 Quick Actions 快捷入口,加上近 24 小时作业健康与今日告警三栏,方便日常巡检,不再展示新手清单。
洞察工作室(仪表盘)
1. 搭建仪表板与全局变量
- 数据绑定: 将时序图、表格直接绑定到「资产目录」中已注册的资产,或选择「Custom SQL Query」直写底层 SQL。
- 联动筛选: 添加全局下拉变量(如 stock_code),在图表 SQL 中通过 ${stock_code} 引用。切换下拉框,全量图表秒级联动刷新。
2. 指标告警
- 点击「新建规则」,选择监控场景(A股 / 港股 / 基金 / 黄金内置标的搜索,或选择「自定义指标」绑定任意已订阅的数据资产 + 字段过滤)来确定监控范围。
- 设定触发条件(如:当收盘价的最新值小于 1500 时通知我),并在「通知方式」里选择一个已配置的 Webhook 数据源作为通知渠道——如果还没有,需先在「资产工作室 -> 数据源连接」里添加一个 WEBHOOK 类型的数据源。
- 在「高级设置」中设置静默期(分钟,默认 60)与每日触发上限次数,避免短时间内被同一条规则反复轰炸。
资产工作室(数据基座)
1. 配置数据源连接
- Category: 选择系统类型,如 Database(数据库)、API、Webhook(用于绑定告警通知,如飞书/钉钉群机器人)等。
- Authentication: 数据库填账密;API/Webhook 可配置 Token 或在高级设置中填写 Sign Secret 验签以确保安全。
- Server Type: 可选 Production(生产)、Development(开发)或 Test(测试),实现数据源的多环境物理隔离。
- 数据源类型新增 Hologres(阿里云实时数仓)。
2. 注册与管理数据资产
- 敏感度管控: Public — 公开资产,平台内其他团队可见。Internal — 内部私密资产。
- 数据探查: 在详情页点击「Data Profile」,系统会自动统计并生成各列的空值率、极大极小值与数据分布图。
3. 新增数据资产家族
- 市场目录新增了两类可直接订阅的数据集:场外/场内基金日行情与净值(fund_day,历史约 15 年)、基金分红(fund_dividend);用法与个股行情类资产一致,在 Marketplace 里搜索订阅即可。
流程工作室(数据加工厂)
1. 流程编排画布
- 节点拖拽与配置: 从左侧面板将 Database、API、Transform、Filter 等节点拖入网格并双击配置。对于 SQL 节点,可直接编写业务逻辑并点击「Format SQL」美化。支持配置节点失败的 Retry Times。
- 连线控制: 从节点右侧拖出连线到下一个节点。双击连线可设置触发条件(On Success 正常流转,或 On Failure 降级补偿)。
- 版本快照: 系统会自动保存每次修改的快照,支持版本差异对比「Compare」与一键回滚「Restore」。
- Agent / API 更新: Agent 或脚本可通过 PUT /api/ingestions/{id}(scope process.pipeline.update)更新已有流程:省略 nodes = 只改名/描述,保留步骤;nodes=[...] = 完整替换。每次 PUT 都会写入版本快照,出问题可直接在「版本管理」Tab 里一键回滚。`team_name` 为空的历史流程会直接 403,需先补齐归属团队。
2. 内置组件说明
流程编辑器左侧面板提供多种组件,拖入画布后双击配置。每个组件都可以切换到「说明」Tab 查看详细用法。
Python 脚本 (python_script)
运行自定义 Python 代码,内置 lg_utils 工具库,无需安装即可调用:
get_context()— 查看当前团队可用的资产、数据源、仪表盘、流程列表get_asset_data("name", filter_column=..., filter_value=[...], filter_operator="eq")— 按名称或 ID 获取资产数据。filter_value 传 list + filter_operator="eq" 可一次 IN 查询多只标的(如 stock_num IN (601985,600050,002085))get_portfolio_positions(stock_num=None)— 读取当前团队持仓;每一行都带最近一次 Process 推荐(Action / Add1,2 / Reduce1,2)get_trading_records(account_id=None, market=None, stock_num=None, trade_type=None, page=1, size=50)— 分页读取当前团队的交易记录。可选过滤 accountId / market / stockNum / tradeType。适用于做摇摆监控(取最近 BUY/SELL 锚点)或交易记录驱动的回测。write_recommendations([{...}])— 追加写入个股推荐(历史全保留)。持仓页每行「推荐」按钮弹出分页历史,按时间倒序显示。get_connection("ds_name")— 连接团队数据源(自动获取配置,支持 PostgreSQL/MySQL/Oracle/SQL Server)get_variable("key")— 读取调度上下文变量(作业名称、批次号等)put_variable("key", value)— 把变量回写到流程上下文,下游 step 可用 ${key} 引用(适合传递日志摘要、计数、字典等小型 JSON 值,单个值 ≤ 64 KB)log.info() / warn() / error()— 标准化日志输出,实时显示在执行日志中backtest(..., persist=True, persist_name="...")— 跑历史回测并一步持久化结果到「我的回测」页;支持多次回测按 persist_name 对比夏普、最大回撤、总收益。result.persist(name="...")— 手动把已有的回测结果写入「我的回测」页,用于在 backtest() 之外的位置追加持久化或补录。
SQL 执行 (sql)
在指定数据源上执行 SQL 语句。支持多条 SQL 分号分隔、变量替换 ${variable},执行后 row_count 变量记录影响行数。
获取资产数据 (fetchAssetData)
把某个资产的分页数据取进流程变量,下游 Python / SQL / 循环节点通过 ${变量.data} 读取;支持单值和多值过滤(如 stock_num="601985,600050" 走 IN 查询)。团队权限自动校验,步骤配置里无需填任何凭证。
获取团队持仓 (fetchPortfolioPositions)
把当前团队持仓取进流程变量,每行自带最近的 Process 推荐。典型用法:fetchPortfolioPositions → pythonScript 给每只股票算档位 → write_recommendations() 把结果写回持仓页。
条件分支 (if)
根据条件表达式将流程导向不同分支。支持比较运算符(>、<、==)、逻辑运算符(&&、||)和 else 默认分支。
循环 (for)
循环执行子步骤。支持三种模式:计数循环(i=0;i<10;i++)、SQL 游标循环(row in SELECT ...#datasource)、文件行循环(line open path)。
变量赋值 (var)
设置或计算变量值。支持字符串、数字、JSON、SQL 查询结果、数学表达式等多种赋值方式。勾选 setGlobal 可将变量写入全局上下文。
HTTP 调用 (callService)
调用外部 REST API。支持 GET/POST/PUT/DELETE 及自定义 Headers,响应内容通过 ${logInfo} 在后续步骤中引用。
发送邮件 (sendMail)
通过 SMTP 发送邮件通知。支持 HTML/纯文本正文、多收件人/抄送、变量替换。适用于执行完成通知和异常告警。
3. 团队公共 Python 方法
- 把团队里反复用到的函数/类沉淀成公共模块,在 python_script 步骤里用
from team_lib.<模块名> import ...直接调用;保存时会做安全扫描,禁止os.system/subprocess/eval等高危调用;模块内部可以直接用get_variable/put_variable读写与 python_script 步骤共享的流程上下文变量。
3.5 流程运行时 — 回测 API
1. 三步快速开始
2. 最小可运行示例(stock_day 单股)
使用平台内置的 stock_day 资产(A/H 股日线)。列名映射:date_column="day_id",price_columns={open: "OPEN_PRICE", close: "CLOSE_PRICE"},filter_column="STOCK_NUM"。
from lg_utils import get_variable
from lg_utils.backtest_examples.stock_day import run_stock_day_backtest
def my_strategy(bar, ctx):
if len(ctx.history) < 20:
return
ma20 = sum(b.close for b in ctx.history[-20:]) / 20
if bar.close > ma20 and ctx.position == 0:
ctx.buy(size="all")
elif bar.close < ma20 and ctx.position > 0:
ctx.sell(size="all")
result = run_stock_day_backtest(
strategy=my_strategy,
stock_num=get_variable("stock_num", "000001"),
start=get_variable("start_date"), # 'YYYYMMDD' or 'YYYY-MM-DD'
end=get_variable("end_date"),
initial_cash=1_000_000,
commission_bps=3,
slippage_bps=1,
)
print(result.summary())
result.export_to_context("run1") # snapshot to run log
result.persist(name="run1") # save to My Backtests
3. 完整 backtest() 函数签名(24 个参数)
所有参数及默认值——只需传入与默认值不同的部分:
strategy— 可调用对象fn(bar, ctx),或带on_bar(bar, ctx)方法的实例。可选钩子:on_start(ctx)/on_end(ctx)。asset— 资产 ID(int)或资产名称(str),传给get_asset_data。start, end— 日期字符串(闭区间),用于裁剪 bar。None表示不裁剪。'YYYYMMDD' 与 'YYYY-MM-DD' 均可自动规范化。initial_cash— 初始现金。默认:1_000_000.0。commission_bps— 按成交金额计算的佣金,基点(1 bp = 1/10 000)。默认:0.0。slippage_bps— 滑点,基点。默认:0.0。fill—"next_open"(默认)——在下一根 bar 开盘价成交。"this_close"——在当根收盘价成交。date_column— bar 日期字段名。默认:"trade_date"。stock_day 请用"day_id"。price_columns— 价格字段映射,例如{"open": "OPEN_PRICE", "close": "CLOSE_PRICE"}。默认:open/high/low/close/volume。filter_column, filter_value— 下推给get_asset_data的服务端过滤,用于多标的共用一张表的场景(如filter_column="STOCK_NUM", filter_value="000001")。warmup_bars— 前 N 根 bar 只喂给ctx.history,不调用策略回调。默认:0。max_bars— 加载 bar 的数量上限,防止意外拉取失控。默认:1_000_000。max_history—ctx.history的最大长度,None表示不限。on_trade— 每次完整平仓时触发的回调,签名fn(trade_dict)。benchmark_asset— 可选基准资产名称/ID,计算后会在 metrics 中增加benchmark_return、alpha、beta。benchmark_price_column— 基准收盘价列名,默认与price_columns["close"]相同。benchmark_filter_column, benchmark_filter_value— 基准资产的服务端过滤(语义与 filter_column / filter_value 相同)。persist— 为True时,回测结束后自动调用result.persist(name=persist_name)。默认:False。persist_name—persist=True时使用的标签,与BacktestResult.persist(name=...)的 name 参数含义相同。bars— 直接传入已加载的 bar 列表(跳过get_asset_data,用于单测或自定义数据源)。
4. 运行时对象:Bar / Context / BacktestResult
Bar — 每个 tick 传给策略回调的具名元组。
bar.dt— bar 日期字符串(与date_column字段原始值相同)。bar.open, bar.high, bar.low, bar.close, bar.volume— 解析后的数值型价格与成交量。若资产中不存在对应列则为None。bar.raw— 原始行字典,可用于读取非价格列。
Context — 策略运行时上下文,持有账户状态并提供下单方法。
ctx.position— 当前持仓股数(整数,仅多头)。ctx.cash— 可用现金。ctx.equity— 账户总权益:现金 + 持仓 × 当前收盘价。ctx.nav— 相对初始现金的净值(equity / initial_cash)。ctx.history— 到当前 bar 为止所有已接收的Bar对象列表(长度上限为max_history)。ctx.buy(size="all", limit_price=None)—size:"all"(用全部可用现金),浮点数 ∈ (0,1](现金比例),或正整数股数。limit_price为上限,成交价超过时跳过。ctx.sell(size="all", limit_price=None)—size:"all"(全部平仓),浮点数 ∈ (0,1](持仓比例),或正整数股数。limit_price为下限,成交价低于时跳过。ctx.close_all()— 便捷方法:如有持仓则全部卖出。ctx.order_target_pct(pct)— 将持仓调整到目标权重pct × equity对应的股数。pct ∈ [0, 1]。
BacktestResult — backtest() 的返回值,包含全部结果数据。
result.metrics— 包含 total_return、cagr、sharpe、sortino、max_drawdown、win_rate、profit_factor、num_trades、exposure 等指标;配置了基准时额外包含 benchmark_return、alpha、beta。result.trades— 逐笔成交记录列表:entry_dt、exit_dt、qty、entry_px、exit_px、pnl、return_bps。result.equity_curve— 每根 bar 的账户快照列表(schema 见 §7)。result.summary()— 返回格式化的多行指标摘要字符串,可直接 print() 到执行日志。result.export_to_context(name)— 向 stdout 写入哨兵行,由 PythonScriptStep 捕获到作业日志。result.persist(name=...)— 将结果写入process_backtest_result表(追加写入,按团队隔离)。需运行在 PythonScriptStep 内部。
5. 组合回测(backtest_portfolio)
多资产共享一个现金池。内置 stock_day 资产可直接用 run_stock_day_portfolio_backtest。result.metrics["per_asset"] 包含每只股票的收益率、最大回撤、交易次数和贡献度。assets / stock_nums 列表顺序决定同一 bar 上 size='all' 的现金消耗顺序。
from lg_utils.backtest_examples.stock_day import run_stock_day_portfolio_backtest
def make_ma_strategy(fast, slow):
def strategy(bar, ctx):
if len(ctx.history) < slow:
return
ma_fast = sum(b.close for b in ctx.history[-fast:]) / fast
ma_slow = sum(b.close for b in ctx.history[-slow:]) / slow
if ma_fast > ma_slow and ctx.position == 0:
ctx.buy(size=0.5) # use 50% of available cash
elif ma_fast < ma_slow and ctx.position > 0:
ctx.sell(size="all")
return strategy
result = run_stock_day_portfolio_backtest(
strategies={
"000001": make_ma_strategy(5, 20),
"600519": make_ma_strategy(10, 30),
},
stock_nums=["000001", "600519"], # settlement order for size='all'
start="20240101", end="20241231",
initial_cash=1_000_000,
commission_bps=3,
)
print(result.summary())
# result.metrics["per_asset"] has per-stock contribution / max_dd
result.persist(name="portfolio-v1")
6. 交易记录驱动的回测
通过 get_trading_records() 读取历史真实买卖锚点,将这些入场日期复现到回测引擎,量化「如果当时那样操作」的结果。
import datetime
from lg_utils import get_trading_records
from lg_utils.backtest_examples.stock_day import run_stock_day_backtest
# Load actual BUY anchors from trading history
# Response shape: {"success": True, "data": [...], "totalElements": N, ...}
# Field names use Jackson camelCase: tradeDate, stockNum, price, tradeType
records = get_trading_records(stock_num="000001", trade_type="BUY", size=1)
if records.get("totalElements", 0) == 0:
print("No BUY records found.")
else:
latest_buy = records["data"][0]
last_buy_date = str(latest_buy["tradeDate"])[:10] # e.g. '2024-01-15'
buy_price = float(latest_buy["price"])
upper = buy_price * 1.10
lower = buy_price * 0.90
def swing_strategy(bar, ctx):
if bar.close is None:
return
if ctx.position == 0 and bar.close <= lower:
ctx.buy(size="all")
elif ctx.position > 0 and bar.close >= upper:
ctx.sell(size="all")
end_date = datetime.date.today().strftime("%Y-%m-%d")
result = run_stock_day_backtest(
strategy=swing_strategy,
stock_num="000001",
start=last_buy_date,
end=end_date,
initial_cash=500_000,
)
result.persist(name="replay-from-records")
7. equity_curve JSON Schema
result.equity_curve 中每个元素对应一根 bar:
// equity_curve: list of objects, one per bar
[
{
"dt": "20240101", // bar date (string, same format as date_column)
"equity": 1_000_000.0, // total portfolio value (cash + position mark)
"cash": 800_000.0, // available cash
"position": 100, // shares held (int; portfolio mode: count of non-zero positions)
"close": 55.80 // bar close price (portfolio mode: weighted mark equity)
},
...
]
「我的回测」页面将此曲线渲染为折线图(权益随时间变化),并用 equity 字段计算最大回撤。cash 和 position 字段显示在详情面板中。
8. __LG_BACKTEST_RESULT__ 哨兵行
回测结果有两种对外输出方式:
// Emitted by result.export_to_context("name") — appears in the run log:
__LG_BACKTEST_RESULT__:<name>:<json-payload>
// Emitted by result.persist(...) — writes to process_backtest_result table:
// Returns the new row id. Visible at /profile/backtest-results.
9. 执行后结果在哪里查看
通过 result.persist() 或 backtest(..., persist=True) 保存的结果,可在 个人设置 → 我的回测 查看。该页面展示所有命名回测的可排序指标表格;点击任意行可打开权益曲线图和交易明细。
10. CLI 参数注入(get_variable)
后端将调度变量作为命令行参数传给脚本。--start_date 和 -start_date 等价——运行时会剥离所有前导短横线,通过 get_variable("start_date") 暴露值。
# Both forms are equivalent — the runtime strips leading dashes:
# --start_date 2024-01-01
# -start_date 2024-01-01
# Both surface as:
from lg_utils import get_variable
start = get_variable("start_date") # => "2024-01-01"
调度工作室(自动化引擎)
1. 配置调度作业
- 绑定需要执行的 Process 流程代码或脚本。利用自带的「Cron Expression Builder」快速生成定时策略(如每天凌晨2点)。可配置依赖(Dependencies),确保上游成功后才触发下游。
2. 实例监控与干预
- 开启右上角「Auto Refresh: ON」即可作为实时监控大屏使用,实时掌控 Pending/Running/Success/Failed 状态。
- 人工干预: 支持 View Logs(调取底层真实执行日志)、Kill(强杀卡死任务)、Redo Job(修复逻辑后一键重跑)以及 View Lineage(查看三级血缘依赖关系)。
3. 依赖组:组内 OR、组间 AND
- 给多个依赖填上同一个 Group 名字,组内任意一个依赖满足即可触发(OR);不同 Group 之间仍然要求全部满足才触发(AND)。不填 Group 的依赖各自独立,等价于原来「全部 AND」的行为,不受影响。
4. 远程执行:多机器池 + 分发策略
- 执行方式选择「Remote machine (SSH)」后,可以从已有数据源连接里勾选多台机器组成一个池并设置优先级;分发策略支持轮询(Round Robin)、故障转移(Failover)、随机(Random)三种,决定每次实际运行在哪台机器上。
理财工作室(Wealth Studio)
accountType=all 的旧书签会自动按「真实」显示。模拟交易(Paper Trading)
资源市场与 API 消费
1. 资源市场
- 查阅全平台已公开(Published)的优质数据资产与看板。点击「Subscribe(订阅)」后,该资产即进入您的可用权限池。发布方新发布或修改条目需先经过管理员审核,审核通过前会显示「审核中」,其他用户暂时看不到也无法订阅;条目若被管理员强制下架,已订阅用户的访问权限会被同步撤销。
2. Token 管理
- 高光场景: 将生成的 Token 直接配置到官方的 OpenClaw Agent 插件中,或传递给你自己的 Python 脚本,即可实现无需登录的底层数据全自动化抓取。
- 安全机制: 可控制细粒度权限(Scopes),Token 仅生成时明文展示一次。如遇泄漏请立刻点击「Revoke(撤销)」阻断访问。
- Scope 选择: 新建 Token 默认就带一组可直接取数的 scope(资产列表/详情/数据读取等),不用先摸索该勾哪些;勾选面板按接口的真实 HTTP 方法分组展示,并提供几套按场景预置的快捷勾选。
3. 免登录预览
- 未登录也可以直接打开 Marketplace 浏览已发布的数据资产和看板(默认停在「数据资产」标签页);点击「获取 API / 订阅」等写操作会被拦下并跳转到登录页,登录后再重试即可完成。
4. 积分用量(影子模式)
- 个人设置页新增「积分用量」卡片,市场里部分数据集条目会带一个费率徽章(如「N 行 / 积分」),发布方也可以为自己发布的数据集条目设置费率。当前是影子模式:只展示预估用量,不实际扣费或限流。
大模型与智能插件(Agent Skills)
- ClawHub 官方 skill 包——装进 Claude / OpenClaw 等支持 ClawHub 的客户端即可用自然语言调用,见下方「官方插件支持」。
- MCP Server(stdio)——面向 Claude Code / Cursor / Windsurf / Cline / Codex CLI 等原生 MCP 客户端,见下方「MCP Server」。
- Bearer Token + HTTP API——自己写脚本直接调 REST 接口,最灵活,见下方「Bearer Token + HTTP API」。
- 匿名只读——不注册也能跑只读查询,受限流保护,见下方「匿名只读」。
/agent-guide 是面向未登录访客的完整版接入指南(含安装命令与新手常见坑),本节是登录后的操作细节。
1. 三步快速接入
- 在 /profile/tokens 创建 Bearer token,选择需要的 scope
- 设置环境变量
LG_AGENT_TOKEN=<your-token>和LG_AGENT_BASE_URL=https://privora.cn - 调
GET /agent/skills拿可用 skill 列表,再POST /agent/skills/execute执行
dataasset.metadata.get(查元数据);如果还需要订阅市场条目(拿 clonedAssetId),要在创建 Token 时额外勾选「读取数据 + 管理市场订阅」预设(含 marketplace.item.subscribe)——默认预设不含这条。paper.*(模拟交易执行)保留给平台内部,绑定策略时自动签发,创建页不会显示这些勾选项,不用找。
2. Bearer Token + HTTP API
GET /agent/skills(列出可用 skill) POST /agent/skills/execute(执行 skill) GET /api/public/agent/token-introspect(连通性 smoke test)
完整 skill catalog 见 skill manifest(含每个 skill 的 risk tier、必填字段、gotchas)。
confirmRequired=true 的操作返回 409;详见 skill manifest 该操作的元数据。例如 schedule.job.delete(🔴)和 schedule.instance.kill(🔴)在 token 模式下均返回 409。Approval flow 仅 session 支持。
3. 官方插件支持:
- 在 OpenClaw Hub / ClawHub 中执行 clawhub install privora-cn-quant 即可安装覆盖数据 / 流程 / 回测 / 模拟交易的全量官方插件;只需要实时告警场景可以改装更精简的 clawhub install privora-alert。也可以在 Coze/GPT Store 搜索 Privora 挂载使用。
4. MCP Server(stdio)
把 GET /agent/skills / POST /agent/skills/execute 包装成原生 MCP tool,适配 Claude Code、Cursor、Windsurf、Cline、Codex CLI 等支持 stdio MCP 的客户端。
npm install -g https://privora.cn/downloads/privora-mcp-server-0.1.1.tgz
curl -fsSLO https://privora.cn/downloads/privora-mcp-server-0.1.1.tgz
curl -fsSLO https://privora.cn/downloads/privora-mcp-server-0.1.1.tgz.sha256
sha256sum -c privora-mcp-server-0.1.1.tgz.sha256
{
"mcpServers": {
"lg-agent": {
"command": "lg-agent-mcp-server",
"env": {
"LG_AGENT_BASE_URL": "https://privora.cn",
"LG_AGENT_TOKEN": "lgatk_your_token_here"
}
}
}
}
- Claude Code —— 项目级写
.mcp.json(随仓库共享),用户级/本项目级由~/.claude.json保存;也可直接用下面的claude mcp add。(官方说明) - Cursor —— 全局
~/.cursor/mcp.json,项目级.cursor/mcp.json。(官方说明) - Windsurf ——
~/.codeium/windsurf/mcp_config.json。(官方说明) - Cline —— CLI 版
~/.cline/mcp.json;IDE 插件版从界面进:顶部工具栏 MCP Servers → Configure → Configure MCP Servers。(官方说明) - Codex CLI ——
~/.codex/config.toml(项目级.codex/config.toml)。格式是 TOML,不是上面那段 JSON,见下方。(官方说明) - 前四个都用同一个
mcpServersJSON 结构,上面那段可以原样粘贴,只改lg-agent这个名字即可。
claude mcp add --env LG_AGENT_BASE_URL=https://privora.cn --env LG_AGENT_TOKEN=lgatk_your_token_here --transport stdio lg-agent -- lg-agent-mcp-server
codex mcp add lg-agent --env LG_AGENT_BASE_URL=https://privora.cn --env LG_AGENT_TOKEN=lgatk_your_token_here -- lg-agent-mcp-server
mcpServers JSON 粘进 ~/.codex/config.toml 会解析失败。手写请用下面这段。另外 Claude Code 的 --env 后面不能紧跟服务器名,否则它会被当成又一个 KEY=VALUE 而报错 —— 上面的命令特意在中间放了 --transport stdio。
[mcp_servers.lg-agent]
command = "lg-agent-mcp-server"
[mcp_servers.lg-agent.env]
LG_AGENT_BASE_URL = "https://privora.cn"
LG_AGENT_TOKEN = "lgatk_your_token_here"
LG_AGENT_BASE_URL 默认是 http://localhost:3000,网站安装的版本必须显式设成 https://privora.cn,否则每次调用都连不上。LG_AGENT_TOKEN 可选——不设则以匿名模式运行。
固定 11 个 tool:4 个协议层 meta-tool(list_skills / describe_skill / execute_skill / whoami)+ 7 个一等公民 tool(dataasset_list、dataasset_get、dataasset_schema_get、dataasset_metadata_get、dataasset_data_get、dataasset_data_get_realtime、marketplace_item_list),无论有没有 token 都会出现,能不能真正调用取决于 token 的 scope。
5. 匿名只读
- 不设
LG_AGENT_TOKEN、不登录也能用:固定放行 10 个只读 skill(资产列表、schema、市场条目等),按 IP 做三档限流。适合先跑通再决定要不要注册。
6. 自然语言交互: / 零摩擦用户反馈:
- 自然语言交互: 配置好 Token 后,你可以直接在聊天框输入指令:「帮我查一下资产 ID 21 的最新数据。」或「帮我监控中国核电,跌破 9.5 元就马上通知我。」
- 零摩擦用户反馈: 遇到产品 Bug?无需寻找客服入口,直接对 Agent 说「这个功能报错了,帮我提交一个反馈」,AI 将自动截取上下文并直接推送至我们的后台管理系统。
- 订阅市场条目后,你自己团队拿到的是新的克隆资产 id,不是市场页面上显示的发布方 id——每次用 id 之前用
marketplace.item.subscribe(或dataasset.list)的返回结果重新确认,不要从截图或聊天记录里搬。 dataasset.data.get的filter_value若省略filter_op,默认按子串匹配(LIKE '%v%'),不是精确匹配;要精确请显式传filter_op=eq。- URL 路径里的
{id}必须是数字资产 ID,传资产名称会 500 且报错信息不说明原因。 - 不要手动加
X-Agent-Modeheader——这是 Node 代理层根据 Bearer token 自动注入的,手工加反而可能导致请求被拒绝。 - 发现可用 skill 用
GET /agent/skills,不要用/api/public/agent/capabilities——后者是精简版,会漏掉整个模拟交易能力面。 - Windows Git Bash 下
curl -d '中文内容'会静默改坏非 ASCII 字符,改用--data-binary @file。
管理控制台(仅管理员可见)
1. 组件权限管理
- 控制每个团队在流程编辑器中可以使用哪些组件类型。管理员输入团队名称后,可勾选该团队允许使用的组件。
- 未配置的团队默认拥有全部组件权限,不受限制。
- 勾选部分组件并保存后,该团队的流程编辑器左侧面板将只显示被授权的组件。
- 全选后保存 = 移除限制,恢复全部权限。
客户用例 — 真实工作流端到端操作
1. 主观→量化复盘工作流(MACD 区间胜率分析)
把你真实的交易记录转成可量化的优势区间分析。上传交割单 CSV → 算每笔交易买入时刻的 MACD 斜率 → 按斜率分桶统计胜率 → 找出你自己策略最强的区间。4 步走完。
-
上传交割单 CSV
Wealth Studio → Trading Records → 点页面右上角 「Import CSV」按钮(紧贴 「Add Trade」)
支持的 CSV 列(必须含表头行):
trade_date,symbol,side,quantity,price 2024-03-15,600519,BUY,100,1700.50 2024-04-02,600519,SELL,100,1820.00外部 AI agent 替代路径:在 /profile/tokens 创建 Bearer token,调 POST /api/wealth/trading-records/import-csv 走 multipart,Authorization header 带 token。
-
跑 MACD 斜率回测 pipeline
/diagram → 新建 Process → 添加 Python Script 步骤 → 粘贴下方 quickstart 代码
from lg_utils.backtest_examples.discretionary_macd_winrate import run run(persist_result=True)默认参数:MACD(12, 26, 9),斜率回看 5 bar,分桶宽度 0.1,每笔交易回看 60 个 close。要改参数:把 discretionary_macd_winrate.py 完整脚本 copy 到 Process 里改 module-level const;或者用 lg_utils.indicators(sma / ema / macd / rsi / slope)自己组合。
-
加 Bucket Win-rate widget 到 dashboard
/dashboards → 选或新建 dashboard → 点 Add Widget → Template dropdown → 选 「Bucket Win-rate (Discretionary → Quant)」
模板自动生成 Custom-SQL skeleton(基于 process_backtest_result 表)。你只需要改 3 个占位符:<run_name>(你 result.persist(name=...) 时传的 label,默认 discretionary_macd_winrate) / <indicator_col>(你 on_trade 回调里加到 trade dict 的指标 key,默认 macd_slope) / <bucket_width>(桶宽,例如 0.1)。Save → 表格出现每桶胜率。
样例输出:
bucket_low | n_trades | n_wins | win_rate_pct | avg_pnl -0.3 | 5 | 2 | 40.00 | -120.50 -0.2 | 8 | 4 | 50.00 | 30.20 -0.1 | 12 | 8 | 66.67 | 215.40 0.0 | 15 | 11 | 73.33 | 380.10 <-- best 0.1 | 10 | 6 | 60.00 | 180.50 0.2 | 6 | 3 | 50.00 | 50.30 0.3 | 3 | 1 | 33.33 | -250.10 -
(可选)外部 AI agent 自然语言查询
Tool 层(Privora)提供数据 + 计算;language 层(Coze / 千问 / Claude / OpenClaw)翻译。在 agent 平台配 Bearer token,然后直接问:「我 MACD 斜率哪个桶胜率最高?」—— agent 会调 query_asset_data 读 process_backtest_result,把表翻成自然语言回答。