绘制每日高,低,收盘价的手动水平

时间:2020-04-19 17:30:56

标签: pine-script

在这里我已经问了几个问题以试图解决我的问题,这个新问题将它们联系在一起并提供了一些背景信息。
先前与此相关的问题:

我有一个程序(在TradingView之外),试图估计下一个交易日的股票代码SPX的高/低/收盘价。
我打算仅在时段内(从1分钟到4小时)进行绘制。
我要绘制的唯一的代码是SPX

现在,我正在尝试在TradingView中绘制这些水平,以直观表示预测水平的准确性。
这意味着每个交易日我都有一个high/low/close值。
当前的数据集包含约50个条目(因此有50天,我需要绘制高/低/平仓水平),并且每个交易日将增加1个条目。
因此,在1年内,数据集将包含约200个条目。

因为数据集大于TradingView可以显示的图形对象的数量,所以我排除了使用line.new()之类的图形对象。
垃圾收集器将仅显示最后50个左右绘制的对象,我希望显示完整的数据集。
因此,我认为我将需要诉诸plot()函数。

这意味着我将以3个系列结束绘制:highlowclose
每个交易日期的价值都不同。
所以本质上,我试图通过为每个日期分配一个值来手动创建这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)

这里的问题是它只绘制最后一个日期的值。

enter image description here

1 个答案:

答案 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)

enter image description here