PineScript V5斐波那契回撤指标语法错误:赋值符号冲突求助
问题解决:PineScript V5斐波那契回撤指标语法错误
错误根源
你遇到的<Syntax error at input '='>及赋值符号矛盾问题,核心是PineScript V5不支持直接通过数组下标(array[i] := 值)修改元素,必须使用官方提供的array.set()函数操作数组。此外第二段代码里的fib_levels_prices([i])属于错误语法,下标无需额外加括号。
修正后的关键代码片段
第一段循环修正
原错误代码:
for i = 0 to fib_levels_arr.size() - 1 fib_levels_arr_f[i] := float(fib_levels_arr[i])
修正后:
for i = 0 to fib_levels_arr.size() - 1 array.set(fib_levels_arr_f, i, float(str.trim(array.get(fib_levels_arr, i))))
补充:添加
str.trim()是为了处理输入字符串中可能存在的空格(比如用户输入0.236, 0.382带空格的情况),避免float转换失败。
第二段循环修正
原错误代码:
for i = 0 to int(fib_levels_arr.size() - 1) fib_levels_prices([i]) := fib_swing_high - fib_levels_arr_f[i] * fib_price_range
修正后:
for i = 0 to fib_levels_arr.size() - 1 array.set(fib_levels_prices, i, fib_swing_high - array.get(fib_levels_arr_f, i) * fib_price_range)
说明:
fib_levels_arr.size()本身返回整数类型,无需用int()转换;获取数组元素必须用array.get(),修改元素用array.set()。
完整修正代码
//@version=5 strategy("Supetrend, MACD and RSI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=110, initial_capital=100, margin_long=0.1, margin_short=0.1) // Define Fibonacci Retracement : Inputs entry_size = input.float(100, title="Entry Size (in USD)") stop_loss = input.float(50, title="Stop Loss (in USD)") take_profit = input.float(200, title="Take Profit (in USD)") fib_levels = input.string(title="Fibonacci Levels", defval="0.236,0.382,0.5,0.618,0.786") fib_breakout_range = input.int(10, title="Fibonacci Breakout Range") // Calculate Fibonacci Retracement // split the string into an array of substrings using the "," delimiter var fib_levels_arr = str.split(fib_levels, ",") // create a new float array with the same size as fib_levels_arr var fib_levels_arr_f = array.new_float(fib_levels_arr.size()) // iterate over each index of fib_levels_arr, convert the string to a float and store it in the corresponding index of fib_levels_arr_f for i = 0 to fib_levels_arr.size() - 1 array.set(fib_levels_arr_f, i, float(str.trim(array.get(fib_levels_arr, i)))) fib_swing_high = ta.highest(high, 5) fib_swing_low = ta.lowest(low, 5) fib_price_range = fib_swing_high - fib_swing_low fib_levels_prices = array.new_float(fib_levels_arr.size(), na) for i = 0 to fib_levels_arr.size() - 1 array.set(fib_levels_prices, i, fib_swing_high - array.get(fib_levels_arr_f, i) * fib_price_range) fib_breakout_level = ta.pivothigh(high, fib_breakout_range, fib_breakout_range) fib_support_level = ta.pivotlow(low, fib_breakout_range, fib_breakout_range)
额外注意事项
- PineScript V5对数组操作严格依赖官方API函数,不能像常规编程语言那样直接通过下标读写;
- 字符串转float前用
str.trim()清理空格,可避免因输入格式问题导致的转换失败; var关键字用于声明仅初始化一次的变量,适合数组这类无需每根K线重建的对象。
内容的提问来源于stack exchange,提问作者James_Semaj
相关产品推荐
相关产品推荐

