新規記事の投稿を行うことで、非表示にすることが可能です。
2015年05月02日
Quantitative Trading: How to Build Your Own Algorithmic Trading Business 1
MATLABを用いたAlgorithmic Tradingについて解説されている本はいくつかあるようだが、これが読みやすそう。
"Quantitative Trading: How to Build Your Own Algorithmic Trading Business"は2008年出版なのでちょっと古いが、内容は以下のようで、トレードをビジネスとしてとらえる考え方に惹かれる。MATLABを使ったBacktestの仕方も解説されているようなので、内容には期待している。この連休中に一気に読んでしまおう。
Chapter 2 Finding a viable trading strategy
Chapter 3 Backtesting the strategy
Chapter 4 Setting up the business and technological infrastructure
Chapter 5 Building an automated trading system
Chapter 6 Managing the money and risk
Chapter 7 Advanced concepts
Chapter 8 Conclusion
著者のブログ
http://epchan.blogspot.jp/
"Quantitative Trading: How to Build Your Own Algorithmic Trading Business"は2008年出版なのでちょっと古いが、内容は以下のようで、トレードをビジネスとしてとらえる考え方に惹かれる。MATLABを使ったBacktestの仕方も解説されているようなので、内容には期待している。この連休中に一気に読んでしまおう。
Chapter 2 Finding a viable trading strategy
Chapter 3 Backtesting the strategy
Chapter 4 Setting up the business and technological infrastructure
Chapter 5 Building an automated trading system
Chapter 6 Managing the money and risk
Chapter 7 Advanced concepts
Chapter 8 Conclusion
著者のブログ
http://epchan.blogspot.jp/
2015年05月01日
COURSERAのクラス進捗
COURSERAのコース”Introduction to Programming with MATLAB”がWeek5まで完了!なかなかMATLABが分かってきたかも?残りのWeek6-8でLoopとDatatypeとFileIOを学ぶことになっている。だんだんと宿題が難しくなってきている。十分な時間を使って考えないと簡単には正解にたどり着けない。
宿題の問題の文章が長い!しかもわかりづらい。以下Week5の宿題の1つの問題だが、読んでもなかなか頭に入ってこない。なぜこんな持って回ったような書き方をしているのか…
Consider the definition: function [s1, s2, sums] = sines(pts,amp,f1,f2). The input, pts, is an integer, but amp, f1, and f2 and are not necessarily integers. Output argument s1 is a row vector whose length (number of elements) equals pts. The elements of s1 are the values of the sine function when it is given equally spaced arguments that start at zero and extend through f1 periods of the sine. (Note that we ask for full periods, so if f1 is an integer, both the first and the last element of s1 will be 0 other than a very small rounding error.) The amplitude of the sine wave equals amp. The vector s2 is the same as s1 except that s2 contains f2 periods. The vector sums is the sum of s1 and s2. If f2 is omitted, then it should be set to a value that is 5% greater than f1. If f1 is omitted also, then it should be set to 100. If amp is not provided, then it should default to 1. Finally, if pts is omitted as well, then it should be set to 1000. For example, if you run sines without any input arguments and then you plot the third output argument, sums, the figure should look like this (if you stretch the plot window horizontally):
ただCOURSERAのシステムはよく出来て、Discussion Forumsからいろいろなヒントが見つけられる。いろいろな国籍の人がコメントをしていて面白い。どうしようもないコメントから、きらりと光るコメントまで、ほんと様々。
宿題の問題で指示されている関数を全て作成して、採点機能のあるスクリプトを実行すると自動的に得点が出力されるようになっている。これがゲーム性があり、思わず夢中になってしまう。
ほんとに良く出来ているシステムだ…これで無料だから驚いてしまう。
Homework 5 Grader
Type the number of the problem that you would like to check
or choose the last option to check all problems and compute
a score and a submission code. (Nothing is submitted.)
0. EXIT
1. generationXYZ
2. letter_grade
3. sort3
4. classify
5. older
6. movies
7. sines
8. moving_average
9. ALL PROBLEMS (gives score and submission code)
Your selection: 9
Grading all problems ...
Problem 1 (generationXYZ):
Feedback: Your function performed correctly for argument(s) 1965
Feedback: Your function performed correctly for argument(s) 1966
Feedback: Your function performed correctly for argument(s) 1975
Feedback: Your function performed correctly for argument(s) 1980
Feedback: Your function performed correctly for argument(s) 1981
Feedback: Your function performed correctly for argument(s) 1990
Feedback: Your function performed correctly for argument(s) 1999
Feedback: Your function performed correctly for argument(s) 2000
Feedback: Your function performed correctly for argument(s) 2005
Feedback: Your function performed correctly for argument(s) 2008
Feedback: Your function performed correctly for argument(s) 2012
Feedback: Your function performed correctly for argument(s) 2013
Feedback: Your function performed correctly for argument(s) 2009
Feedback: Your function performed correctly for argument(s) 1993
Feedback: Your function performed correctly for argument(s) 1983
Your solution is correct.
Problem 2 (letter_grade):
Feedback: Your function performed correctly for argument(s) 95
Feedback: Your function performed correctly for argument(s) 91
Feedback: Your function performed correctly for argument(s) 90
Feedback: Your function performed correctly for argument(s) 82
Feedback: Your function performed correctly for argument(s) 81
Feedback: Your function performed correctly for argument(s) 75
Feedback: Your function performed correctly for argument(s) 71
Feedback: Your function performed correctly for argument(s) 70
Feedback: Your function performed correctly for argument(s) 69
Feedback: Your function performed correctly for argument(s) 61
Feedback: Your function performed correctly for argument(s) 60
Feedback: Your function performed correctly for argument(s) 100
Your solution is correct.
Problem 3 (sort3):
Feedback: Your function performed correctly for argument(s) 1, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 1, 2
Feedback: Your function performed correctly for argument(s) 1, 2, 1
Feedback: Your function performed correctly for argument(s) 2, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 2, 3
Feedback: Your function performed correctly for argument(s) 1, 3, 2
Feedback: Your function performed correctly for argument(s) 3, 2, 1
Feedback: Your function performed correctly for argument(s) 3, 1, 2
Feedback: Your function performed correctly for argument(s) 2, 1, 3
Feedback: Your function performed correctly for argument(s) 2, 3, 1
Feedback: Your function performed correctly for argument(s) 5, 1, 9
Feedback: Your function performed correctly for argument(s) -0.689309992672154, -0.262809605838835, 0.17447421737566
Feedback: Your function performed correctly for argument(s) 0.158583018376615, -0.755175650656217, 0.551261328213263
Your solution is correct.
Problem 4 (classify):
Feedback: Your function performed correctly for argument(s) []
Feedback: Your function performed correctly for argument(s) zeros(1,0)
Feedback: Your function performed correctly for argument(s) zeros(0,4)
Feedback: Your function performed correctly for argument(s) 3.14159265358979
Feedback: Your function performed correctly for argument(s) [1 2 3]
Feedback: Your function performed correctly for argument(s) [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20]
Feedback: Your function performed correctly for argument(s) [1 0 1 1 0;1 1 1 1 0;1 0 0 0 0;1 1 1 1 1;0 1 0 1 1]
Your solution is correct.
Problem 5 (older):
Feedback: Your function performed correctly for argument(s) 1997, 5, 23, 1997, 5, 23
Feedback: Your function performed correctly for argument(s) 1998, 5, 24, 1998, 5, 23
Feedback: Your function performed correctly for argument(s) 1998, 5, 23, 1997, 5, 23
Feedback: Your function performed correctly for argument(s) 1998, 5, 23, 1998, 4, 23
Feedback: Your function performed correctly for argument(s) 2000, 1, 1, 1999, 12, 31
Feedback: Your function performed correctly for argument(s) 2001, 1, 31, 2001, 2, 1
Feedback: Your function performed correctly for argument(s) 1997, 12, 24, 1998, 12, 24
Feedback: Your function performed correctly for argument(s) 1998, 12, 24, 1998, 11, 24
Feedback: Your function performed correctly for argument(s) 1997, 2, 24, 1997, 10, 24
Feedback: Your function performed correctly for argument(s) 1, 1, 1, 1, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 1, 1, 1, 1, 2
Feedback: Your function performed correctly for argument(s) 1, 1, 2, 1, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 1, 31, 1, 2, 1
Feedback: Your function performed correctly for argument(s) 1, 12, 31, 2, 1, 1
Feedback: Your function performed correctly for argument(s) 12, 12, 12, 12, 12, 13
Feedback: Your function performed correctly for argument(s) 1957, 9, 6, 1965, 2, 15
Feedback: Your function performed correctly for argument(s) 1972, 10, 8, 1965, 10, 5
Feedback: Your function performed correctly for argument(s) 1976, 4, 5, 1950, 2, 9
Feedback: Your function performed correctly for argument(s) 1962, 6, 25, 1990, 8, 8
Your solution is correct.
Problem 6 (movies):
Feedback: Your function performed correctly for argument(s) 1, 30, 120, 3, 45, 90
Feedback: Your function performed correctly for argument(s) 1, 30, 120, 3, 0, 90
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 2, 30, 60
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 2, 25, 60
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 2, 55, 75
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 3, 0, 75
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 3, 1, 75
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 5, 120
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 10, 120
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 40, 120
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 41, 120
Feedback: Your function performed correctly for argument(s) 1, 30, 120, 4, 30, 120
Feedback: Your function performed correctly for argument(s) 1, 28, 42, 9, 57, 130
Feedback: Your function performed correctly for argument(s) 11, 4, 73, 8, 40, 55
Feedback: Your function performed correctly for argument(s) 8, 42, 60, 10, 55, 95
Feedback: Your function performed correctly for argument(s) 3, 15, 135, 9, 1, 125
Feedback: Your function performed correctly for argument(s) 4, 41, 105, 1, 4, 30
Feedback: Your function performed correctly for argument(s) 7, 20, 141, 11, 44, 110
Your solution is correct.
Problem 7 (sines):
Feedback: Your function performed correctly for argument(s) 100, 1, 100, 101
Feedback: Your function performed correctly for argument(s) 500, 0.5, 50, 60
Feedback: Your function performed correctly for argument(s) 1000, 5, 150, 148
Feedback: Your function performed correctly for argument(s) 1000, 2, 120
Feedback: Your function performed correctly for argument(s) 1024, 1
Feedback: Your function performed correctly for argument(s) 2048
Feedback: Your function performed correctly for argument(s)
Your solution is correct.
Problem 8 (moving_average):
Feedback: Your function performed correctly for argument 65
Feedback: Your function performed correctly when values 1 - 50 were passed consecutively
Feedback: Your function performed correctly when 3109 consecutive values of a noisy sine wave were passed to it
Your solution is correct.
Score: 100
そして人工知能?関係のクラスが始まる。これも期待している!
”Computational Neuroscience”
この連休中に落としたR関係のクラスをもう一度総復習して、今度はしっかり修了させよう。
宿題の問題の文章が長い!しかもわかりづらい。以下Week5の宿題の1つの問題だが、読んでもなかなか頭に入ってこない。なぜこんな持って回ったような書き方をしているのか…
Consider the definition: function [s1, s2, sums] = sines(pts,amp,f1,f2). The input, pts, is an integer, but amp, f1, and f2 and are not necessarily integers. Output argument s1 is a row vector whose length (number of elements) equals pts. The elements of s1 are the values of the sine function when it is given equally spaced arguments that start at zero and extend through f1 periods of the sine. (Note that we ask for full periods, so if f1 is an integer, both the first and the last element of s1 will be 0 other than a very small rounding error.) The amplitude of the sine wave equals amp. The vector s2 is the same as s1 except that s2 contains f2 periods. The vector sums is the sum of s1 and s2. If f2 is omitted, then it should be set to a value that is 5% greater than f1. If f1 is omitted also, then it should be set to 100. If amp is not provided, then it should default to 1. Finally, if pts is omitted as well, then it should be set to 1000. For example, if you run sines without any input arguments and then you plot the third output argument, sums, the figure should look like this (if you stretch the plot window horizontally):
ただCOURSERAのシステムはよく出来て、Discussion Forumsからいろいろなヒントが見つけられる。いろいろな国籍の人がコメントをしていて面白い。どうしようもないコメントから、きらりと光るコメントまで、ほんと様々。
宿題の問題で指示されている関数を全て作成して、採点機能のあるスクリプトを実行すると自動的に得点が出力されるようになっている。これがゲーム性があり、思わず夢中になってしまう。
ほんとに良く出来ているシステムだ…これで無料だから驚いてしまう。
Homework 5 Grader
Type the number of the problem that you would like to check
or choose the last option to check all problems and compute
a score and a submission code. (Nothing is submitted.)
0. EXIT
1. generationXYZ
2. letter_grade
3. sort3
4. classify
5. older
6. movies
7. sines
8. moving_average
9. ALL PROBLEMS (gives score and submission code)
Your selection: 9
Grading all problems ...
Problem 1 (generationXYZ):
Feedback: Your function performed correctly for argument(s) 1965
Feedback: Your function performed correctly for argument(s) 1966
Feedback: Your function performed correctly for argument(s) 1975
Feedback: Your function performed correctly for argument(s) 1980
Feedback: Your function performed correctly for argument(s) 1981
Feedback: Your function performed correctly for argument(s) 1990
Feedback: Your function performed correctly for argument(s) 1999
Feedback: Your function performed correctly for argument(s) 2000
Feedback: Your function performed correctly for argument(s) 2005
Feedback: Your function performed correctly for argument(s) 2008
Feedback: Your function performed correctly for argument(s) 2012
Feedback: Your function performed correctly for argument(s) 2013
Feedback: Your function performed correctly for argument(s) 2009
Feedback: Your function performed correctly for argument(s) 1993
Feedback: Your function performed correctly for argument(s) 1983
Your solution is correct.
Problem 2 (letter_grade):
Feedback: Your function performed correctly for argument(s) 95
Feedback: Your function performed correctly for argument(s) 91
Feedback: Your function performed correctly for argument(s) 90
Feedback: Your function performed correctly for argument(s) 82
Feedback: Your function performed correctly for argument(s) 81
Feedback: Your function performed correctly for argument(s) 75
Feedback: Your function performed correctly for argument(s) 71
Feedback: Your function performed correctly for argument(s) 70
Feedback: Your function performed correctly for argument(s) 69
Feedback: Your function performed correctly for argument(s) 61
Feedback: Your function performed correctly for argument(s) 60
Feedback: Your function performed correctly for argument(s) 100
Your solution is correct.
Problem 3 (sort3):
Feedback: Your function performed correctly for argument(s) 1, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 1, 2
Feedback: Your function performed correctly for argument(s) 1, 2, 1
Feedback: Your function performed correctly for argument(s) 2, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 2, 3
Feedback: Your function performed correctly for argument(s) 1, 3, 2
Feedback: Your function performed correctly for argument(s) 3, 2, 1
Feedback: Your function performed correctly for argument(s) 3, 1, 2
Feedback: Your function performed correctly for argument(s) 2, 1, 3
Feedback: Your function performed correctly for argument(s) 2, 3, 1
Feedback: Your function performed correctly for argument(s) 5, 1, 9
Feedback: Your function performed correctly for argument(s) -0.689309992672154, -0.262809605838835, 0.17447421737566
Feedback: Your function performed correctly for argument(s) 0.158583018376615, -0.755175650656217, 0.551261328213263
Your solution is correct.
Problem 4 (classify):
Feedback: Your function performed correctly for argument(s) []
Feedback: Your function performed correctly for argument(s) zeros(1,0)
Feedback: Your function performed correctly for argument(s) zeros(0,4)
Feedback: Your function performed correctly for argument(s) 3.14159265358979
Feedback: Your function performed correctly for argument(s) [1 2 3]
Feedback: Your function performed correctly for argument(s) [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20]
Feedback: Your function performed correctly for argument(s) [1 0 1 1 0;1 1 1 1 0;1 0 0 0 0;1 1 1 1 1;0 1 0 1 1]
Your solution is correct.
Problem 5 (older):
Feedback: Your function performed correctly for argument(s) 1997, 5, 23, 1997, 5, 23
Feedback: Your function performed correctly for argument(s) 1998, 5, 24, 1998, 5, 23
Feedback: Your function performed correctly for argument(s) 1998, 5, 23, 1997, 5, 23
Feedback: Your function performed correctly for argument(s) 1998, 5, 23, 1998, 4, 23
Feedback: Your function performed correctly for argument(s) 2000, 1, 1, 1999, 12, 31
Feedback: Your function performed correctly for argument(s) 2001, 1, 31, 2001, 2, 1
Feedback: Your function performed correctly for argument(s) 1997, 12, 24, 1998, 12, 24
Feedback: Your function performed correctly for argument(s) 1998, 12, 24, 1998, 11, 24
Feedback: Your function performed correctly for argument(s) 1997, 2, 24, 1997, 10, 24
Feedback: Your function performed correctly for argument(s) 1, 1, 1, 1, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 1, 1, 1, 1, 2
Feedback: Your function performed correctly for argument(s) 1, 1, 2, 1, 1, 1
Feedback: Your function performed correctly for argument(s) 1, 1, 31, 1, 2, 1
Feedback: Your function performed correctly for argument(s) 1, 12, 31, 2, 1, 1
Feedback: Your function performed correctly for argument(s) 12, 12, 12, 12, 12, 13
Feedback: Your function performed correctly for argument(s) 1957, 9, 6, 1965, 2, 15
Feedback: Your function performed correctly for argument(s) 1972, 10, 8, 1965, 10, 5
Feedback: Your function performed correctly for argument(s) 1976, 4, 5, 1950, 2, 9
Feedback: Your function performed correctly for argument(s) 1962, 6, 25, 1990, 8, 8
Your solution is correct.
Problem 6 (movies):
Feedback: Your function performed correctly for argument(s) 1, 30, 120, 3, 45, 90
Feedback: Your function performed correctly for argument(s) 1, 30, 120, 3, 0, 90
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 2, 30, 60
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 2, 25, 60
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 2, 55, 75
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 3, 0, 75
Feedback: Your function performed correctly for argument(s) 1, 0, 90, 3, 1, 75
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 5, 120
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 10, 120
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 40, 120
Feedback: Your function performed correctly for argument(s) 10, 10, 60, 11, 41, 120
Feedback: Your function performed correctly for argument(s) 1, 30, 120, 4, 30, 120
Feedback: Your function performed correctly for argument(s) 1, 28, 42, 9, 57, 130
Feedback: Your function performed correctly for argument(s) 11, 4, 73, 8, 40, 55
Feedback: Your function performed correctly for argument(s) 8, 42, 60, 10, 55, 95
Feedback: Your function performed correctly for argument(s) 3, 15, 135, 9, 1, 125
Feedback: Your function performed correctly for argument(s) 4, 41, 105, 1, 4, 30
Feedback: Your function performed correctly for argument(s) 7, 20, 141, 11, 44, 110
Your solution is correct.
Problem 7 (sines):
Feedback: Your function performed correctly for argument(s) 100, 1, 100, 101
Feedback: Your function performed correctly for argument(s) 500, 0.5, 50, 60
Feedback: Your function performed correctly for argument(s) 1000, 5, 150, 148
Feedback: Your function performed correctly for argument(s) 1000, 2, 120
Feedback: Your function performed correctly for argument(s) 1024, 1
Feedback: Your function performed correctly for argument(s) 2048
Feedback: Your function performed correctly for argument(s)
Your solution is correct.
Problem 8 (moving_average):
Feedback: Your function performed correctly for argument 65
Feedback: Your function performed correctly when values 1 - 50 were passed consecutively
Feedback: Your function performed correctly when 3109 consecutive values of a noisy sine wave were passed to it
Your solution is correct.
Score: 100
そして人工知能?関係のクラスが始まる。これも期待している!
”Computational Neuroscience”
この連休中に落としたR関係のクラスをもう一度総復習して、今度はしっかり修了させよう。
Rubyではじめるシステムトレード4
「Rubyではじめるシステムトレード」の勉強を再開している。データー取得方法はいろいろありそうなので、先にシミュレーションのスクリプトの方の解析を進める。テストはLinuxのVPS上で行う。とにかく正常に動かせるところをまずは目指す。
本に書いてあるとおり、スクリプト"trade_check.rb"の動作チェックを行う。実行すると以下のように出力される。
$ ruby ./check/trade_check.rb
8604
2011/11/14
251
true
false
false
241
241
10
1
2
true
2011/11/15
400
1.593625498007968
0.4
これは正常に動いていることを確認。
次はスクリプト"array_check.rb"の動作チェック。コマンドラインから打ち込んでみると、
$ ruby ./check/array_check.rb
1127
112.7
[nil, nil, nil, 105.75, 109.75, 116.25, 118.75, 119.75, 119.5, 116.25]
[nil, nil, 111, 115, 116, 123, 123, 123, 121, 119]
[nil, nil, 97, 97, 111, 115, 116, 119, 115, 110]
[nil, nil, 104.0, 106.0, 113.5, 119.0, 119.5, 121.0, 118.0, 114.5]
[nil, -3, 14, 4, 1, 7, -2, -2, -4, -5]
[nil, nil, nil, 5.0, 6.333333333333333, 4.0, 2.0, 1.0, -2.6666666666666665, -3.6666666666666665]
[nil, nil, nil, 105.75, 109.85, 115.11, 117.466, 118.0796, 116.84776, 114.108656]
となりこれも正常に動いている。
次はIndicator関係のクラスの動作チェック。スクリプト"indicator_check.rb"を実行してみると、
$ ruby ./check/indicator_check.rb
nil
nil
3
5
8
4
3
5
3
5
8
4
[nil, nil, 3]
[3, 5, 8]
と出力され、これも問題なさそう。
続けてTickモジュールの動作チェック用スクリプト"tick_check.rb"を実行してみると、
$ ruby ./check/tick_check.rb
1
1
1
5
5
10
10
50
99
3000
3005
100
3005
3010
100
99
3005
3000
101
103
3000
3005
3005
99
97
3000
2999
2999
2999
と出力され、これも問題なし。
さらに売買ルールに関するスクリプト"rule_check.rb"の動作チェック。
$ ruby ./check/rule_check.rb
#
nil
nil
#
100
105
100
95
95
105
:long_only
:short_only
:no_entry
:long_and_short
となり、これも問題なし。
さらに売買ルールのスクリプト"estrangement_entry_check.rb"も実行してみると、
$ ruby ./check/estrangement_entry_check.rb
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from ./check/estrangement_entry_check.rb:7:in `'
エラーがでる。これはおかしいようだ。
そしてシステムトレード用クラスの動作チェックスクリプト"trading_system_check.rb"を実行してみると、
$ ruby ./check/trading_system_check.rb
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from ./check/trading_system_check.rb:19:in `simulate'
from ./check/trading_system_check.rb:46:in `'
同じエラーがでる。
結果を出力するためのクラスの動作チェックスクリプト"record_check.rb"を実行してみると、
$ ruby ./check/recorder_check.rb
�L�^�t�H���_ result/test ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from ./check/recorder_check.rb:18:in `simulate'
from ./check/recorder_check.rb:49:in `block in'
from ./check/recorder_check.rb:48:in `map'
from ./check/recorder_check.rb:48:in `'
何やら文字化けをするようだが、同じエラーが出力される。
そして最後にシミュレーションの動作チェックスクリプト"simulation_check.rb"を実行すると、
$ ruby ./check/simulation_check.rb
�L�^�t�H���_ result/estrangement/test_simulation ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from /system_trading/tradeSimulation_ruby/lib/simulation.rb:24:in `simulate_a_stock'
from ./check/simulation_check.rb:25:in `'
同じエラーが出て終了。
とりあえず問題はtext_to_stock.rbにあり、エラーは”`[]': no implicit conversion from nil to integer ”ということだ。
課題をまとめると、
[課題]
おいおい調べていこう。
本に書いてあるとおり、スクリプト"trade_check.rb"の動作チェックを行う。実行すると以下のように出力される。
$ ruby ./check/trade_check.rb
8604
2011/11/14
251
true
false
false
241
241
10
1
2
true
2011/11/15
400
1.593625498007968
0.4
これは正常に動いていることを確認。
次はスクリプト"array_check.rb"の動作チェック。コマンドラインから打ち込んでみると、
$ ruby ./check/array_check.rb
1127
112.7
[nil, nil, nil, 105.75, 109.75, 116.25, 118.75, 119.75, 119.5, 116.25]
[nil, nil, 111, 115, 116, 123, 123, 123, 121, 119]
[nil, nil, 97, 97, 111, 115, 116, 119, 115, 110]
[nil, nil, 104.0, 106.0, 113.5, 119.0, 119.5, 121.0, 118.0, 114.5]
[nil, -3, 14, 4, 1, 7, -2, -2, -4, -5]
[nil, nil, nil, 5.0, 6.333333333333333, 4.0, 2.0, 1.0, -2.6666666666666665, -3.6666666666666665]
[nil, nil, nil, 105.75, 109.85, 115.11, 117.466, 118.0796, 116.84776, 114.108656]
となりこれも正常に動いている。
次はIndicator関係のクラスの動作チェック。スクリプト"indicator_check.rb"を実行してみると、
$ ruby ./check/indicator_check.rb
nil
nil
3
5
8
4
3
5
3
5
8
4
[nil, nil, 3]
[3, 5, 8]
と出力され、これも問題なさそう。
続けてTickモジュールの動作チェック用スクリプト"tick_check.rb"を実行してみると、
$ ruby ./check/tick_check.rb
1
1
1
5
5
10
10
50
99
3000
3005
100
3005
3010
100
99
3005
3000
101
103
3000
3005
3005
99
97
3000
2999
2999
2999
と出力され、これも問題なし。
さらに売買ルールに関するスクリプト"rule_check.rb"の動作チェック。
$ ruby ./check/rule_check.rb
#
nil
nil
#
100
105
100
95
95
105
:long_only
:short_only
:no_entry
:long_and_short
となり、これも問題なし。
さらに売買ルールのスクリプト"estrangement_entry_check.rb"も実行してみると、
$ ruby ./check/estrangement_entry_check.rb
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from ./check/estrangement_entry_check.rb:7:in `
エラーがでる。これはおかしいようだ。
そしてシステムトレード用クラスの動作チェックスクリプト"trading_system_check.rb"を実行してみると、
$ ruby ./check/trading_system_check.rb
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from ./check/trading_system_check.rb:19:in `simulate'
from ./check/trading_system_check.rb:46:in `
同じエラーがでる。
結果を出力するためのクラスの動作チェックスクリプト"record_check.rb"を実行してみると、
$ ruby ./check/recorder_check.rb
�L�^�t�H���_ result/test ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from ./check/recorder_check.rb:18:in `simulate'
from ./check/recorder_check.rb:49:in `block in
from ./check/recorder_check.rb:48:in `map'
from ./check/recorder_check.rb:48:in `
何やら文字化けをするようだが、同じエラーが出力される。
そして最後にシミュレーションの動作チェックスクリプト"simulation_check.rb"を実行すると、
$ ruby ./check/simulation_check.rb
�L�^�t�H���_ result/estrangement/test_simulation ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
/system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:41:in `market'
from /system_trading/tradeSimulation_ruby/lib/text_to_stock.rb:22:in `generate_stock'
from /system_trading/tradeSimulation_ruby/lib/simulation.rb:24:in `simulate_a_stock'
from ./check/simulation_check.rb:25:in `
同じエラーが出て終了。
とりあえず問題はtext_to_stock.rbにあり、エラーは”`[]': no implicit conversion from nil to integer ”ということだ。
課題をまとめると、
[課題]
- open_http': 999 Unable to process request at this time -- error 999 (OpenURI::HTTPError)の原因
- /lib/text_to_stock.rb:41:in `[]': no implicit conversion from nil to integer (TypeError)の原因
おいおい調べていこう。
2015年04月30日
MATLABのクラス
COURSERAで取っているMATLABのクラスが、入門レベルの私には非常に分かりやすい。
「Introduction to Programming with MATLAB」
この先生の話し方が、癒し系で授業を聞いているのが楽しい。Week4まですべてビデオの視聴を終了した。今はプログラミングの宿題に挑戦中。問題はこのような感じ。
Write a function called quadrants that takes as its input argument a scalar integer named n. The
function returns Q, a 2n-by-2n matrix. Q consists of four n-by-n submatrices. The elements of the
submatrix in the top left corner are all 1s, the elements of the submatrix at the top right are 2s, the
elements in the bottom left are 3s, and the elements in the bottom right are 4s.
コードを書いて、チェック用のスクリプトを実行するとコードのチェックが行われる。
Homework 4 Grader
Type the number of the problem that you would like to check
or choose the last option to check all problems and compute
a score and a submission code. (Nothing is submitted.)
0. EXIT
1. quadrants
2. checkerboard
3. randomness
4. mtable
5. identity
6. ALL PROBLEMS (get homework score)
Your selection: 1
NOTE: the grader will only determine if your
solution for Problem 1 is correct or not.
No score will be given.
Problem 1 (quadrants):
Feedback: Your function performed correctly for argument(s) 1
Feedback: Your function performed correctly for argument(s) 5
Feedback: Your function performed correctly for argument(s) 10
Feedback: Your function performed correctly for argument(s) 18
Your solution is correct.
なかなか良い。このクラスは楽しいので、ゴールデンウィーク中に終わらせてしまおう。
R関係で落としたクラスを今の内に復習しておいて、来週始まったところで一気に進めてしまうつもり。
「Introduction to Programming with MATLAB」
この先生の話し方が、癒し系で授業を聞いているのが楽しい。Week4まですべてビデオの視聴を終了した。今はプログラミングの宿題に挑戦中。問題はこのような感じ。
Write a function called quadrants that takes as its input argument a scalar integer named n. The
function returns Q, a 2n-by-2n matrix. Q consists of four n-by-n submatrices. The elements of the
submatrix in the top left corner are all 1s, the elements of the submatrix at the top right are 2s, the
elements in the bottom left are 3s, and the elements in the bottom right are 4s.
コードを書いて、チェック用のスクリプトを実行するとコードのチェックが行われる。
Homework 4 Grader
Type the number of the problem that you would like to check
or choose the last option to check all problems and compute
a score and a submission code. (Nothing is submitted.)
0. EXIT
1. quadrants
2. checkerboard
3. randomness
4. mtable
5. identity
6. ALL PROBLEMS (get homework score)
Your selection: 1
NOTE: the grader will only determine if your
solution for Problem 1 is correct or not.
No score will be given.
Problem 1 (quadrants):
Feedback: Your function performed correctly for argument(s) 1
Feedback: Your function performed correctly for argument(s) 5
Feedback: Your function performed correctly for argument(s) 10
Feedback: Your function performed correctly for argument(s) 18
Your solution is correct.
なかなか良い。このクラスは楽しいので、ゴールデンウィーク中に終わらせてしまおう。
R関係で落としたクラスを今の内に復習しておいて、来週始まったところで一気に進めてしまうつもり。
Scientific Linux のVirtualBoxへのインストール
Scientific LinuxをVirtual Boxにインストールした。特に明確な目的があるわけではないが、これからの開発でいろいろなツールをテストするための環境を一応用意しておく。
パソコンは少し古く、ホストOSはWindows7で32bitのマシンである。Version7は64bit版のみしかなさそうなので、諦めてVersion6をインストールすることにした。
本家のサイトから最小構成のファイル?、SL-6-i386-2014-11-05-netinstall.isoをダウンロードし、インストールメディアを入手。
まずはVirtualBoxの設定から。VirtualBoxマネージャーから新規にガイドに従ってVirtual環境を構築する。
”新規”から仮想マシンを設定していく。
"次へ”進み、OSタイプはLinux/Redhatと設定する。
メモリは少なすぎると問題がありそうなので、1GBに設定しておく。
ハードディスクは”新規ハードディスク”を作成していく。
ハードディスクの設定が始まるので、ガイドに従って行う。
ストレージのタイプは”可変サイズ”とし、
サイズは40GB程度にしておく。
設定のまとめが出力されるのでこれを確認。
VirtualBoxの”設定”から”ストレージ”を選び、ダウンロードしたインストールメディアを選択する。
これで仮想マシンの設定が終わったので、OSのインストールを始める。さっそく”起動”!何年ぶりかのLinuxのインストール作業…”Install or upgrade an existing system"からインストーラーを起動させていく。
メディアのテストは”Skip”する。
言語はEnglishにしておく。
キーボードはパソコンのキーボードに合わせて、"jp106"とする。
インストールはネットから行うので、”URL"を選択。
TCPIPの設定はデフォルトのままにしておく。
URLは http://ftp.jaist.ac.jp/pub/Linux/scientific/6x/i386/os/ と設定する。
いよいよインストールの開始!
"Basic Storage Devices"を選択。
警告が出るが問題無く、"Yes discard any data"を選択。
今は特にホストネームは設定せずデフォルトのままにしておく。
タイムゾーンはAsia/Tokyoを選択。
続いてrootのパスワードを設定。
インストールは”Use All Space"を選択。
パーティション設定に伴いデータが消失するという警告だが、問題がないので"Write changes to disk"を選択。
インストールタイプは後からパッケージをインストールすればいいので、ここでは”Desktop"とする。
しばらく待つ…
無事インストール完了。
VirtualBoxの”設定”でストレージから、読み込んでいたメディアを消去しておく。
そして”起動”させてみると、
無事にScientific Linuxが起動。
パソコンは少し古く、ホストOSはWindows7で32bitのマシンである。Version7は64bit版のみしかなさそうなので、諦めてVersion6をインストールすることにした。
本家のサイトから最小構成のファイル?、SL-6-i386-2014-11-05-netinstall.isoをダウンロードし、インストールメディアを入手。
まずはVirtualBoxの設定から。VirtualBoxマネージャーから新規にガイドに従ってVirtual環境を構築する。
”新規”から仮想マシンを設定していく。
"次へ”進み、OSタイプはLinux/Redhatと設定する。
メモリは少なすぎると問題がありそうなので、1GBに設定しておく。
ハードディスクは”新規ハードディスク”を作成していく。
ハードディスクの設定が始まるので、ガイドに従って行う。
ストレージのタイプは”可変サイズ”とし、
サイズは40GB程度にしておく。
設定のまとめが出力されるのでこれを確認。
VirtualBoxの”設定”から”ストレージ”を選び、ダウンロードしたインストールメディアを選択する。
これで仮想マシンの設定が終わったので、OSのインストールを始める。さっそく”起動”!何年ぶりかのLinuxのインストール作業…”Install or upgrade an existing system"からインストーラーを起動させていく。
メディアのテストは”Skip”する。
言語はEnglishにしておく。
キーボードはパソコンのキーボードに合わせて、"jp106"とする。
インストールはネットから行うので、”URL"を選択。
TCPIPの設定はデフォルトのままにしておく。
URLは http://ftp.jaist.ac.jp/pub/Linux/scientific/6x/i386/os/ と設定する。
いよいよインストールの開始!
"Basic Storage Devices"を選択。
警告が出るが問題無く、"Yes discard any data"を選択。
今は特にホストネームは設定せずデフォルトのままにしておく。
タイムゾーンはAsia/Tokyoを選択。
続いてrootのパスワードを設定。
インストールは”Use All Space"を選択。
パーティション設定に伴いデータが消失するという警告だが、問題がないので"Write changes to disk"を選択。
インストールタイプは後からパッケージをインストールすればいいので、ここでは”Desktop"とする。
しばらく待つ…
無事インストール完了。
VirtualBoxの”設定”でストレージから、読み込んでいたメディアを消去しておく。
そして”起動”させてみると、
無事にScientific Linuxが起動。
2015年04月29日
Rのクラス苦戦中
COURSERAでRの勉強を兼ねていくつかコースを取っているが、全部落としてしまうことになった…
各コースは4週間の構成になっていて、先週が第3週で順調に進んでいたが、コースプロジェクトの締め切りが週末に集中してしまい間に合わず。消化不良気味だったので良かったのかもしれない。今週は残りのビデオとを見ながらQuizを解いて、来週からもう一度挑戦。
Rに関してはCOURSERAのコースで講師をされているRoger D. Pengの電子書籍を入手し読み終わった。
https://leanpub.com/rprogramming
非常に入門者向けの本。
さらにRubyとMATLABのコースを受けている。
Web Application Architecturesは全部のQuizに解答し、Bitbucketを使ったProgramming Assignmentsを全部提出して無事これは修了のはず!しかしこのコースはシステムトレードとはあまり関係がないか…
MATLABのクラスはすごく基本的な解説がなされていて、非常に良い。順調にQuiz1, 2, 3に解答し、
Lesson 3 Programming Assignmentsまで完了。このコースは期待通りの内容で受講するのが楽しい。なんとか修了させよう。
さらに今週から起業関係のクラスを受けている。
Innovationは商業化に結びつく革新なのだと理解した。非常に興味深い。
これは昼休みを中心にビデオを見て、週末Quizに取り組む感じで進めていくつもり。
各コースは4週間の構成になっていて、先週が第3週で順調に進んでいたが、コースプロジェクトの締め切りが週末に集中してしまい間に合わず。消化不良気味だったので良かったのかもしれない。今週は残りのビデオとを見ながらQuizを解いて、来週からもう一度挑戦。
- Regression Models
- Practical Machine Learning
- Statistical Inference
- Reproducible Research
Rに関してはCOURSERAのコースで講師をされているRoger D. Pengの電子書籍を入手し読み終わった。
https://leanpub.com/rprogramming
非常に入門者向けの本。
さらにRubyとMATLABのコースを受けている。
- Web Application Architectures
- Introduction to Programming with MATLAB
Web Application Architecturesは全部のQuizに解答し、Bitbucketを使ったProgramming Assignmentsを全部提出して無事これは修了のはず!しかしこのコースはシステムトレードとはあまり関係がないか…
MATLABのクラスはすごく基本的な解説がなされていて、非常に良い。順調にQuiz1, 2, 3に解答し、
Lesson 3 Programming Assignmentsまで完了。このコースは期待通りの内容で受講するのが楽しい。なんとか修了させよう。
さらに今週から起業関係のクラスを受けている。
- Developing Innovative Ideas for New Companies: The First Step in Entrepreneurship
Innovationは商業化に結びつく革新なのだと理解した。非常に興味深い。
これは昼休みを中心にビデオを見て、週末Quizに取り組む感じで進めていくつもり。
2015年04月22日
COURSERAでRを勉強中
4月からCOURSERAのクラスで
を取っている。目的はRを勉強することだが、内容が盛りだくさんでかなり大変だ。Reproducible Researchのコースは宿題の提出が間に合わず、落としてしまった…何度でも受けられるので来月もう一度受け直そう。
とにかく宿題を提出しないといけない。時間が無いのでネットでの情報も見ながら宿題を進めている。とりあえず消化不良気味ながらもQuizを解いている。1つずつ理解していくことの方が重要なのかもしれないが…
さらにRubyとMATLABのコースを受けている。
Web Application Architecturesのコースは、RubyそのものというよりはRailsの解説がメインであまり関係ないのだけれど、なんとか修了したい。そしてMATLABのクラスはすごく期待している。
COURSERAのクラスはすごく実用的で面白い!
- Regression Models
- Practical Machine Learning
- Statistical Inference
- Reproducible Research
を取っている。目的はRを勉強することだが、内容が盛りだくさんでかなり大変だ。Reproducible Researchのコースは宿題の提出が間に合わず、落としてしまった…何度でも受けられるので来月もう一度受け直そう。
とにかく宿題を提出しないといけない。時間が無いのでネットでの情報も見ながら宿題を進めている。とりあえず消化不良気味ながらもQuizを解いている。1つずつ理解していくことの方が重要なのかもしれないが…
さらにRubyとMATLABのコースを受けている。
- Web Application Architectures
- Introduction to Programming with MATLAB
Web Application Architecturesのコースは、RubyそのものというよりはRailsの解説がメインであまり関係ないのだけれど、なんとか修了したい。そしてMATLABのクラスはすごく期待している。
COURSERAのクラスはすごく実用的で面白い!
パチンコトレーダー
2015年04月09日
Rubyではじめるシステムトレード3
「Rubyではじめるシステムトレード」で解説されている株価データ取得のスクリプトを実行するとエラーがでる。少し調べるとYahooファイナンスは自動的にデータを取得するソフトでの利用を制限しているようだ。よって対策としては、
[課題]
=> データを小分けして取得する。あるいはRubyの別のGem (sorry_yahoo_financeなど)を使用するか、本で紹介されているPanActiveMarketDatabaseを利用することが考えられそうだ。Linuxベースのシステムにしたいので、Gemを試してみながら、パンローリング社のデーターベースにも興味があるので、Windows上にRubyの環境も構築することにする。
部分的にデータは取得できているので、シミュレーションのスクリプトの方を試していこう。
[課題]
- open_http': 999 Unable to process request at this time -- error 999 (OpenURI::HTTPError)の原因
=> データを小分けして取得する。あるいはRubyの別のGem (sorry_yahoo_financeなど)を使用するか、本で紹介されているPanActiveMarketDatabaseを利用することが考えられそうだ。Linuxベースのシステムにしたいので、Gemを試してみながら、パンローリング社のデーターベースにも興味があるので、Windows上にRubyの環境も構築することにする。
部分的にデータは取得できているので、シミュレーションのスクリプトの方を試していこう。