pine-script - 应在每次计算时调用该函数以保持一致性。建议从三元运算符或作用域中提取调用
问题描述
我在 pine 脚本中遇到错误:- 应在每次计算时调用函数 '#f2' 以保持一致性。建议从三元运算符或范围中提取调用。这是函数:- Variance(src,p) => p == 1 ?0 : Sma(src*src,p) - pow(Sma(src,p),2)
'''
//@version=4
study("My Script",overlay=true,max_bars_back=1000)
//-----------------------------------Trend lines--------------------------------
//Basic
heading11 = input(title="Trend Lines" ,type=input.bool,defval=true)
lengthppl = input(30,group='Basic Settings'
,tooltip='Pivot length. Use higher values for having lines connected to more significant
pivots')
lookbackppl = input(3,minval=1,group='Basic Settings'
,tooltip='Number of lines connecting a pivot high/low to display')
SLOPEPPL = input(1.,minval=-1,maxval=1,step=0.1,group='Basic Settings'
,tooltip='Allows to multiply the linear regression slopeppl by a number within -1 and 1')
//Style
ph_col = input(#2157f3,'Pivot High Lines Color',group='Line Colors')
pl_col = input(#ff1100,'Pivot Low Lines Color',group='Line Colors')
//──────────────────────────────────────────────────────────────────────────────
Sma (src,p) => a = cum(src), (a - a[max(p,0)])/max(p,0)
Variance(src,p) => p == 1 ? 0 : Sma(src*src,p) - pow(Sma(src,p),2)
Covariance(x,y,p) => Sma(x*y,p) - Sma(x,p)*Sma(y,p)
//──────────────────────────────────────────────────────────────────────────────
nppl = bar_index
ph = pivothigh(lengthppl,lengthppl)
pl = pivotlow(lengthppl,lengthppl)
//──────────────────────────────────────────────────────────────────────────────
varip ph_array = array.new_float(0)
varip pl_array = array.new_float(0)
varip ph_n_array = array.new_int(0)
varip pl_n_array = array.new_int(0)
if ph
array.insert(ph_array,0,ph)
array.insert(ph_n_array,0,nppl)
if pl
array.insert(pl_array,0,pl)
array.insert(pl_n_array,0,nppl)
//──────────────────────────────────────────────────────────────────────────────
val_ph = valuewhen(ph,nppl-lengthppl,lookbackppl-1)
val_pl = valuewhen(pl,nppl-lengthppl,lookbackppl-1)
val = min(val_ph,val_pl)
k = nppl - val > 0 ? nppl - val : 2
slopeppl = Covariance(close,nppl,k)/Variance(nppl,k)*SLOPEPPL
var line ph_l = na,var line pl_l = na
if barstate.islast
for i = 0 to lookbackppl-1
ph_y2 = array.get(ph_array,i),ph_x1 = array.get(ph_n_array,i)-lengthppl
pl_y2 = array.get(pl_array,i),pl_x1 = array.get(pl_n_array,i)-lengthppl
ph_l := line.new(ph_x1,ph_y2,ph_x1+1,ph_y2+slopeppl,extend=extend.right,color=ph_col)
pl_l := line.new(pl_x1,pl_y2,pl_x1+1,pl_y2+slopeppl,extend=extend.right,color=pl_col)
'''
解决方案
对时间序列数据进行操作的函数不应位于 if 语句或三元组中。只需将函数作为单独的变量移出:
Variance(src,p) =>
sma_a = sma(src*src,p)
sma_b = sma(src,p)
return = p == 1 ? 0 : sma_a - pow(sma_b,2)
return
这假设您在 if 或三元或其他范围之外调用该函数。如果没有,则为函数设置一个变量:
variance = Variance(a,b)
然后根据需要在逻辑中使用变量。
推荐阅读
- javascript - 页面上的重叠组件
- python - 检查设备是否通过 python 串行完成重启
- angular - 如何使用表元数据保存同步融合数据透视视图工具栏选项
- javascript - 如何在同一个reducer函数react.js中更改嵌套对象字段和列表的状态值?
- javascript - React - 提升状态下缺少数据
- javascript - 客户端使用 Webpack 发布到 SQL Server
- python - sheet.createTextFinder('somestr'); 的类似物 在 Google 表格 Python API 中
- html - 如何将特定标头添加到 html 代码
- python-3.x - 如何使用 Python 在图中打印 y 轴的值
- rest - 我应该发送什么类型的请求来从文件响应中下载文件?