首页 > 解决方案 > 在 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))

在此处输入图像描述

标签: pine-script

解决方案


推荐阅读