Hi. Thanks for creating this FFI wrapper. I'm using it in place of my own code. I ran into this problem and decided to ask my robot to look into it for us.
Summary
ta_lib_ffi version 0.3.0 fails when calling TA-Lib functions that require multiple array parameters (e.g., high, low, close). The library incorrectly processes these arrays, resulting in NoMethodError: undefined method 'length' for an instance of Float.
Environment
- Ruby Version: 3.4.7
- ta_lib_ffi Version: 0.3.0
- Platform: macOS (Darwin 25.0.0)
- TA-Lib C Library: 0.4.0 (installed via Homebrew)
Affected Functions
All TA-Lib functions requiring multiple array inputs fail, including:
- Volatility Indicators:
atr, natr, sar, trange
- Momentum Indicators:
cci, willr, adx, stoch
- Volume Indicators:
obv, ad, adosc
- All Candlestick Patterns:
cdl_doji, cdl_hammer, cdl_engulfing, etc.
Working Functions
Single-array functions work correctly:
sma, ema, rsi, macd, bbands, roc, etc.
Minimal Reproducible Example
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'ta_lib_ffi', '0.3.0'
end
require 'ta_lib_ffi'
# Sample OHLC data (10 periods)
high = [102.0, 103.0, 104.0, 103.0, 105.0, 106.0, 107.0, 106.5, 108.0, 109.0]
low = [99.5, 100.0, 101.0, 100.5, 102.0, 103.0, 104.0, 103.5, 105.0, 106.0]
close = [101.0, 102.0, 101.5, 103.0, 104.0, 105.0, 105.5, 106.0, 107.0, 108.0]
puts "Ruby Version: #{RUBY_VERSION}"
puts "ta_lib_ffi Version: #{TALibFFI::VERSION}"
puts "Data arrays length: #{high.length}"
puts "\nAttempting to calculate ATR (Average True Range)...\n\n"
begin
# This should work but fails with NoMethodError
result = TALibFFI.atr(high, low, close, time_period: 5)
puts "SUCCESS: ATR calculated successfully"
puts "Result: #{result.inspect}"
rescue NoMethodError => e
puts "ERROR: #{e.class}"
puts "Message: #{e.message}"
puts "\nFull backtrace:"
puts e.backtrace.first(10).join("\n")
end
puts "\n" + ("=" * 80)
puts "Testing with single-array function (SMA) for comparison..."
puts "=" * 80 + "\n"
begin
# This works fine
sma_result = TALibFFI.sma(close, time_period: 5)
puts "SUCCESS: SMA calculated successfully"
puts "Result: #{sma_result.compact.inspect}"
rescue => e
puts "ERROR: #{e.class} - #{e.message}"
end
Expected Behavior
The atr function should:
- Accept three arrays (high, low, close) as parameters
- Calculate the Average True Range indicator
- Return an array of ATR values
Actual Behavior
The function raises a NoMethodError:
ERROR: NoMethodError
Message: undefined method 'length' for an instance of Float
Full backtrace:
/path/to/gems/ta_lib_ffi-0.3.0/lib/ta_lib_ffi.rb:475:in 'TALibFFI.prepare_double_array'
/path/to/gems/ta_lib_ffi-0.3.0/lib/ta_lib_ffi.rb:783:in 'block in TALibFFI.setup_price_inputs'
/path/to/gems/ta_lib_ffi-0.3.0/lib/ta_lib_ffi.rb:781:in 'TALibFFI.setup_price_inputs'
Root Cause Analysis
The error occurs in ta_lib_ffi.rb:475 at this line:
array_ptr = Fiddle::Pointer.malloc(Fiddle::SIZEOF_DOUBLE * array.length)
^^^^^^^
The array parameter is receiving a Float value instead of an Array, suggesting that the multi-array parameter setup in setup_price_inputs (line 781-783) is incorrectly processing the input arrays.
Workaround
Currently, there is no workaround for this issue. Users must skip all multi-array indicator functions when using ta_lib_ffi 0.3.0.
Impact
This bug affects:
- ~60% of TA-Lib indicators (122 out of 200+ functions)
- All users requiring volatility analysis (ATR, NATR)
- All users needing candlestick pattern recognition
- All users analyzing with OHLC data
Hi. Thanks for creating this FFI wrapper. I'm using it in place of my own code. I ran into this problem and decided to ask my robot to look into it for us.
Summary
ta_lib_ffiversion 0.3.0 fails when calling TA-Lib functions that require multiple array parameters (e.g., high, low, close). The library incorrectly processes these arrays, resulting inNoMethodError: undefined method 'length' for an instance of Float.Environment
Affected Functions
All TA-Lib functions requiring multiple array inputs fail, including:
atr,natr,sar,trangecci,willr,adx,stochobv,ad,adosccdl_doji,cdl_hammer,cdl_engulfing, etc.Working Functions
Single-array functions work correctly:
sma,ema,rsi,macd,bbands,roc, etc.Minimal Reproducible Example
Expected Behavior
The
atrfunction should:Actual Behavior
The function raises a
NoMethodError:Root Cause Analysis
The error occurs in
ta_lib_ffi.rb:475at this line:The
arrayparameter is receiving aFloatvalue instead of anArray, suggesting that the multi-array parameter setup insetup_price_inputs(line 781-783) is incorrectly processing the input arrays.Workaround
Currently, there is no workaround for this issue. Users must skip all multi-array indicator functions when using ta_lib_ffi 0.3.0.
Impact
This bug affects: