tafunc 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ #
2
+ # filename: tafunc_array.rb
3
+ #
4
+ #
5
+
6
+ require "tafunc"
7
+
8
+
9
+ #module TaLib; end
10
+ #class TaLib::TAFunc; end
11
+
12
+ # define Array#tafunc.
13
+ # ==== Args
14
+ #
15
+ # ==== Return
16
+ #
17
+ class Array
18
+
19
+ def tafunc( func )
20
+
21
+ #
22
+ #ret = {}
23
+ ret = nil
24
+
25
+ #
26
+ ret = TaLib::TAFunc.new( func ) do |taf|
27
+
28
+ raise "Conflicts: # of inputs!" if taf.param_attr( :in ).size != 1
29
+
30
+ # inputs.
31
+ taf.param_in_real = self
32
+
33
+ # outputs.
34
+ taf.param_out_setting
35
+
36
+ # options.
37
+ yield(taf) if block_given?
38
+
39
+ end.call
40
+
41
+ #
42
+ return ret
43
+ end
44
+
45
+ end
46
+
47
+
48
+
49
+
50
+ #### endof filename: tafunc_array.rb
@@ -0,0 +1,64 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: tafunc 0.0.1 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "tafunc"
9
+ s.version = "0.0.1"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["YAMAMOTO, Masayuki"]
13
+ s.date = "2013-12-12"
14
+ s.description = "Useful methods are added to TaLib, TaLib::Function, and TaLib::TAFunc."
15
+ s.email = "martin.route66.blues+github@gmail.com"
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.md"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ "Gemfile",
23
+ "LICENSE.txt",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/tafunc.rb",
28
+ "test/helper.rb",
29
+ "test/test_tafunc.rb"
30
+ ]
31
+ s.homepage = "http://github.com/mephistobooks/tafunc"
32
+ s.licenses = ["MIT"]
33
+ s.require_paths = ["lib"]
34
+ s.rubygems_version = "2.1.9"
35
+ s.summary = "TAFunc: another talib_ruby wrapper and extensions"
36
+
37
+ if s.respond_to? :specification_version then
38
+ s.specification_version = 4
39
+
40
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
41
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
42
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
43
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
44
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.7"])
45
+ s.add_development_dependency(%q<talib_ruby>, [">= 1.0.5"])
46
+ s.add_development_dependency(%q<activesupport>, [">= 4.0.0"])
47
+ else
48
+ s.add_dependency(%q<shoulda>, [">= 0"])
49
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
50
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
51
+ s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
52
+ s.add_dependency(%q<talib_ruby>, [">= 1.0.5"])
53
+ s.add_dependency(%q<activesupport>, [">= 4.0.0"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<shoulda>, [">= 0"])
57
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
58
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
59
+ s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
60
+ s.add_dependency(%q<talib_ruby>, [">= 1.0.5"])
61
+ s.add_dependency(%q<activesupport>, [">= 4.0.0"])
62
+ end
63
+ end
64
+
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'tafunc'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,505 @@
1
+ require 'helper'
2
+
3
+ class TestTAFunc < Test::Unit::TestCase
4
+
5
+ #
6
+ #
7
+ #
8
+ def setup
9
+
10
+ # TA-Lib's MACD has a bug when signal_period = 1.
11
+ # so DO NOT USE.
12
+ #@test_func = :MACD
13
+ @test_func = :MACDEXT
14
+ @testee = TaLib::TAFunc.new( @test_func )
15
+
16
+ end
17
+
18
+ def teardown
19
+ end
20
+
21
+ # test for initialize function(tafunc) object.
22
+ #
23
+ #
24
+ def test_new
25
+
26
+ # inputs.
27
+ attr_in = @testee.param_attr( :in )
28
+ assert_equal( [:param_in_real], attr_in )
29
+ assert_equal( nil, @testee.param_in_real ) # check initial value.
30
+
31
+ # options.
32
+ attr_opt = @testee.param_attr( :opt )
33
+ assert_equal( [:param_opt_in_fast_period,
34
+ :param_opt_in_fast_ma_type,
35
+ :param_opt_in_slow_period,
36
+ :param_opt_in_slow_ma_type,
37
+ :param_opt_in_signal_period,
38
+ :param_opt_in_signal_ma_type], attr_opt )
39
+
40
+ # outputs.
41
+ attr_out = @testee.param_attr( :out )
42
+ assert_equal( [:param_out_macd,
43
+ :param_out_macd_signal,
44
+ :param_out_macd_hist], attr_out )
45
+ assert_equal( nil, @testee.param_out_macd )
46
+ assert_equal( nil, @testee.param_out_macd_signal )
47
+ assert_equal( nil, @testee.param_out_macd_hist )
48
+
49
+ #
50
+ tmp = [0.0, 1.0, 2.0]
51
+ assert_raise(RuntimeError){ @testee.param_in_real( tmp ) }
52
+
53
+ #
54
+ #pp @testee.singleton_methods
55
+ @testee.param_in_real = tmp
56
+ assert_equal( tmp, @testee.param_in_real )
57
+
58
+ ret = @testee.param_out_setting
59
+ assert_equal( [nil,nil,nil], @testee.param_out_macd )
60
+ assert_equal( { :param_out_macd => [nil,nil,nil],
61
+ :param_out_macd_signal => [nil,nil,nil],
62
+ :param_out_macd_hist => [nil,nil,nil],
63
+ }, ret )
64
+
65
+
66
+ end
67
+
68
+ # ==== ATTENTION
69
+ # Don't use MACD. It has a bug when signal_period = 1.
70
+ #
71
+ def test_new_1
72
+
73
+ #
74
+ assert_nothing_raised { TaLib::TAFunc.new( "MACD" ) }
75
+
76
+ #
77
+ assert_nothing_raised { TaLib::TAFunc.new( :MACD ) }
78
+
79
+ #
80
+ e = assert_raise( RuntimeError ) { TaLib::TAFunc.new( [:MACD] ) }
81
+ assert_equal( 0, e.message =~ /Type error for the function name:/ )
82
+
83
+ #
84
+ e = assert_raise( RuntimeError ) { taf = TaLib::TAFunc.new( "" ) }
85
+
86
+ #
87
+ e = assert_raise( RuntimeError ) { taf = TaLib::TAFunc.new( "nonamef" ) }
88
+ assert_equal( false, e.message.match(/^no such function: nonamef/i).nil? )
89
+
90
+
91
+ end
92
+
93
+ #
94
+ #
95
+ #
96
+ def test_struct_ta_types
97
+ exp = [
98
+ :TA_RealRange,
99
+ :TA_IntegerRange,
100
+ :TA_RealDataPair,
101
+ :TA_IntegerDataPair,
102
+ :TA_RealList,
103
+ :TA_IntegerList,
104
+ :TA_InputParameterInfo,
105
+ :TA_OptInputParameterInfo,
106
+ :TA_OutputParameterInfo,
107
+ ]
108
+ assert_equal( exp, Struct.ta_types )
109
+ #assert_equal( exp, Struct::TA_RealRange.to_s )
110
+ #assert_equal( false, Struct::TA_InputParameterInfo.new )
111
+
112
+ end
113
+
114
+ #
115
+ #
116
+ #
117
+ def test_talib_module
118
+
119
+ assert_equal( Module, TaLib.class )
120
+
121
+ #
122
+ exp = {
123
+ 0=>:TA_Input_Price,
124
+ 1=>:TA_Input_Real,
125
+ 2=>:TA_Input_Integer,
126
+ }
127
+ assert_equal( exp, TaLib.input_types )
128
+
129
+ #
130
+ exp = {
131
+ 0=>:TA_OptInput_RealRange,
132
+ 1=>:TA_OptInput_RealList,
133
+ 2=>:TA_OptInput_IntegerRange,
134
+ 3=>:TA_OptInput_IntegerList,
135
+ }
136
+ assert_equal( exp, TaLib.optinput_types )
137
+
138
+ #
139
+ exp = {
140
+ 0=>:TA_Output_Real,
141
+ 1=>:TA_Output_Integer,
142
+ }
143
+ assert_equal( exp, TaLib.output_types )
144
+
145
+ #
146
+ exp = {
147
+ 0=>:TA_MAType_SMA,
148
+ 1=>:TA_MAType_EMA,
149
+ 2=>:TA_MAType_WMA,
150
+ 3=>:TA_MAType_DEMA,
151
+ 4=>:TA_MAType_TEMA,
152
+ 5=>:TA_MAType_TRIMA,
153
+ 6=>:TA_MAType_KAMA,
154
+ 7=>:TA_MAType_MAMA,
155
+ 8=>:TA_MAType_T3,
156
+ }
157
+ assert_equal( exp, TaLib.ma_types )
158
+
159
+ end
160
+
161
+ def test_function_class
162
+
163
+ #
164
+ ret = TaLib::TAFunc.groups
165
+ exp = [
166
+ "Math Operators",
167
+ "Math Transform",
168
+ "Overlap Studies",
169
+ "Volatility Indicators",
170
+ "Momentum Indicators",
171
+ "Cycle Indicators",
172
+ "Volume Indicators",
173
+ "Pattern Recognition",
174
+ "Statistic Functions",
175
+ "Price Transform",
176
+ ]
177
+ assert_equal( 10, ret.size )
178
+ assert_equal( exp, ret )
179
+ assert_equal( TaLib::Function.groups, ret )
180
+
181
+ #
182
+ ret = TaLib::TAFunc.functions
183
+ exp = {
184
+ "Math Operators" => 11,
185
+ "Math Transform" => 15,
186
+ "Overlap Studies" => 17,
187
+ "Volatility Indicators" => 3,
188
+ "Momentum Indicators" => 30,
189
+ "Cycle Indicators" => 5,
190
+ "Volume Indicators" => 3,
191
+ "Pattern Recognition" => 61,
192
+ "Statistic Functions" => 9,
193
+ "Price Transform" => 4,
194
+ }
195
+ exp.keys.each do |grp|
196
+
197
+ assert_equal( exp[grp], ret[grp].size )
198
+
199
+ end
200
+
201
+ assert_equal( 158, ret.values.flatten.size )
202
+ #assert_equal( exp.values.inject(0){|r,i| r + i},
203
+ # ret.values.flatten.size )
204
+ assert_equal( TaLib::Function.functions.keys, TaLib::Function.groups )
205
+ end
206
+
207
+ # test for function_{find,exists?}, group_of_function.
208
+ def test_function_function
209
+ # function_find, exists?.
210
+ ret = TaLib::Function.function_find( :macdext )
211
+ assert_equal( "MACDEXT", ret )
212
+
213
+ ret = TaLib::Function.function_exists?( :MACDEXT )
214
+ assert_equal( true, ret )
215
+
216
+ ret = TaLib::Function.function_exists?( :macdext )
217
+ assert_equal( true, ret )
218
+
219
+ ret = TaLib::Function.function_exists?( "MACDEXT" )
220
+ assert_equal( true, ret )
221
+
222
+ ret = TaLib::Function.function_exists?( "macdext" )
223
+ assert_equal( true, ret )
224
+
225
+ ret = TaLib::Function.function_exists?( "MACDEXTfooobarrr" )
226
+ assert_equal( false, ret )
227
+
228
+ #
229
+ ret = TaLib::Function.group_of_function( :MACDEXT )
230
+ assert_equal( "Momentum Indicators", ret )
231
+
232
+ end
233
+
234
+
235
+ def test_function
236
+
237
+ #
238
+ assert_equal( @test_func.to_s, @testee.name )
239
+
240
+ #
241
+ ret = @testee.ifs_ins
242
+ assert_equal( 1, ret.size )
243
+ assert_equal( Struct::TA_InputParameterInfo, ret[0].class )
244
+ assert_equal( 1, ret[0].type )
245
+ assert_equal( "inReal", ret[0].param_name )
246
+ assert_equal( 0, ret[0].flags )
247
+
248
+ #
249
+ ret = @testee.ifs_opts
250
+ assert_equal( 6, ret.size )
251
+ ret.size.times do |i|
252
+ exp_param_name = [ "optInFastPeriod",
253
+ "optInFastMAType",
254
+ "optInSlowPeriod",
255
+ "optInSlowMAType",
256
+ "optInSignalPeriod",
257
+ "optInSignalMAType", ][i]
258
+ assert_equal( Struct::TA_OptInputParameterInfo, ret[i].class )
259
+ assert_equal( exp_param_name, ret[i].param_name )
260
+ end
261
+
262
+ ret = @testee.ifs_outs
263
+ assert_equal( 3, ret.size )
264
+ ret.size.times do |i|
265
+ exp_param_name = [ "outMACD",
266
+ "outMACDSignal",
267
+ "outMACDHist" ][i]
268
+ assert_equal( Struct::TA_OutputParameterInfo, ret[i].class )
269
+ assert_equal( exp_param_name, ret[i].param_name )
270
+
271
+ end
272
+
273
+ #
274
+ ret = @testee.ifs_all
275
+ assert_equal( 10, ret.size )
276
+
277
+ end
278
+
279
+ def test_tafunc_new
280
+
281
+ assert_nothing_raised { macd = TaLib::TAFunc.new( :MA ) }
282
+ assert_equal( "MA", TaLib::TAFunc.new("ma").name )
283
+
284
+
285
+ end
286
+
287
+ def test_tafunc
288
+
289
+ #
290
+ ret = TaLib::TAFunc.instance_methods.grep(/^param_(in|opt|out)$/)
291
+ assert_equal([:param_in, :param_opt, :param_out], ret)
292
+
293
+ # in case that the function is MACD.
294
+ exp = [
295
+ :param_in_real,
296
+ :param_in_real=,
297
+ :param_opt_in_fast_period,
298
+ :param_opt_in_fast_period=,
299
+ :param_opt_in_fast_ma_type,
300
+ :param_opt_in_fast_ma_type=,
301
+ :param_opt_in_slow_period,
302
+ :param_opt_in_slow_period=,
303
+ :param_opt_in_slow_ma_type,
304
+ :param_opt_in_slow_ma_type=,
305
+ :param_opt_in_signal_period,
306
+ :param_opt_in_signal_period=,
307
+ :param_opt_in_signal_ma_type,
308
+ :param_opt_in_signal_ma_type=,
309
+ :param_out_macd,
310
+ :param_out_macd=,
311
+ :param_out_macd_signal,
312
+ :param_out_macd_signal=,
313
+ :param_out_macd_hist,
314
+ :param_out_macd_hist=,
315
+ ]
316
+ ret = @testee.singleton_methods.grep(/^param_/)
317
+ assert_equal(exp, ret)
318
+ ret = @testee.param_methods
319
+ assert_equal(exp, ret)
320
+
321
+ ret = @testee.param_methods( :in )
322
+ assert_equal( [:param_in_real, :param_in_real=], ret )
323
+
324
+ ret = @testee.param_attr( :in )
325
+ assert_equal( [:param_in_real], ret )
326
+
327
+ ret = @testee.param_attr( :opt )
328
+ assert_equal( [:param_opt_in_fast_period,
329
+ :param_opt_in_fast_ma_type,
330
+ :param_opt_in_slow_period,
331
+ :param_opt_in_slow_ma_type,
332
+ :param_opt_in_signal_period,
333
+ :param_opt_in_signal_ma_type,
334
+ ], ret )
335
+
336
+ #ret = @testee.param_methods( :in, :type )
337
+ #assert_equal([:param_in_real], ret)
338
+
339
+
340
+ #
341
+ assert_equal( nil, @testee.param_in_real )
342
+ assert_equal( [1,2,3], @testee.param_in_real=[1,2,3] )
343
+ assert_equal( [1,2,3], @testee.param_in_real )
344
+ assert_equal( :TA_Input_Real, @testee.param_in_real(:type) )
345
+
346
+ h = {}
347
+ ret = @testee.param_out_setting( h )
348
+ assert_equal( { }, h )
349
+
350
+ ret = @testee.param_out_setting( h, force_mode: true )
351
+ assert_equal( { :param_out_macd =>[nil, nil, nil],
352
+ :param_out_macd_signal =>[nil, nil, nil],
353
+ :param_out_macd_hist =>[nil, nil, nil], }, h )
354
+
355
+ end
356
+
357
+ def test_tafunc_call
358
+
359
+ #
360
+ e = assert_raise( RuntimeError ){ @testee.call }
361
+ assert_equal( 0, e.message =~ /No setting of param_in_/ )
362
+
363
+ #
364
+ tmp = [ 1.0, 2.0, 3.0, 4.0, 5.0 ]
365
+ @testee.param_in_real = tmp
366
+ #@testee.param_opt_in_fast_period = 3
367
+ assert_equal( tmp, @testee.param_in_real )
368
+ e = assert_raise( RuntimeError ){ @testee.call }
369
+ assert_equal( 0, e.message =~ /unsuccess return code TA_CallFunc/ )
370
+
371
+ #
372
+ @testee.param_out_macd = Array.new(@testee.param_in_real.size)
373
+ @testee.param_out_macd_signal = Array.new(@testee.param_in_real.size)
374
+ @testee.param_out_macd_hist = Array.new(@testee.param_in_real.size)
375
+ assert_nothing_raised{ @testee.call }
376
+ assert_nothing_raised{ @testee.call(0,4) }
377
+ assert_nothing_raised{ @testee.call(1..3) }
378
+ assert_nothing_raised{ @testee.call(1...3) }
379
+ assert_raise( RuntimeError ){ @testee.call(1,8) }
380
+ assert_raise( RuntimeError ){ @testee.call(1..8) }
381
+ assert_raise( RuntimeError ){ @testee.call(1...8) }
382
+ assert_raise( RuntimeError ){ @testee.call(4,0) }
383
+ assert_nothing_raised{ @testee.call(tmp) }
384
+
385
+ end
386
+
387
+ # case without param_in_real.
388
+ def test_tafunc_call_1
389
+
390
+ #
391
+ tmp = [ 1.0, 2.0, 3.0, 4.0, 5.0 ]
392
+
393
+ #
394
+ @testee.param_out_macd = Array.new(tmp)
395
+ @testee.param_out_macd_signal = Array.new(tmp)
396
+ @testee.param_out_macd_hist = Array.new(tmp)
397
+ assert_nothing_raised{ @testee.call(tmp) }
398
+
399
+ end
400
+
401
+ # MACD test with TA_MACDEXT.
402
+ #
403
+ def test_tafunc_macd
404
+
405
+ #
406
+ tmp = [ 1.0, 2.0, 3.0, 4.0, 5.0 ]
407
+ @testee.param_in_real = tmp
408
+ @testee.param_opt_in_fast_period = 2 # MA of tmp by 2 periods.
409
+ @testee.param_opt_in_slow_period = 3 # MA of tmp by 3 periods.
410
+ @testee.param_opt_in_signal_period = 1 # MA of MACD by 1 period. (Signal=MACD)
411
+ [ :param_opt_in_fast_ma_type=,
412
+ :param_opt_in_slow_ma_type=,
413
+ :param_opt_in_signal_ma_type=, ].each {|param|
414
+ @testee.send( param, TaLib::TA_MAType_EMA )
415
+ }
416
+
417
+ # .
418
+ output_size = tmp.size + [ @testee.param_opt_in_fast_period,
419
+ @testee.param_opt_in_slow_period,
420
+ @testee.param_opt_in_signal_period ].max
421
+ #
422
+ @testee.param_out_macd = Array.new( output_size )
423
+ @testee.param_out_macd_signal = Array.new( output_size )
424
+ @testee.param_out_macd_hist = Array.new( output_size )
425
+
426
+ #
427
+ tmp = [nil, nil, nil, nil, nil, nil, nil, nil]
428
+ @testee.param_out_macd = tmp.dup
429
+ @testee.param_out_macd_signal = tmp.dup
430
+ @testee.param_out_macd_hist = tmp.dup
431
+
432
+ assert_equal( tmp, @testee.param_out_macd )
433
+
434
+ #
435
+ ret_call = nil
436
+ assert_nothing_raised{ ret_call = @testee.call(0, 4) }
437
+
438
+ # start_idx, num_elements.
439
+ assert_equal( [2, 3], [ret_call[:start_idx], ret_call[:num_elements]] )
440
+
441
+ #
442
+ assert_equal( [0.5, 0.5, 0.5],
443
+ @testee.param_out_macd[ 0..(ret_call[:num_elements]-1)] )
444
+ assert_equal( @testee.param_out_macd,
445
+ @testee.param_out_macd_signal )
446
+ assert_equal( [0.0, 0.0, 0.0],
447
+ @testee.param_out_macd_hist[0..(ret_call[:num_elements]-1)] )
448
+ end
449
+
450
+ def test_tafunc_macd_1
451
+
452
+ #
453
+ tmp = [ 1.0, 2.0, 3.0, 4.0, 5.0, 0.0, 0.0 ]
454
+ @testee.param_in_real = tmp
455
+ @testee.param_opt_in_fast_period = 2 # MA of tmp by 2 periods.
456
+ @testee.param_opt_in_slow_period = 3 # MA of tmp by 3 periods.
457
+ @testee.param_opt_in_signal_period = 1 # MA of MACD by 1 period. (Signal=MACD)
458
+ [ :param_opt_in_fast_ma_type=,
459
+ :param_opt_in_slow_ma_type=,
460
+ :param_opt_in_signal_ma_type=, ].each {|param|
461
+ @testee.send( param, TaLib::TA_MAType_EMA )
462
+ }
463
+
464
+ #
465
+ output_size = tmp.size
466
+
467
+ #
468
+ @testee.param_out_macd = Array.new( output_size )
469
+ @testee.param_out_macd_signal = Array.new( output_size )
470
+ @testee.param_out_macd_hist = Array.new( output_size )
471
+
472
+ #
473
+ tmp = [nil, nil, nil, nil, nil, nil, nil]
474
+ assert_equal( tmp, @testee.param_out_macd )
475
+
476
+ #
477
+ run_start_idx = 0
478
+ run_end_idx = 6
479
+
480
+ ret_call = nil
481
+ assert_nothing_raised{
482
+ ret_call = @testee.call(run_start_idx, run_end_idx) }
483
+
484
+ # start_idx, num_elements.
485
+ assert_equal( { :param_out_macd=>
486
+ [0.5, 0.5, 0.5, -0.5, -0.5, nil, nil],
487
+ :param_out_macd_signal=>
488
+ [0.5, 0.5, 0.5, -0.5, -0.5, nil, nil],
489
+ :param_out_macd_hist=>
490
+ [0.0, 0.0, 0.0, 0.0, 0.0, nil, nil],
491
+ :start_idx => 2,
492
+ :num_elements => 5, }, ret_call )
493
+
494
+ #
495
+ assert_equal( [0.5, 0.5, 0.5, -0.5, -0.5],
496
+ @testee.param_out_macd[ 0..(ret_call[:num_elements]-1)] )
497
+ assert_equal( [0.5, 0.5, 0.5, -0.5, -0.5],
498
+ @testee.param_out_macd_signal[ 0..(ret_call[:num_elements]-1)] )
499
+ assert_equal( [0.0, 0.0, 0.0, 0.0, 0.0 ],
500
+ @testee.param_out_macd_hist[ 0..(ret_call[:num_elements]-1)] )
501
+
502
+ end
503
+
504
+
505
+ end