在这里我已经问了几个问题以试图解决我的问题,这个新问题将它们联系在一起并提供了一些背景信息。
先前与此相关的问题:
我有一个程序(在TradingView之外),试图估计下一个交易日的股票代码SPX
的高/低/收盘价。
我打算仅在时段内(从1分钟到4小时)进行绘制。
我要绘制的唯一的代码是SPX
。
现在,我正在尝试在TradingView中绘制这些水平,以直观表示预测水平的准确性。
这意味着每个交易日我都有一个high/low/close
值。
当前的数据集包含约50个条目(因此有50天,我需要绘制高/低/平仓水平),并且每个交易日将增加1个条目。
因此,在1年内,数据集将包含约200个条目。
因为数据集大于TradingView可以显示的图形对象的数量,所以我排除了使用line.new()
之类的图形对象。
垃圾收集器将仅显示最后50个左右绘制的对象,我希望显示完整的数据集。
因此,我认为我将需要诉诸plot()
函数。
这意味着我将以3个系列结束绘制:high
,low
和close
。
每个交易日期的价值都不同。
所以本质上,我试图通过为每个日期分配一个值来手动创建这3个系列。
但是到目前为止,我还没有做到。
我还试图每个交易日只有1条数据输入行,以避免混乱并保持代码干净和可维护。
因此,我试图仅使用1个功能来设置每个交易日的这3个数据点。
以下脚本是我最近的尝试,为简化起见,该数据集仅减少了5个交易日。
我知道以下脚本是错误的,因为无法重复使用变量。
这就是为什么它说line 19: 'h' is already defined
。
我对此没有解决方法,我真的很想找到一个解决方法。
//@version=4
study("Study", overlay=true)
// Variables
var float dh = na
var float dl = na
var float dc = na
// Functions
isDate(y,m,d) => y==year and m==month and d==dayofmonth ? true:false
d(y,m,d,h,l,c) => // Daily Levels
if isDate(y,m,d)
[h,l,c]
else
[na,na,na]
// Set data for Daily High,Low,Close
[h,l,c] = d(2020,04,13,2800,2700,2725), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,14,2850,2810,2825), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,15,2800,2750,2710), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,16,2850,2700,2790), dh:=h,dl:=l,dc:=c
[h,l,c] = d(2020,04,17,2900,2800,2850), dh:=h,dl:=l,dc:=c
// Plot Daily High,Low,Close
plot(dh, color=color.red)
plot(dl, color=color.green)
plot(dc, color=color.blue)
另一种尝试是下面的这段代码,可以正常编译。
//@version=4
study("Functions test", overlay=true)
var float h = na
var float l = na
var float c = na
isDate(y,m,d) => y==year and m==month and d==dayofmonth ? true:false
setData() =>
if isDate(2020,04,13)
[2800,2700,2725]
if isDate(2020,04,14)
[2850,2810,2825]
if isDate(2020,04,15)
[2800,2750,2710]
if isDate(2020,04,16)
[2850,2700,2790]
if isDate(2020,04,17)
[2900,2800,2850]
[h1,l1,c1] = setData()
h := h1
l := l1
c := c1
plot(h,color=color.red)
plot(l,color=color.green)
plot(c,color=color.blue)
这里的问题是它只绘制最后一个日期的值。
答案 0 :(得分:0)
这应该缩放。只需对POC进行确认即可:
//@version=4
study("HLC Levels", "", true)
initOnDate(_y, _m, _d, _prev, _init) =>
if _y == year and _m == month and _d == dayofmonth
_init
else
_prev
float h = na
float l = na
float c = na
int y = 0
int m = 0
int d = 0
y := 2020, m := 03, d := 31, h := initOnDate(y, m, d, h, 2600), l := initOnDate(y, m, d, l, 2500), c := initOnDate(y, m, d, c, 2525)
y := 2020, m := 04, d := 01, h := initOnDate(y, m, d, h, 2610), l := initOnDate(y, m, d, l, 2510), c := initOnDate(y, m, d, c, 2535)
y := 2020, m := 04, d := 02, h := initOnDate(y, m, d, h, 2620), l := initOnDate(y, m, d, l, 2520), c := initOnDate(y, m, d, c, 2545)
plot(h, "h", change(h) ? na : color.green, 1)
plot(l, "l", change(l) ? na : color.red, 1)
plot(c, "c", change(c) ? na : color.orange, 1)