それでは、Excelも使って計算しつつ、
各インジケータの実装クラスをテストしてみます。
とりあえず、コードそのままコピペします。
Unitテスト用のモジュール何か利用した方が行儀良いと思われますが、
judgeという関数一つ用意するだけで、ここでは充分です。
実行してみて、全てOKならテスト合格です。
あと、nilが挟まったデータでも問題ないかどうかも確認したのですが、
AverageTrueRangeだけはNilがあるとエラーになります。
引数のパターンは最低限の考慮しました。
ロジックは正常に動作すること、確認しました。
# coding: Windows-31J
require “./lib/base”
require “./lib/stock”
def judge(indicator, expect, msg, r=0)
puts msg
result = indicator.calculate_indicator()
puts result
result = result.map{|item| item.nil? ? nil : item.round(r)} if r>0
if result == expect then
puts “OK!”
else
raise “NG! ” + msg
end
end
dummyS = Stock.new(9999,”T”,1)
dummyS.add_price(“2001-01-01”, 5, 9, 1, 2, 9999)
dummyS.add_price(“2001-01-02”, 5, 8, 4, 5, 9999)
dummyS.add_price(“2001-01-03”, 5, 2, 1, 2, 9999)
dummyS.add_price(“2001-01-04”, 5, 4, 4, 4, 9999)
dummyS.add_price(“2001-01-05”, 5, 5, 5, 1, 9999)
dummyS.add_price(“2001-01-06”, nil, nil,nil, nil, 9999)
dummyS.add_price(“2001-01-07”, 5, 5, 3, 5, 9999)
dummyS.add_price(“2001-01-07”, 5, 2, 1, 1, 9999)
dummyS.add_price(“2001-01-07″, 5, 6, 3, 4, 9999)
judge(
MovingAverage.new(dummyS, :span=>3, :price_at=>:open),
[nil,nil,5.00, 5.00, 5.00, nil, nil, nil, 5.00],
”MovingAverage :span=>3, :price_at=>:open”,
2
)
judge(
MovingAverage.new(dummyS, :span=>3),
[nil,nil,3.00, 3.67, 2.33, nil, nil, nil, 3.33],
”MovingAverage :span=>3″,
2
)
judge(
HighLow.new(dummyS, :span=>3, :price_at=>:close, :high_low=>:high),
[nil,nil,5, 5, 4, nil, nil, nil, 5],
”HighLow :span=>3, :price_at=>:close, :high_low=>:high”
)
judge(
HighLow.new(dummyS, :span=>3, :price_at=>:high, :high_low=>:low),
[nil,nil,2, 2, 2, nil, nil, nil, 2],
”HighLow :span=>3, :price_at=>:high, :high_low=>:low”
)
judge(
HighLow.new(dummyS, :span=>3, :high_low=>:low),
[nil,nil,1, 1, 1, nil, nil, nil, 1],
”HighLow :span=>3, :high_low=>:low”
)
judge(
Estrangement.new(dummyS, :span=>3),
[nil,nil,-33.33, 9.09, -57.14, nil, nil, nil, 20.00],
“Estrangement :span=>3″,
2
)
judge(
MovingAverageDirection.new(dummyS, :span=>3),
[nil,nil,nil, :up, :down, nil, nil, nil, nil],
”MovingAverageDirection :span=>3″
)
#Nilがあるとエラー
dummyS = Stock.new(9999,”T”,1)
dummyS.add_price(“2001-01-01”, 5, 9, 1, 2, 9999)
dummyS.add_price(“2001-01-02”, 5, 8, 4, 5, 9999)
dummyS.add_price(“2001-01-03”, 5, 2, 1, 2, 9999)
dummyS.add_price(“2001-01-04”, 5, 4, 4, 4, 9999)
dummyS.add_price(“2001-01-05”, 5, 5, 5, 1, 9999)
dummyS.add_price(“2001-01-05”, 5, 5, 5, 1, 9999)
dummyS.add_price(“2001-01-07”, 5, 5, 3, 5, 9999)
dummyS.add_price(“2001-01-07”, 5, 2, 1, 1, 9999)
dummyS.add_price(“2001-01-07″, 5, 6, 3, 4, 9999)
judge(
AverageTrueRange.new(dummyS, :span=>3),
[nil, nil, nil, 4.00, 2.33, 2.33, 3.00, 4.00, 4.33],
”AverageTrueRange :span=>3”,
2
)
質問コーナー、お問い合わせは、sanpome.net@gmail.com まで。