pine-script - 为 sma() 和 ema() 声明一个变量
问题描述
我想根据选项中选择的内容绘制 SMA 线或 EMA 线。
sma_or_ema = input(group = "MA", title = "Type of MA", options = ["SMA", "EMA"], defval = "SMA")
ma_source = input(group = "MA", title = "Source", type = input.source, defval = close)
ma1_period = input(group = "MA", title = "SMA #1 period", type = input.integer, minval=3, maxval=200, defval = 20)
ma2_period = input(group = "MA", title = "SMA #2 period", type = input.integer, minval=3, maxval=200, defval = 50)
ma3_period = input(group = "MA", title = "SMA #3 period", type = input.integer, minval=3, maxval=200, defval = 100)
ma4_period = input(group = "MA", title = "SMA #4 period", type = input.integer, minval=3, maxval=200, defval = 200)
string ma_title = "SMA"
ma1_series = na
ma2_series = na
ma3_series = na
ma4_series = na
if sma_or_ema == "SMA"
ma1_series := sma(ma_source, ma1_period)
ma2_series := sma(ma_source, ma2_period)
ma3_series := sma(ma_source, ma3_period)
ma4_series := sma(ma_source, ma4_period)
else
ma_title := "EMA"
ma1_series := ema(ma_source, ma1_period)
ma2_series := ema(ma_source, ma2_period)
ma3_series := ema(ma_source, ma3_period)
ma4_series := ema(ma_source, ma4_period)
plot(ma1_series, title = "MA #1", color = #5a0e41, linewidth = 1, trackprice = true)
plot(ma2_series, title = "MA #2", color = #752b59, linewidth = 1, trackprice = true)
plot(ma3_series, title = "MA #3", color = #8f4471, linewidth = 1, trackprice = true)
plot(ma4_series, title = "MA #4", color = #ab5d8b, linewidth = 1, trackprice = true)
plot 不能在 if 语句中调用。变量不能在 if 语句中声明。使用 sma() 调用初始化 ma_series 变量会起作用,但如果选择 EMA,则会导致不必要的处理。如何声明这些变量?
解决方案
您可以隐藏函数内的 ma 开关并将您的输入作为参数传递:
//@version=4
study("ma-ema", overlay = true)
sma_or_ema = input(group = "MA", title = "Type of MA", options = ["SMA", "EMA"], defval = "SMA")
ma_source = input(group = "MA", title = "Source", type = input.source, defval = close)
ma1_period = input(group = "MA", title = "SMA #1 period", type = input.integer, minval=3, maxval=200, defval = 20)
ma2_period = input(group = "MA", title = "SMA #2 period", type = input.integer, minval=3, maxval=200, defval = 50)
ma3_period = input(group = "MA", title = "SMA #3 period", type = input.integer, minval=3, maxval=200, defval = 100)
ma4_period = input(group = "MA", title = "SMA #4 period", type = input.integer, minval=3, maxval=200, defval = 200)
f_ma(_type, _source, _length) =>
if _type == "SMA"
sma(_source, _length)
else
ema(_source, _length)
ma1_series = f_ma(sma_or_ema, ma_source, ma1_period)
ma2_series = f_ma(sma_or_ema, ma_source, ma2_period)
ma3_series = f_ma(sma_or_ema, ma_source, ma3_period)
ma4_series = f_ma(sma_or_ema, ma_source, ma4_period)
plot(ma1_series)
plot(ma2_series)
plot(ma3_series)
plot(ma4_series)
推荐阅读
- python - 如何根据标题名称移动 csv 中的数据并将其移动到同一列中?
- ray - 是否可以肯定地将一名工作人员分配给集群中的一台主机?
- asciidoc - 如何修复“内联代码中的链接突出显示”?
- android - 启动获取请求时 Kotlin 应用程序崩溃
- wso2 - WSO2 EI For循环遍历Json数组
- c# - 如何在 C# 中获取空数组的元素类型?
- ios - 如何根据按下的 UIButton 将特定文本传递给标签?
- google-apps-script - 是否可以将带有部分的表单响应放置到不同的选项卡?
- javascript - 在 Collapsible 中显示组件
- css - 如何将谷歌字体导入为 Open Type 以使用 css font-feature-settings