PDH/PDL指标画线起始位置切换功能开发求助
PDH指标画线起始位置切换问题解决
我在开发PDH/PDL指标,作为编程新手,目前指标基础功能正常,但想加个画线起始位置的切换选项:要么从新交易日的第一根K线开始画,要么从前一日日K高点对应的那根K线位置开始画。
当前实现“从新交易日”画线的代码是正常的:
dayh = request.security(syminfo.tickerid, 'D', high, barmerge.gaps_off, barmerge.lookahead_on) previousday_from = input.string(defval = "New day",title="Previous Day from",group = "Previous Level", options = ["New day","Origine"]) var line line_pdh = na if ta.change(time("D")) if previousday_from == "New day" line_pdh := line.new(x1=bar_index, y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1) // 从新交易日起始K线开始画
但我尝试实现“Origine”选项时写错了代码,把价格值dayh[1]当成了x坐标传入line.new(),导致达不到预期效果:
if ta.change(time("D")) if previousday_from == "New day" // x1= bar_index to put at actual value line_pdh := line.new(x1=bar_index, y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1) // Drawing from bar_index if new day else // x1= dayh[1] to get the high[1] from previous day ? line_pdh := line.new(x1=dayh[1], y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1) // 这里x1用了价格,完全错误
问题根源
line.new()的x参数需要的是K线的索引值(bar_index),而不是价格数值。你之前错误地把前一日的高点价格当成了x坐标,这自然画不出正确的线。
修正方案
我们需要先获取前一日日K高点对应的那根K线在当前周期下的bar_index,然后用这个索引作为画线的起始点:
// 获取日线级别高点,以及该高点对应的bar_index(当前周期下的索引) [dayh, dayh_bar_index] = request.security(syminfo.tickerid, 'D', [high, bar_index], barmerge.gaps_off, barmerge.lookahead_on) previousday_from = input.string(defval = "New day",title="Previous Day from",group = "Previous Level", options = ["New day","Origine"]) var line line_pdh = na // 每日开盘时更新画线 if ta.change(time("D")) // 先删除旧的线,避免重复 line.delete(line_pdh) // 根据选项选择画线起始点 if previousday_from == "New day" // 新交易日第一根K线为起点 start_x = bar_index else // 前一日日K高点对应的K线为起点 start_x = dayh_bar_index[1] // 绘制水平线,起点是选中的位置,终点是当前K线,y值为前一日高点 line_pdh := line.new(x1=start_x, y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1)
代码说明
- 用
request.security()同时获取日线的高点dayh和该高点对应的bar_index(dayh_bar_index) - 每日切换交易日时,先删除旧的画线,避免界面上残留多条线
- 根据选择的选项,分别设置画线的起始x坐标:新交易日用当前
bar_index,Origine选项用前一日日线高点对应的bar_index[1] - 最后调用
line.new()画出正确的水平线
内容的提问来源于stack exchange,提问作者Pontal Axel
相关产品推荐
相关产品推荐

