PnL 索引器
历史盈亏(PnL)索引器
Solana Account Indexer 是一款专用工具,可在指定的历史或当前时间范围内,精准追踪并计算任意 Solana 账户的盈亏(PnL)。索引器采用先进先出(FIFO)会计方法,生成累计与按日维度的 PnL 指标,帮助用户同时把握长期收益/亏损与日常表现变化。
功能特性
累计 PnL(Cumulative PnL):在指定时间范围内,汇总该账户所有交易的总盈亏,全景展示整体账户表现。
每日 PnL(Daily PnL):提供逐日盈亏明细,便于评估日度表现并识别短期趋势。
方法论
FIFO(先进先出)计算: 将每笔资产流出(如卖出、兑换)与最早获取的持仓一一匹配,确保成本计算一致与准确。通过将交易按时间顺序系统化匹配,FIFO 能精确反映已实现盈亏,在波动行情下亦能保持清晰可解释。
PnL 计算口径
已实现盈亏(Realized PnL):基于 FIFO,将每笔卖出/转出与最早购入的持仓匹配,准确记录处置时点的盈亏。
未实现盈亏(Unrealized PnL):将当前持有资产的市值与其历史成本对比,反映潜在收益或亏损。
日度跟踪(Daily Tracking):按日监控已实现与未实现盈亏,为当日累计财务表现提供细粒度可视化。
技术要点(Technical Insights)
交易解析(Transaction Parsing):系统化解析账户交易,准确识别充值、提现、资产兑换等活动,构建完整的交易历史。
价格更新(Price Updates):为确保日度 PnL 精度,按设定时间点(如收盘/日终)获取代币价格,用于未实现盈亏估值。
日切(Daily Rollover):每日滚动更新,记录新的 PnL 数据并拉取最新价格,形成连续、可靠的历史序列,便于趋势分析。
典型场景(Use Cases)
个人账户分析:全面洞察个人交易活动与绩效。
资产组合管理:帮助投资经理精准监控、分析并出具每日盈亏报表。
税务申报:提供详细的历史已实现盈亏数据,简化合规申报与报告。
在线试用(Swagger 文档)
管理端 Admin API 文档:https://indexer.astralane.io/api-docs#/
数据查询 Index Data API 文档:https://graphql.astralane.io/api-docs
该索引器提供一组 API,用于初始化索引、回填历史交易数据,并获取任意账户的累计与每日 PnL 指标。
索引创建流程(Index creation flow)
创建新索引(Create New Index) POST
{admin-base-url}/index/pnl用途:初始化一个新的 PnL 跟踪索引。启动回填任务(Start Backfill Job) POST
{admin-base-url}/index/{index_id}/backfill用途:根据指定 index_id 启动历史数据回填,补齐对应的 PnL 数据。查询回填状态(Check Backfill Status) GET
{admin-base-url}/index/{index_id}/backfill用途:查看该 index 的回填进度与当前状态。获取累计 PnL(Fetch Cumulative PnL Data) GET
{index-dataset-url}/api/v1/dataset/cumulative-pnl/{index_id}用途:按指定时间范围,返回该 index 的累计盈亏数据。获取每日 PnL(Fetch Daily PnL Data) GET
{index-dataset-url}/api/v1/dataset/daily-pnl/{index_id}用途:按指定时间范围,返回该 index 的逐日盈亏数据。
索引创建示例(Index creation example)
admin-base-url: https://indexer.astralane.io/
index-dataset-url: https://graphql.astralane.io/
1. 创建新索引(Create a New Index)
POST {admin-base}/index/pnl
Headers:x-api-key: <your_api_key>
查询示例:
说明:为指定账户与日期范围初始化一个新的 PnL 索引。
示例响应:
请求载荷说明(Payload Details)
name
描述:索引的人性化名称,便于后续检索与引用。
示例:"My Main Wallet Portfolio"
目的:按账户/组合/用途清晰标注并组织索引。
filters
描述:过滤条件数组,定义哪些交易将被纳入索引。
目的:通过指定
列与谓词,实现精确的数据筛选。组成:每个过滤器包含
column字段与predicates数组。
过滤器 1:账户过滤(Account ID Filter)
column:"account_id"描述:按
account_id列过滤,仅纳入该账户的交易。
predicates:类型:
"eq"(等于)— 精确匹配指定的account_id值:包含用户 Solana 账户地址的数组
用户要素:账户地址唯一标识用户的钱包
示例值:
"4BjxyW2GTD1qBwUk96mAR7dV1A3Pq51hPx78WLqrXegX"目的:仅纳入目标账户相关的数据。
过滤器 2:时间过滤(Time Filter)
column:"time"描述:按时间列过滤,限定交易的起止时间范围。
predicates:包含两个条件1 - 大于(
gt):类型:
"gt"描述:区间起点,Unix 时间戳(秒)
用户自定义时间戳:用户定义的起始日期时间。
示例:
"1718148102"
2 - 小于(I
t):类型:
"lt"描述:区间终点,Unix 时间戳(秒)
用户自定义元素:结束时间戳由用户指定,代表所需时间范围的上限。
示例:"1718339227"
目的:仅纳入落在用户自定义时间范围内的交易。该时间窗口完全可配置,便于围绕特定时期开展定制化分析。
2. 启动回填任务
POST {admin-base-url}/index/{index_id}/backfill
Headers:x-api-key: <your_api_key>
URL Parameters:
index_id: 上一步创建索引返回的 ID
查询示例:
说明:为指定 index_id 启动回填,抓取与处理历史数据以生成对应的 PnL 记录。
Sample Response:
3. 查询回填状态
GET {admin-base-url}/index/{index_id}/backfill
Headers:x-api-key: <your_api_key>
URL Parameters:
index_id: 要查询回填状态的索引 ID
说明:返回回填任务的当前状态与进度,便于跟踪直至完成。
示例响应:
4. 获取累计 PnL
GET {index-dataset-url}/api/v1/dataset/cumulative-pnl/{index_id}
Headers:x-api-key: <your_api_key>
URL 参数:
index_id: 要查询的索引唯一标识
说明:返回指定索引在给定日期范围内的累计盈亏概览。
示例响应:
5. 获取日度 PnL
GET {index-dataset-url}/api/v1/dataset/daily-pnl/{index_id}
Headers:x-api-key: <your_api_key>
URL参数:
index_id: 要拉取日度 PnL 的索引 ID(唯一标识)
URL Parameters:
index_id: 要拉取日度 PnL 的索引 ID(唯一标识)
Description: 返回指定索引在定义日期范围内的日度 PnL 数据,提供逐日细化的绩效洞察。
示例响应:
最后更新于