You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script导入CSV数据报错:csvData[i,1]语法错误求修复

问题修复方案

核心错误分析

你的代码存在三个关键问题:

  1. CSV数据获取错误:原代码用request.security只获取了单个close值,不是二维数组,无法通过索引访问多行多列数据。
  2. 二维数组访问语法错误:Pine Script不支持csvData[i,1]或csvData[i][1]的访问方式,必须用array.get(array.get(二维数组, 行索引), 列索引)。
  3. 语法结构混乱:if not na(csvData)后未用大括号包裹代码块,导致else位置错误,编译器报错。

修复后的完整代码

//@version=5
indicator("Top 5 Prices", overlay=true)

// 存储CSV二维数据、价格数组和水平线对象
var float[][] csvData = array.new_array()
var float[] top5BidPrices = array.new_float(5)
var float[] top5AskPrices = array.new_float(5)
var line[] bidLines = array.new_line(5)
var line[] askLines = array.new_line(5)

// 获取CSV表格并转为二维数组
csv_table = request.security("MyCsvFilePath", "D", request.table.all())
if not na(csv_table)
    csvData := request.table.to_array(csv_table)

// 确保CSV数据行数足够(至少5行)
if array.size(csvData) >= 5
    // 更新Top5 Bid价格(第1列,索引从0开始)
    for i = 0 to 4
        row = array.get(csvData, i)
        if array.size(row) >= 2
            array.set(top5BidPrices, i, array.get(row, 1))
    
    // 更新Top5 Ask价格(第3列,索引从0开始)
    for i = 0 to 4
        row = array.get(csvData, i)
        if array.size(row) >= 4
            array.set(top5AskPrices, i, array.get(row, 3))
    
    // 更新Bid水平线(避免重复创建)
    for i = 0 to 4
        bid_price = array.get(top5BidPrices, i)
        if not na(bid_price)
            line_obj = array.get(bidLines, i)
            if na(line_obj)
                array.set(bidLines, i, line.new(bar_index[1], bid_price, bar_index, bid_price, width=1, color=color.blue))
            else
                line.set_x2(line_obj, bar_index)
    
    // 更新Ask水平线(避免重复创建)
    for i = 0 to 4
        ask_price = array.get(top5AskPrices, i)
        if not na(ask_price)
            line_obj = array.get(askLines, i)
            if na(line_obj)
                array.set(askLines, i, line.new(bar_index[1], ask_price, bar_index, ask_price, width=1, color=color.red))
            else
                line.set_x2(line_obj, bar_index)

关键修复说明

  • CSV数据获取:用request.table.all()获取完整CSV表格,再转为二维数组,支持多行多列访问。
  • 数组访问:通过嵌套array.get访问指定行列的数据,符合Pine Script规范。
  • 语法结构:所有条件代码块用大括号包裹,修复if-else语法错误。
  • 性能优化:用array.set更新价格数组,避免无限扩容;用var数组存储水平线对象,只创建一次,后续更新位置,防止内存泄漏。
  • 容错处理:增加数组大小检查,避免因CSV格式异常导致的索引越界。

内容的提问来源于stack exchange,提问作者Arman Mcc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:05:08