【发布时间】:2020-04-18 12:38:06
【问题描述】:
老实说,在脚本语言中实现没有后端问题的选项有多难。我收到以下错误“不能将可变变量用作安全函数的参数”,只是因为我一直传入在 if 语句中设置的变量。尝试了变量间接,函数间接,各种排列方式,甚至我认识的一些人在这方面取得了成功,但问题仍然存在。
我想要一种简洁的方式来编写代码,而不必使用三元运算或函数变通。重复问题中建议了三元运算和函数解决方法,但没有回答我正在寻找的内容。任何编程语言脚本或面向对象都可以使用 if 语句来处理选项,而这种语言没有。
// @version=4
study("multi_ma_pos", "multi_ma", overlay=true)
get_period(interval_input) =>
period = ""
if (timeframe.isintraday)
interval = interval_input > timeframe.multiplier ? interval_input : timeframe.multiplier
period := tostring(interval)
else
period := timeframe.period
period
ma_opt = input(title="ma_opt", defval="13/34", options=["23/75/616", "13/34"])
ma_interval = input(title="ma_interval", type=input.integer, defval=240)
// Declare variables
shrt_term = close
midt_term = close
long_term = close
is_opt_selected = false
if (ma_opt == "23/75/616" and not is_opt_selected)
shrt_term := sma(close, 23)
midt_term := sma(close, 65)
long_term := sma(close, 137)
is_opt_selected := true
if (ma_opt == "13/34" and not is_opt_selected)
shrt_term := ema(close, 13)
midt_term := ema(close, 34)
long_term := sma(close, 34)
is_opt_selected := true
shrt_term_out = security(syminfo.tickerid, get_period(ma_interval), shrt_term)
midt_term_out = security(syminfo.tickerid, get_period(ma_interval), midt_term)
long_term_out = security(syminfo.tickerid, get_period(ma_interval), long_term)
plot(shrt_term_out, title="shrt_term", color=#ffa726, linewidth=2)
plot(midt_term_out, title="midt_term", color=#ffa726, linewidth=4)
plot(long_term_out, title="long_term", color=#e65100, linewidth=4)
【问题讨论】:
-
并非如此。它是我试图避免的解决方案,这种内联条件的代码看起来更混乱,如果我添加两个以上的选项,则不会扩展。老实说,这篇文章更多地是为了提高人们对 tradingview pinescript 作为一种语言缺乏的认识,并且该语言的开发人员需要感受到来自社区的压力,即这些限制是荒谬的。 devrant.com/rants/1982830/…
-
在证券中禁止可变变量有一些基本的根源。如果允许,用户最多可以获得 8 字节 * 10000 条 * 10000 个不同的值 = 800 MB RAM。考虑到一个脚本可以有 40 个证券,用户可以请求 32 GB 的 RAM。我想这是没有人会允许的,所以有限制。我看了你提供的链接,那是垃圾。大部分问题是人们拿了一个简单的工具,打算只用来将几个指标连接在一起并得出一个结果,然后用这个工具来计算登月。
-
仍然可以遵守此类限制。我不明白你的意思,因为 pine 脚本编译器在抛出有关内存资源约束的错误时没有问题。我不能使用 if 语句,也不能传入不同长度的 ema() 函数,因为它会导致此脚本出现问题。我有另一个脚本,我可以将可变长度传递给 ema 到安全功能,我相信它的版本 3 与版本 4 的中心问题。不是人家要计算登月,更像是不使用plot命令就无法显示2+2。
-
有趣的是,你提到登月已经解决了,大约 50 多年前,当时它是开创性的。这些语言问题在 10 年前也得到了解决。倒退不是一个明智的论点。
标签: syntax pine-script technical-indicator