股息捕捉策略:如何判断当前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
相关产品推荐
相关产品推荐

