名称: riskofficer
描述: 风险管理与投资组合分析:VaR、蒙特卡洛模拟、压力测试、风险平价与卡尔玛比率优化。在虚拟投资组合上运行风险评估、情景模拟和配置优化;不执行真实经纪商订单。
元数据: {"openclaw":{"requires":{"env":["RISK_OFFICER_TOKEN"]},"primaryEnv":"RISK_OFFICER_TOKEN","emoji":"📊","homepage":"https://riskofficer.tech"}}
连接至 RiskOfficer API,用于管理投资组合并计算金融风险指标。
必需项: 一个环境变量 —— RISK_OFFICER_TOKEN(请在 RiskOfficer 应用中创建:设置 → API 密钥)。无需其他环境变量或二进制文件。
来源: 官方技能仓库:github.com/mib424242/riskofficer-openclaw-skill。产品:riskofficer.tech。令牌仅由 RiskOfficer 应用签发;本技能不收集或存储任何凭证。
本技能中的所有投资组合数据与操作均在 RiskOfficer 自身环境中进行。 您在此创建、编辑或优化的投资组合均为虚拟组合 —— 仅用于分析与研究。助手可以:
本技能不会在您的经纪商账户中下达或执行任何真实订单。 经纪商同步仅为分析目的,是只读的;任何在真实账户中的再平衡或交易操作,都需要您在自己的经纪商应用或 RiskOfficer 自有流程中完成,而非由助手执行。令牌仅用于访问 RiskOfficer API,以进行此类分析与研究。
RISK_OFFICER_TOKEN=ro_pat_...或在 ~/.openclaw/openclaw.json 中配置:
{
"skills": {
"entries": {
"riskofficer": {
"enabled": true,
"apiKey": "ro_pat_..."
}
}
}
}
https://api.riskofficer.tech/api/v1
所有请求均需包含:Authorization: Bearer ${RISK_OFFICER_TOKEN}
在创建或编辑任何投资组合之前,请使用此功能验证代码符号并获取其货币/交易所信息。当用户提及公司名称而非代码时也应使用。
curl -s "https://api.riskofficer.tech/api/v1/tickers/search?q=Apple&limit=10&locale=en" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
查询参数:
- q(可选):搜索查询 —— 可按代码、名称或全名搜索(不区分大小写)。省略则返回按受欢迎程度排序的热门代码。
- limit(可选,默认 20,最大 50):返回结果数量
- include_prices(可选,默认 false):包含 current_price、price_change_percent、price_change_absolute、price_date
- locale(可选,默认 ru):en 表示英文名称,ru 表示俄文名称
- exchange(可选):按交易所筛选 —— MOEX、NYSE、NASDAQ、CRYPTO
响应: tickers 数组,每个元素包含:ticker、name、full_name、instrument_type、currency、exchange、popularity_score、isin。
工具类型: share、bond、etf、futures、futures_continuous(例如 MOEX 上的 BR、SI)、currency、crypto
关键规则:
- 始终使用代码搜索来解析公司名称 → 代码符号(例如 "Apple" → "AAPL","Sberbank" → "SBER")
- 在将资产添加到投资组合前,使用结果中的 currency 字段检查货币一致性约束
- MOEX 期货:搜索 "BR" 或 "SI" 返回的是连续合约,而非单个合约(如 BRF6、SIM5)
- 当用户询问 "X 现在值多少钱?" 时,使用 include_prices=true 来显示当前价格
# 按公司名称搜索(英文)
curl -s "https://api.riskofficer.tech/api/v1/tickers/search?q=Gazprom&locale=en&limit=5" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
# 按俄文名称搜索
curl -s "https://api.riskofficer.tech/api/v1/tickers/search?q=%D0%93%D0%B0%D0%B7%D0%BF%D1%80%D0%BE%D0%BC&locale=ru&limit=5" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
# 获取代码的当前价格
curl -s "https://api.riskofficer.tech/api/v1/tickers/search?q=AAPL&include_prices=true" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
# 获取热门代码(无查询参数)
curl -s "https://api.riskofficer.tech/api/v1/tickers/search?limit=10&include_prices=true" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
# 按交易所筛选
curl -s "https://api.riskofficer.tech/api/v1/tickers/search?q=SBER&exchange=MOEX" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
当用户询问特定资产的价格历史、图表数据或趋势时:
curl -s "https://api.riskofficer.tech/api/v1/tickers/historical?tickers=SBER,GAZP,AAPL&days=30" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
查询参数: tickers(必需,逗号分隔,最多 50 个),days(可选,默认 7,最多 252 个交易日)。
响应: data 对象,以代码符号为键,每个元素包含:
- prices:{date, close} 对象数组
- current_price、price_change_percent、price_change_absolute
当用户要求查看其投资组合或需要概览时:
curl -s "https://api.riskofficer.tech/api/v1/portfolios/list" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
查询参数: portfolio_type(可选):"production"(手动 + 实盘经纪商)、"sandbox"(仅经纪商沙盒)、"all"(默认)。
响应:投资组合数组,包含 snapshot_id、name、total_value、currency、positions_count、broker、sandbox、active_snapshot_id(UUID 或 null —— 如果设置,风险计算将使用此历史快照而非最新快照)。
当用户希望查看特定投资组合的持仓时:
curl -s "https://api.riskofficer.tech/api/v1/portfolio/snapshot/{snapshot_id}" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
响应:name、total_value、currency、positions(数组,包含 ticker、quantity、current_price、value、weight、avg_price)。
当用户询问其投资组合随时间的变化或希望浏览过去快照时:
curl -s "https://api.riskofficer.tech/api/v1/portfolio/history?days=30" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
查询参数: days(可选,默认 30,范围 1–365)。
响应:snapshots 数组,包含 snapshot_id、timestamp、total_value、positions_count、sync_source、type(aggregated/manual/broker)、name、broker、sandbox。
当用户希望比较两个投资组合状态时(例如,再平衡前后,或两个不同日期):
curl -s "https://api.riskofficer.tech/api/v1/portfolio/snapshot/{snapshot_id}/diff?compare_to={other_snapshot_id}" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
响应:added/removed/modified 持仓,total_value_delta。两个快照必须属于同一用户。
当用户要求查看其所有账户的总计或合并投资组合时:
curl -s "https://api.riskofficer.tech/api/v1/portfolio/aggregated?type=all" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
查询参数:
- type=production —— 手动 + 经纪商实盘账户
- type=sandbox —— 仅经纪商沙盒账户
- type=all —— 全部(默认)
响应:
- portfolio.positions —— 跨所有投资组合合并的持仓
- portfolio.total_value —— 以基础货币计的总价值
- portfolio.currency —— 基础货币(RUB 或 USD)
- portfolio.sources_count —— 聚合的投资组合数量
响应示例:
{
"portfolio": {
"positions": [
{"ticker": "SBER", "quantity": 150, "value": 42795, "sources": ["T-Bank", "Manual"]},
{"ticker": "AAPL", "quantity": 10, "value": 189500, "original_currency": "USD"}
],
"total_value": 1500000,
"currency": "RUB",
"sources_count": 3
},
"snapshot_id": "uuid-of-aggregated"
}
不同货币的持仓将使用当前俄罗斯央行汇率自动转换。
当用户希望以不同货币查看聚合投资组合时:
curl -s -X PATCH "https://api.riskofficer.tech/api/v1/portfolio/{aggregated_snapshot_id}/settings" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"base_currency": "USD"}'
支持的货币: RUB、USD。更改后,聚合投资组合会自动重新计算。
用户提示示例:
- "Show everything in dollars" / "Покажи всё в долларах" → base_currency: "USD"
- "Switch to rubles" / "Переведи в рубли" → base_currency: "RUB"
当用户希望从总计计算中排除特定投资组合时:
curl -s -X PATCH "https://api.riskofficer.tech/api/v1/portfolio/{snapshot_id}/settings" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"include_in_aggregated": false}'
用户提示示例:
- "Exclude sandbox from total" / "Не учитывай песочницу в общем портфеле"
- "Remove demo portfolio from calculations" / "Убери демо-портфель из расчёта"
当用户希望创建包含特定持仓的新投资组合时:
curl -s -X POST "https://api.riskofficer.tech/api/v1/portfolio/manual" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "My Portfolio",
"positions": [
{"ticker": "SBER", "quantity": 100},
{"ticker": "GAZP", "quantity": 50, "avg_price": 148.0},
{"ticker": "YNDX", "quantity": -20}
]
}'
字段:
- ticker(必需):代码符号。务必先使用 /tickers/search 进行验证并检查货币。
- quantity(必需):股数。负值 = 空头头寸(例如 -20 = 做空 20 股)。
- avg_price(可选):用于盈亏跟踪的平均买入/入场价格。在新投资组合中省略 → 使用当前市价。在编辑时省略 → 继承自先前快照。
查询参数: locale(可选,默认 ru)—— 影响资产名称解析。
重要 —— 单一货币规则:
一个投资组合中的所有资产必须使用同一种货币。
- 卢布资产(MOEX):SBER、GAZP、LKOH、YNDX 等。
- 美元资产(NYSE/NASDAQ):AAPL、MSFT、GOOGL、TSLA 等。
单个投资组合中不能混合货币!建议创建独立的投资组合。
空头头寸:
- 使用负的 quantity 表示做空(例如 {"ticker": "GAZP", "quantity": -50})
- 同一投资组合中支持同时持有多头和空头(多空投资组合)
- 优化多空投资组合时,使用 optimization_mode: "preserve_directions" 以保留空头
当用户希望修改现有投资组合时:
curl -s "https://api.riskofficer.tech/api/v1/portfolio/snapshot/{snapshot_id}" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
curl -s -X POST "https://api.riskofficer.tech/api/v1/portfolio/manual" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name": "<same name>", "positions": [<complete updated list>]}'
重要: 在更新前,始终向用户展示将要发生的更改并请求确认。除非明确指定,否则 avg_price 将从先前快照中保留。
当用户希望完全删除/移除一个手动投资组合时:
curl -s -X DELETE "https://api.riskofficer.tech/api/v1/portfolio/manual/My%20Portfolio" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
archived_snapshots 数量、portfolio_name、message当用户希望在不断开经纪商连接的情况下清除经纪商投资组合历史时:
curl -s -X DELETE "https://api.riskofficer.tech/api/v1/portfolio/broker/tinkoff?sandbox=false" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
sandbox=true 表示沙盒投资组合,sandbox=false 表示实盘/生产环境当用户询问其经纪商连接时:
curl -s "https://api.riskofficer.tech/api/v1/brokers/connections" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
当用户询问支持哪些经纪商时:
curl -s "https://api.riskofficer.tech/api/v1/brokers/available" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}"
当用户希望从已连接的经纪商刷新/更新其投资组合时:
curl -s -X POST "https://api.riskofficer.tech/api/v1/portfolio/proxy/broker/{broker}/portfolio" \
-H "Authorization: Bearer ${RISK_OFFICER_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"sandbox": false}'
{broker}:tinkoff 或 alfasandbox:false 表示实盘账户,true