pine-script - 在 TradingView 中加载和加载字符串
问题描述
我一生都无法弄清楚如何将数据加载到字符串数组中并读出数据。
让我描述一下完整的问题。您将级别粘贴为输入:37.51 38.12 * 40.15 42.10
. 星号表示重要级别。为了好玩,让我们使用 AMC 作为示例图表。
下面我介绍了两种方法都无法创建正确的数组。levels_important 总是空的,levels_standard 总是重复的。
共享功能:
draw_hline(price, line_color, line_style) =>
line.new(x1=bar_index - 100, y1=price, x2=bar_index, y2=price, xloc=xloc.bar_index, color=line_color, style=line_style, extend=extend.both, width=1)
debug(value) =>
if barstate.islast
label.new( bar_index + 100, high, tostring(value), size = size.huge, style= label.style_none, textalign=text.align_left)
array_to_str(arr) =>
if array.size(arr) == 0
'[empty]'
else
var str = ""
for i = 0 to array.size(arr) - 1
str := str + tostring(array.get(arr, i)) + " "
str
尝试 1:推入数组
通过向后遍历字符串并跟踪后面的数字是否重要,为标准和重要级别创建两个空数组。
var data = "37.51 38.12 * 40.15 42.10"
if barstate.islast
var levels = str.split(data, ' ')
var levels_standard = array.new_string(0)
var levels_important = array.new_string(0)
var is_important = false
for i = 0 to array.size(levels) - 1
var rev_index = array.size(levels) - 1 - i
var level = array.get(levels, rev_index)
if level == '*'
is_important := true
else if is_important
array.push(levels_important, level)
is_important := false
else
array.push(levels_standard, level)
is_important := false
debug('l:' + array_to_str(levels) +
'\nimp:' + array_to_str(levels_important) +
'\nstd: '+ array_to_str(levels_standard))
尝试 2:在数组中设置值
相同的一般策略,但我们实例化两个数组,而不是推送值,我们可以稍后迭代。
var data = "37.51 38.12 * 40.15 42.10"
if barstate.islast
var levels = str.split(data, ' ')
var levels_standard = array.new_string(20)
var levels_important = array.new_string(20)
var is_important = false
for i = 0 to array.size(levels) - 1
var rev_index = array.size(levels) - 1 - i
var level = array.get(levels, rev_index)
if level == '*'
array.set(levels_important, i, '')
array.set(levels_standard, i, '')
is_important := true
else if is_important
array.set(levels_important, i, level)
array.set(levels_standard, i, '')
is_important := false
else
array.set(levels_important, i, '')
array.set(levels_standard, i, level)
is_important := false
for i = 0 to array.size(levels_important) - 1
var level = array.get(levels_important, i)
if level != ''
draw_hline(tonumber(level), color.red, line.style_dashed)
for i = 0 to array.size(levels_standard) - 1
var level = array.get(levels_important, i)
if level != ''
draw_hline(tonumber(level), color.gray, line.style_dashed)
debug('l:' + array_to_str(levels) +
'\nimp:' + array_to_str(levels_important) +
'\nstd: '+ array_to_str(levels_standard))
解决方案
推荐阅读
- postgresql - Postgresql 查询在逻辑或中包含常量导致全表扫描
- amazon-web-services - AWS/SSM/AWS-RunPatchBaseline
- php - 在 PHP 中使用 CSS 样式表
- reactjs - 传递对象文字样式的组件
- vba - 将 HTML 实体解码为纯文本
- javascript - Leaflet:基于数据源的图标
- excel - 需要帮助在 Excel VBA 中从一个工作簿复制/粘贴到另一个工作簿
- masstransit - 如何将标头从 MassTransit 中的 ConsumeContext 复制到 PublishContext/SendContext
- php - 使用 php,如何从 dialogflow 实现 JSON 请求中获取特定数据并将数据存储到 php 变量中
- python - 在 django 中检查多对多集合中的成员