请求修复AmiBroker中Filtered CRSI AFL代码的ERROR 16语法错误
修复AmiBroker中Filtered Connors RSI的ERROR 16参数过多问题
问题背景
我是AmiBroker平台新手,正尝试将TradingView中常用的Filtered Connors RSI指标改写为AFL代码,运行代码时提示ERROR 16: Too many arguments,原代码如下:
_SECTION_BEGIN("Filtered Connors RSI"); ma_length = 4; c_length = 3; ud_length = 2; roc_length = 100; // Heikin - Ashi Technique HaClose = (O + H + L + C) / 4; //HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); //HaHigh = Max( H, Max( HaClose, HaOpen ) ); //HaLow = Min( L, Min(HaClose, HaOpen) ); function crsi(input, len, ud_len, roc_len) { upDays = BarsSince(HaClose <= Ref(HaClose,-1)); downDays = BarsSince(HaClose >= Ref(HaClose,-1)); updown = IIf(upDays > 0, upDays, IIf(downDays > 0, -downDays, 0)); rsi1 = RSI(input, len); updownrsi = RSI(updown, ud_len); percrank = PercentRank( ROC( input,1), roc_len); return (rsi1 + updownrsi + percrank)/3; } rsi_open = crsi( Open, c_length, ud_length, roc_length); rsi_high = crsi( High, c_length, ud_length, roc_length); rsi_low = crsi( Low, c_length, ud_length, roc_length); rsi_close = crsi( Close, c_length, ud_length, roc_length); function sHaClose() { return (O + H + L + C) / 4; } source = sHaClose(rsi_open, rsi_high, rsi_low, rsi_close); fcrsi = TEMA(source, ma_length); PlotGrid(70, colorGreen, pattern=10, width=2, label=True); PlotGrid(50, colorBrown, pattern=9, width=2, label=True); PlotGrid(30, colorRed, pattern=10, width=2, label=True); Plot(fcrsi, "Filtered Connors RSI", colorBlue, styleLine|styleThick, width=2); _SECTION_END();
错误原因
sHaClose函数定义未声明任何参数,但调用时传入了4个参数(rsi_open、rsi_high、rsi_low、rsi_close),参数数量不匹配导致报错。- 原函数内部使用原始K线的O/H/L/C,和基于四个CRSI值计算Heikin-Ashi Close的逻辑不符。
修复后的代码
_SECTION_BEGIN("Filtered Connors RSI"); ma_length = 4; c_length = 3; ud_length = 2; roc_length = 100; // Heikin - Ashi Technique HaClose = (O + H + L + C) / 4; //HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); //HaHigh = Max( H, Max( HaClose, HaOpen ) ); //HaLow = Min( L, Min(HaClose, HaOpen) ); function crsi(input, len, ud_len, roc_len) { upDays = BarsSince(HaClose <= Ref(HaClose,-1)); downDays = BarsSince(HaClose >= Ref(HaClose,-1)); updown = IIf(upDays > 0, upDays, IIf(downDays > 0, -downDays, 0)); rsi1 = RSI(input, len); updownrsi = RSI(updown, ud_len); percrank = PercentRank( ROC( input,1), roc_len); return (rsi1 + updownrsi + percrank)/3; } rsi_open = crsi( Open, c_length, ud_length, roc_length); rsi_high = crsi( High, c_length, ud_length, roc_length); rsi_low = crsi( Low, c_length, ud_length, roc_length); rsi_close = crsi( Close, c_length, ud_length, roc_length); // 修改sHaClose函数,接收四个参数并计算对应的Heikin-Ashi Close function sHaClose(open_val, high_val, low_val, close_val) { return (open_val + high_val + low_val + close_val) / 4; } source = sHaClose(rsi_open, rsi_high, rsi_low, rsi_close); fcrsi = TEMA(source, ma_length); PlotGrid(70, colorGreen, pattern=10, width=2, label=True); PlotGrid(50, colorBrown, pattern=9, width=2, label=True); PlotGrid(30, colorRed, pattern=10, width=2, label=True); Plot(fcrsi, "Filtered Connors RSI", colorBlue, styleLine|styleThick, width=2); _SECTION_END();
修复说明
- 调整
sHaClose函数定义,添加4个参数对应传入的四个CRSI值 - 函数内部逻辑改为使用传入参数计算Heikin-Ashi Close,匹配指标计算需求
内容的提问来源于stack exchange,提问作者Krishnendu Bhattacharyya
相关产品推荐
相关产品推荐

