You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用PineScript读取反向拆股比率并处理拆股索引数组?

问题解答

核心结论

可以用Pine Script的request.splits()函数读取反向拆股比率,关键是正确累积历史拆股因子,无需用数组存储拆股日索引,利用Pine Script的var变量和逐K线处理逻辑即可实现。

原代码问题分析

你尝试用数组存储拆股日标记的思路存在逻辑问题:

  • Pine Script的执行是逐根K线的隐式循环,每根K线都会执行一次array.push(),导致数组会随着K线不断扩容,无法一次性获取完整的历史拆股日索引。
  • while循环在单根K线内执行时,无法跨K线处理历史拆股数据,逻辑上不成立。

修正后的实现代码

//@version=5
indicator(title="调整后短卖比率", shorttitle="Adjusted SR", format=format.percent, timeframe="", timeframe_gaps=true)

ticker = syminfo.tickerid
ticker_symbol = syminfo.ticker
short_symbol = "FINRA:" + ticker_symbol + "_SHORT_VOLUME"

// 获取短卖成交量数据
short_volume = request.security(short_symbol, timeframe.period, close)
// 获取拆股数据:numerator/denominator = 拆股后股数/拆股前股数(反向拆股则数值<1)
split_n = request.splits(ticker, splits.numerator, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
split_d = request.splits(ticker, splits.denominator, gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
split_ratio = split_n / split_d

// 用var变量持久化累积拆股因子,初始值为1
var float cumulative_split_factor = 1.0
// 仅在拆股日更新因子:如果当前K线有拆股数据,则更新累积因子
if not na(split_ratio)
    cumulative_split_factor := cumulative_split_factor * split_ratio

// 计算调整后的短卖比率:用累积拆股因子修正
short_ratio = (short_volume / volume) * 100 * cumulative_split_factor

plot(short_ratio, linewidth=1, color=color.black, style=plot.style_columns)

关键逻辑说明

  1. 拆股数据获取:request.splits()返回的split_n/split_ratio代表拆股的比率,比如1拆2的正向拆股返回2,反向拆股(比如2拆1)返回0.5。
  2. 累积因子处理:
    • 使用var关键字定义cumulative_split_factor,确保变量在所有K线中保持持久化,不会被重置。
    • 只有当当前K线存在拆股数据(not na(split_ratio))时,才将累积因子乘以当前拆股比率,这样每根K线的因子都是截至该K线时所有已发生拆股的累积结果。
  3. 避免未来函数:设置lookahead=barmerge.lookahead_off,确保回测时不会提前使用未发生的拆股数据,保证策略的真实性。

内容的提问来源于stack exchange,提问作者Diger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:13:14