绘制每日最高价、最低价、收盘价的手动水平
Plotting manual levels for daily high,low,close
由于我已经在这里问了几个问题以试图解决我的问题,这个新问题将它们联系在一起并提供了一些背景信息。
以前与此相关的问题:
- Edit series only on certain dates
- Set 2 series at once
我有一个程序(在 TradingView 之外)试图估计下一个交易日 SPX
的 high/low/close 水平。
我打算仅在日内时间范围内绘制此图(从 1 分钟到 4 小时不等)。
我要绘制的唯一代码是 SPX
。
现在我正尝试在 TradingView 中绘制这些水平,以直观地表示预测水平的准确性。
这意味着我每个交易日都有一个 high/low/close
值。
当前数据集包含大约 50 个条目(所以 50 天我有一个 high/low/close 水平来绘制)并且每个交易日将增加 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)
这里的问题是它只绘制最后日期的值。
这应该可以扩展。只需用很多行 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)
由于我已经在这里问了几个问题以试图解决我的问题,这个新问题将它们联系在一起并提供了一些背景信息。
以前与此相关的问题:
- Edit series only on certain dates
- Set 2 series at once
我有一个程序(在 TradingView 之外)试图估计下一个交易日 SPX
的 high/low/close 水平。
我打算仅在日内时间范围内绘制此图(从 1 分钟到 4 小时不等)。
我要绘制的唯一代码是 SPX
。
现在我正尝试在 TradingView 中绘制这些水平,以直观地表示预测水平的准确性。
这意味着我每个交易日都有一个 high/low/close
值。
当前数据集包含大约 50 个条目(所以 50 天我有一个 high/low/close 水平来绘制)并且每个交易日将增加 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)
这里的问题是它只绘制最后日期的值。
这应该可以扩展。只需用很多行 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)