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

股息捕捉策略:如何判断当前K线为下一个除息日前X天?

解决股息捕捉策略中判断除息日前X天的问题

核心思路

要判断当前K线是否为下一个除息日前X天,需先获取所有未来的除息日时间戳,筛选出最近的一个,再计算当前K线与该除息日的天数差,最终匹配是否等于目标天数X。

完整Pine Script代码实现

//@version=5
indicator("股息捕捉入场判断", overlay=true)

// 输入参数:目标提前天数X
X = input.int(3, title="除息日前X天", minval=1)
esdSymbolTemplate = input.symbol("AAPL", title="标的代码模板")

// 存储所有除息日时间戳的数组
var array<float> dividendDates = array.new_float()

// 从DIVIDENDS数据源获取日线级别的除息日时间戳
dividendTime = request.security(esdSymbolTemplate + ";DIVIDENDS", "D", time)

// 去重并添加新的除息日到数组
if (dividendTime != 0 and (array.size(dividendDates) == 0 or dividendTime != array.get(dividendDates, array.size(dividendDates)-1)))
    array.push(dividendDates, dividendTime)

// 查找下一个未到来的除息日
nextDividendTime = na
arraySize = array.size(dividendDates)
if arraySize > 0
    for i = 0 to arraySize - 1
        currentDt = array.get(dividendDates, i)
        if currentDt > time
            nextDividendTime = currentDt
            break

// 计算当前K线到下一个除息日的天数差(毫秒转天数)
daysUntilDividend = na
if not na(nextDividendTime)
    daysUntilDividend = (nextDividendTime - time) / 86400000  // 1天 = 86400000毫秒

// 判断是否为入场日:天数差等于X
isEntryDay = daysUntilDividend == X

// 可视化标记入场日
bgcolor(isEntryDay ? color.new(color.green, 80) : na, title="入场日标记")
plotshape(isEntryDay, title="入场信号", location=location.belowbar, color=color.green, style=shape.labelup, text="入场")

代码说明

  • 数组存储除息日:用var array持久化存储所有除息日时间戳,避免每次K线刷新重复添加相同日期。
  • 筛选下一个除息日:遍历数组找到第一个晚于当前K线时间的除息日,确保是最近的未到来的除息日。
  • 天数差计算:将时间戳的毫秒差转换为天数,Pine Script中时间戳以毫秒为单位。
  • 入场判断:当天数差恰好等于X时,标记为入场日,可通过背景色或形状直观查看信号。

注意事项

  • 如果使用分钟线等非日线级别图表,需将time替换为ta.time("D"),确保基于日线日期计算天数差。
  • 若标的无未来除息日,nextDividendTime会返回na,此时不会触发入场信号,需自行处理空值场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:25:28