本書で設定ファイルの為にやられてることは、
instance_evalという機能で、
http://ref.xaio.jp/ruby/classes/object/instance_eval
オブジェクトのプロパティ、つまり内部設定をいじることで、
設定ファイルの内容をテキパキと反映してます。
ハッキリいって狂気の沙汰です。
そもそも、instance_evalってカプセル化の破壊です。
こんなことすんなら、そもそもオブジェクト指向やめろよ。
ほんと気持ち悪い言語ですRuby。思想に節操無い。
こんな機能使わなきゃなんないなら、
オブジェクトのモデリングがそもそもおかしい。
設計の欠陥を考えるべきです。
で、本書の中もかなりトリッキーなことやってますが、
最終的に得られた努力の結晶が、以下。
./setting/estrangement.rb
Simulation.setting “estrangement”, “0.0.0” do
trading_system do
entry EstrangementEntry, span: 20, rate: 5
exit StopOutExit
exit EstrangementExit, span: 20, rate: 3
stop AverageTrueRangeStop, span: 20, ratio: 1
filter MovingAverageDirectionFilter, span: 40
endfrom “2000/01/04”
to “2012/12/28”data_loader TextToStock, data_dir: “data”,
stock_list: “tosho_list.txt”,
market_section: “東証1部”
record_dir “result”
record_every_stock true
end
昨日書いた起動ファイルと比べてください。
悲しくないですか。
マーケットとかfrom-toとか追加するのは簡単なことです。
newとか()とか減ってますが、
そんなことの為にinstance_evalなんてトリッキーなこと必要でしょうか。
Ruleの部分プログラム組む人と設定ファイル書く人、同一人物ですよね。
別の人だったとしても、newとか()とかオマジナイだと思えばいい。
法則性あるから、理解に困ることじゃない。
本書の設定ファイルを巡る内容は無視するべきです。
そして、少しだけSimulationクラス書き換えて、
最低限の記述で起動できるように、リファクタリング。
手段と目的の適切なマッチング、プログラムでも大事なことです。
質問コーナー、お問い合わせは、sanpome.net@gmail.com まで。