2015年05月03日
Rubyではじめるシステムトレード5
書籍”Rubyではじめるシステムトレード”のサンプルスクリプトが動くことを目指している。
問題は以下の2つ
シミュレーションの方を動くようにしたいので、2つ目のエラーを調査。理由がよくわからないのでWindows環境でサンプルコードを実行できるようにした。そしてサンプルコードを実行しても同じエラーがでることがわかった。
エラーの該当箇所に引数indexを表示させるようにし
def market(index)
p index
section = @list_loader.market_sections[index]
動作チェックスクリプトを実行してみる。
$ruby ./check/estrangement_entry_check.rb
確かに”nil”が出力される。つまり関数marketへの引数"index"がnilになっているということのようだ。
indexが定義されている箇所をみると、
def initialize(params)
@data_dir = params[:data_dir] || "data"
@stock_list = params[:stock_list] || raise("<96>Á<95>¿<83><8a><83>X<83>g<82>ð<8e>w<92>è<82>μ<82>Ä<82>-<82>¾<8 2>3<82>¢")
@market_section = params[:market_section]
@list_loader = StockListLoader.new("#{@data_dir}/#{@stock_list}")
p @list_loader
end
この段階でindexがnilになっている。code正しく設定されているようなので、問題があるのは@list_loaderあたりのようだ。@list_loaderを出力してみると、以下のようになり"tosho_list.txt"の内容と同じ。
@stock_list=[["1305", "ETF", "10\n"], ["1306", "ETF", "10\n"], ["1308", "ETF", "100\n"], ["1309", "ETF", "1\n"], ["1310", "ETF", "10\n"], ["1311", "ETF", "10\n"], ["1312", "ETF", "1\n"], ["1313", "ETF", "10\n"], ["1314", "ETF", "100\n"], ["1316", "ETF", "10\n"], ["1317", "ETF", "10\n"], ["1318", "ETF", "10\n"], ["1319", "ETF", "1000\n"], ["1320", "ETF", "1\n"], ["1321", "ETF", "1\n"], ["1322", "ETF", "10\n"], ["1323", "ETF", "100\n"], ["1324", "ETF", "100\n"], ["1325", "ETF", "100\n"], ["1326", "ETF", "1\n"], ["1327", "ETF", "1\n"], ["1328", "ETF", "10\n"], ["1329", "ETF", "1\n"], ["1330", "ETF", "10\n"], ["1343", "ETF", "10\n"], ["1344", "ETF", "10\n"], ["1345", "ETF", "100\n"], ["1346", "ETF", "1\n"], ["1347", "ETF", "10\n"], ["1348", "ETF", "10\n"], ["1349", "ETF", "1\n"], ["1356", "ETF", "10\n"], ["1357", "ETF", "1\n"], ["1358", "ETF", "1\n"], ["1360", "ETF", "10\n"], ["1361", "ETF", "1\n"], ["1362", "ETF", "1\n"], ["1363", "ETF", "1\n"], ["1364", "ETF", "1\n"], ["1365", "ETF", "1\n"], ["1366", "ETF", "1\n"], ["1367", "ETF", "1\n"], ["1368", "ETF", "1\n"], ["1369", "ETF", "1\n"], ["1385", "ETF", "1\n"], ["1386", "ETF", "1\n"], ["1387", "ETF", "1\n"], ["1388", "ETF", "1\n"], ["1389", "ETF", "1\n"], ["1390", "ETF", "1\n"], ["1391", "ETF", "1\n"], ["1392", "ETF", "1\n"], ["1393", "ETF", "1\n"], ["1394", "ETF", "1\n"], ["1397", "ETF", "1\n"], ["1398", "ETF", "10\n"], ["1540", "ETF", "1\n"], ["1541", "ETF", "1\n"], ["1542", "ETF", "1\n"], ["1543", "ETF", "1\n"], ["1544", "ETF", "10\n"], ["1545", "ETF", "10\n"], ["1546", "ETF", "1\n"], ["1547", "ETF", "10\n"], ["1548", "ETF", "10\n"], ["1549", "ETF", "10\n"], ["1550", "ETF", "10\n"], ["1551", "ETF", "10\n"], ["1552", "ETF", "1\n"], ["1554", "ETF", "10\n"], ["1555", "ETF", "10\n"], ["1556", "ETF", "10\n"], ["1557", "ETF", "1\n"], ["1559", "ETF", "1\n"], ["1560", "ETF", "1\n"], ["1561", "ETF", "1\n"], ["1562", "ETF", "10\n"], ["1563", "ETF", "1\n"], ["1565", "ETF", "1\n"], ["1566", "ETF", "1\n"], ["1567", "ETF", "10\n"], ["1568", "ETF", "10\n"], ["1569", "ETF", "10\n"], ["1570", "ETF", "1\n"], ["1571", "ETF", "1\n"], ["1572", "ETF", "10\n"], ["1573", "ETF", "10\n"], ["1574", "ETF", "10\n"], ["1575", "ETF", "10\n"], ["1576", "ETF", "10\n"], ["1577", "ETF", "1\n"], ["1578", "ETF", "1\n"], ["1579", "ETF", "10\n"], ["1580", "ETF", "10\n"], ["1581", "ETF", "1\n"], ["1582", "ETF", "1\n"], ["1583", "ETF", "1\n"], ["1584", "ETF", "10\n"], ["1585", "ETF", "10\n"], ["1586", "ETF", "1\n"], ["1587", "ETF", "1\n"], ["1588", "ETF", "1\n"], ["1589", "ETF", "1\n"], ["1590", "ETF", "1\n"], ["1591", "ETF", "1\n"], ["1592", "ETF", "1\n"], ["1593", "ETF", "1\n"], ["1595", "ETF", "10\n"], ["1596", "ETF", "10\n"], ["1597", "ETF", "10\n"], ["1598", "ETF", "1\n"], ["1599", "ETF", "1\n"], ["1610", "ETF", "10\n"], ["1612", "ETF", "100\n"], ["1613", "ETF", "10\n"], ["1615", "ETF", "100\n"], ["1617", "ETF", "1\n"], ["1618", "ETF", "1\n"], ["1619", "ETF", "1\n"], ["1620", "ETF", "1\n"], ["1621", "ETF", "1\n"], ["1622", "ETF", "1\n"], ["1623", "ETF", "1\n"], ["1624", "ETF", "1\n"], ["1625", "ETF", "1\n"], ["1626", "ETF", "1\n"], ["1627", "ETF", "1\n"], ["1628", "ETF", "1\n"], ["1629", "ETF", "1\n"], ["1630", "ETF", "1\n"], ["1631", "ETF", "1\n"], ["1632", "ETF", "1\n"], ["1633", "ETF", "1\n"], ["1634", "ETF", "1\n"], ["1635", "ETF", "1\n"], ["1636", "ETF", "1\n"], ["1637", "ETF", "1\n"], ["1638", "ETF", "1\n"], ["1639", "ETF", "1\n"], ["1640", "ETF", "1\n"], ["1641", "ETF", "1\n"], ["1642", "ETF", "1\n"], ["1643", "ETF", "1\n"], ["1644", "ETF", "1\n"], ["1645", "ETF", "1\n"], ["1646", "ETF", "1\n"], ["1647", "ETF", "1\n"], ["1648", "ETF", "1\n"], ["1649", "ETF", "1\n"], ["1650", "ETF", "1\n"], ["1670", "ETF", "100\n"], ["1671", "ETF", "1\n"], ["1672", "ETF", "1\n"], ["1673", "ETF", "10\n"], ["1674", "ETF", "1\n"], ["1675", "ETF", "1\n"], ["1676", "ETF", "1\n"], ["1677", "ETF", "10\n"], ["1678", "ETF", "100\n"], ["1679", "ETF", "10\n"], ["1680", "ETF", "10\n"], ["1681", "ETF", "10\n"], ["1682", "ETF", "100\n"], ["1683", "ETF", "10\n"], ["1684", "ETF", "10\n"], ["1685", "ETF", "10\n"], ["1686", "ETF", "10\n"], ["1687", "ETF", "10\n"], ["1688", "ETF", "10\n"], ["1689", "ETF", "100\n"], ["1690", "ETF", "10\n"], ["1691", "ETF", "10\n"], ["1692", "ETF", "100\n"], ["1693", "ETF", "10\n"], ["1694", "ETF", "10\n"], ["1695", "ETF", "100\n"], ["1696", "ETF", "100\n"], ["1697", "ETF", "10\n"], ["1698", "ETF", "10\n"], ["1699", "ETF", "10\n"], ["2021", "ETF", "1\n"], ["2022", "ETF", "1\n"], ["2023", "ETF", "1\n"], ["2024", "ETF", "1\n"], ["2025", "ETF", "1\n"], ["2026", "ETF", "1\n"], ["2027", "ETF", "1\n"], ["2028", "ETF", "1\n"], ["2029", "ETF", "1\n"], ["2030", "ETF", "1\n"], ["2031", "ETF", "1\n"], ["2032", "ETF", "1\n"], ["2033", "ETF", "1\n"], ["2034", "ETF", "1\n"], ["2035", "ETF", "1\n"], ["2036", "ETF", "1\n"], ["2037", "ETF", "1\n"], ["2038", "ETF", "1\n"], ["2039", "ETF", "1\n"], ["2040", "ETF", "1\n"], ["2041", "ETF", "1\n"], ["2042", "ETF", "1\n"], ["2043", "ETF", "1\n"], ["2044", "ETF", "1\n"], ["2045", "ETF", "1\n"], ["2046", "ETF", "1\n"], ["2047", "ETF", "1\n"], ["2048", "ETF", "1\n"], ["2049", "ETF", "1\n"], ["3226", "REIT", "1\n"], ["3227", "REIT", "1\n"], ["3229", "REIT", "1\n"], ["3234", "REIT", "1\n"], ["3240", "REIT", "1\n"], ["3249", "REIT", "1\n"], ["3263", "REIT", "1\n"], ["3269", "REIT", "1\n"], ["3278", "REIT", "1\n"], ["3279", "REIT", "1\n"], ["3281", "REIT", "1\n"], ["3282", "REIT", "1\n"], ["3283", "REIT", "1\n"], ["3285", "REIT", "1\n"], ["3287", "REIT", "1\n"], ["3290", "REIT", "1\n"], ["3292", "REIT", "1\n"], ["3295", "REIT", "1\n"], ["3296", "REIT", "1\n"], ["3298", "REIT", "1\n"], ["3308", "REIT", "1\n"], ["3309", "REIT", "1\n"], ["3451", "REIT", "1\n"], ["3453", "REIT", "1\n"], ["3455", "REIT", "1\n"], ["8951", "REIT", "1\n"], ["8952", "REIT", "1\n"], ["8953", "REIT", "1\n"], ["8954", "REIT", "1\n"], ["8955", "REIT", "1\n"], ["8956", "REIT", "1\n"], ["8957", "REIT", "1\n"], ["8958", "REIT", "1\n"], ["8959", "REIT", "1\n"], ["8960", "REIT", "1\n"], ["8961", "REIT", "1\n"], ["8962", "REIT", "1\n"], ["8963", "REIT", "1\n"], ["8964", "REIT", "1\n"], ["8965", "REIT", "1\n"], ["8966", "REIT", "1\n"], ["8967", "REIT", "1\n"], ["8968", "REIT", "1\n"], ["8969", "REIT", "1\n"], ["8970", "REIT", "1\n"], ["8972", "REIT", "1\n"], ["8973", "REIT", "1\n"], ["8974", "REIT", "1\n"], ["8975", "REIT", "1\n"], ["8976", "REIT", "1\n"], ["8977", "REIT", "1\n"], ["8978", "REIT", "1\n"], ["8979", "REIT", "1\n"], ["8980", "REIT", "1\n"], ["8981", "REIT", "1\n"], ["8982", "REIT", "1\n"], ["8983", "REIT", "1\n"], ["8984", "REIT", "1\n"], ["8985", "REIT", "1\n"], ["8986", "REIT", "1\n"], ["8987", "REIT", "1\n"]]
@data_dirを出力すると"data"、@stock_listは"tosho_list.txt"が出力される。@market_sectionが"nil"である。市場を設定していないということか?
書籍の"text_to_stock.rb"の解説を読んでいるが、Rubyの知識がほとんどないので全くわからない。indexは与えられた証券コードが、銘柄リストの何番目にあるのかを示すもののようだ。
試しに、"./lib/stock_list_loader.rb"の関連していると思われる箇所、
def codes
@codes ||= stock_info.map {|info| info[:code]}
p @codes
end
で@codesを出力してみると、
[1305, 1306, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1356, 1357, 1358, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1397, 1398, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1554, 1555, 1556, 1557, 1559, 1560, 1561, 1562, 1563, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1595, 1596, 1597, 1598, 1599, 1610, 1612, 1613, 1615, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 3226, 3227, 3229, 3234, 3240, 3249, 3263, 3269, 3278, 3279, 3281, 3282, 3283, 3285, 3287, 3290, 3292, 3295, 3296, 3298, 3308, 3309, 3451, 3453, 3455, 8951, 8952, 8953, 8954, 8955, 8956, 8957, 8958, 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8972, 8973, 8974, 8975, 8976, 8977, 8978, 8979, 8980, 8981, 8982, 8983, 8984, 8985, 8986, 8987]
"tosho_list.txt"の証券コード一覧を取得しているようだ。
"estrangement_entry_check.rb"でシミュレーションを銘柄の証券コードがこのリストの中にないことに気づいた…
証券コードを設定するところをこの一覧の中にあるものに変更して(デフォルトの設定値は8604)
stock = tts.generate_stock(1677)
このスクリプトを実行してみると、
$ruby ./check/estrangement_entry_check.rb
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil long
fail in data 19
nil nil
nil long
fail in data 21
nil long
fail in data 22
nil long
fail in data 23
nil long
fail in data 24
nil long
fail in data 25
nil long
fail in data 26
nil long
fail in data 27
nil long
fail in data 28
nil long
fail in data 29
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil short
fail in data 57
nil short
fail in data 58
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil long
fail in data 81
nil long
fail in data 82
nil long
fail in data 83
nil long
fail in data 84
nil long
fail in data 85
nil long
fail in data 86
nil long
fail in data 87
nil long
fail in data 88
nil long
fail in data 89
nil long
fail in data 90
nil long
fail in data 91
nil long
fail in data 92
nil long
fail in data 93
nil long
fail in data 94
nil long
fail in data 95
nil long
fail in data 96
nil long
fail in data 97
nil nil
nil nil
nil nil
nil nil
nil nil
nil long
fail in data 103
nil long
fail in data 104
nil long
fail in data 105
nil long
fail in data 106
nil nil
nil nil
なんとか動くようになったようだ!
同じようにこれまでエラーで動かなかった動作チェックスクリプトを試してみる。
"trading_system_check.rb"スクリプトで証券コード(デフォルト設定値3101)を一覧リストの中にある値に以下のように変更して実行してみる。
trades = simulate(1677)
$ ruby ./check/trading_system_check.rb
[]
�����v
文字化けをしているが、書籍から出力は”総資産”に該当しおそらくトレードが一度も成立していないということであるが、エラーがでず正常に動いたと思われる。
さらに"recorder_check.rb"でも再度動作チェックを行う。同様に証券コードを以下のように修正して(デフォルト設定値は[4063, 7203, 8604])実行する。
results = [1677, 1678, 1679].map do |code|
$ ruby ./check/recorder_check.rb
�L�^�t�H���_ result/test ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
文字化けしているがy/nを聞かれたあとにyを入力すると、エラーが出ずに終了する。
result/testフォルダの中にファイルが作られている。
1678.csv _setting.rb _stats.csv _stats_for_each_stock.csv
なぜ1678だけcsvファイルがあるのか分からないが、問題なさそうである。
最後に"simulation_check.rb"の動作チェックを行う。証券コードを以下のように修正して(デフォルト値は8604)実行してみよう。
simulation.simulate_a_stock(1678)
$ ruby ./check/simulation_check.rb
�L�^�t�H���_ result/estrangement/test_simulation ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
また文字化けしているがy/nを聞かれたあとにyを入力すると、エラーが出ずに終了する。
"/result/estrangement/test_simulation"の中に"1678.csv"が作成されている。中を見ると
<8e>æ<88>ø<8e>í<95>Ê,<93>ü<93>ú<95>t,<93>ü<92>l,<90><94><97>Ê,<8f><89><8a>ú<83>X<83>g<83>b<83>v,<8f>o<93>ú<95>t,<8f>o<92>l,<91>1<89>v(<89>~),R<94>{<90><94>,%<91>1<89>v,<8a>ú<8a>Ô
long,2011/05/09,97,100,94,2011/05/17,94,-300,-1.0,-3.0927835051546393,7
これがどうやらトレードの記録のようだ。とうとうサンプルコードが動くようになった!次はデータの取得。
また書籍にあるサンプルコードを編集しなおしている人がいるようで、Gitアカウントを見つけた。
https://github.com/tstomoki/trade_simulator
このあたりも参考にさせてもらおう。
問題は以下の2つ
- 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)の原因
シミュレーションの方を動くようにしたいので、2つ目のエラーを調査。理由がよくわからないのでWindows環境でサンプルコードを実行できるようにした。そしてサンプルコードを実行しても同じエラーがでることがわかった。
エラーの該当箇所に引数indexを表示させるようにし
def market(index)
p index
section = @list_loader.market_sections[index]
動作チェックスクリプトを実行してみる。
$ruby ./check/estrangement_entry_check.rb
確かに”nil”が出力される。つまり関数marketへの引数"index"がnilになっているということのようだ。
indexが定義されている箇所をみると、
def initialize(params)
@data_dir = params[:data_dir] || "data"
@stock_list = params[:stock_list] || raise("<96>Á<95>¿<83><8a><83>X<83>g<82>ð<8e>w<92>è<82>μ<82>Ä<82>-<82>¾<8 2>3<82>¢")
@market_section = params[:market_section]
@list_loader = StockListLoader.new("#{@data_dir}/#{@stock_list}")
p @list_loader
end
この段階でindexがnilになっている。code正しく設定されているようなので、問題があるのは@list_loaderあたりのようだ。@list_loaderを出力してみると、以下のようになり"tosho_list.txt"の内容と同じ。
@stock_list=[["1305", "ETF", "10\n"], ["1306", "ETF", "10\n"], ["1308", "ETF", "100\n"], ["1309", "ETF", "1\n"], ["1310", "ETF", "10\n"], ["1311", "ETF", "10\n"], ["1312", "ETF", "1\n"], ["1313", "ETF", "10\n"], ["1314", "ETF", "100\n"], ["1316", "ETF", "10\n"], ["1317", "ETF", "10\n"], ["1318", "ETF", "10\n"], ["1319", "ETF", "1000\n"], ["1320", "ETF", "1\n"], ["1321", "ETF", "1\n"], ["1322", "ETF", "10\n"], ["1323", "ETF", "100\n"], ["1324", "ETF", "100\n"], ["1325", "ETF", "100\n"], ["1326", "ETF", "1\n"], ["1327", "ETF", "1\n"], ["1328", "ETF", "10\n"], ["1329", "ETF", "1\n"], ["1330", "ETF", "10\n"], ["1343", "ETF", "10\n"], ["1344", "ETF", "10\n"], ["1345", "ETF", "100\n"], ["1346", "ETF", "1\n"], ["1347", "ETF", "10\n"], ["1348", "ETF", "10\n"], ["1349", "ETF", "1\n"], ["1356", "ETF", "10\n"], ["1357", "ETF", "1\n"], ["1358", "ETF", "1\n"], ["1360", "ETF", "10\n"], ["1361", "ETF", "1\n"], ["1362", "ETF", "1\n"], ["1363", "ETF", "1\n"], ["1364", "ETF", "1\n"], ["1365", "ETF", "1\n"], ["1366", "ETF", "1\n"], ["1367", "ETF", "1\n"], ["1368", "ETF", "1\n"], ["1369", "ETF", "1\n"], ["1385", "ETF", "1\n"], ["1386", "ETF", "1\n"], ["1387", "ETF", "1\n"], ["1388", "ETF", "1\n"], ["1389", "ETF", "1\n"], ["1390", "ETF", "1\n"], ["1391", "ETF", "1\n"], ["1392", "ETF", "1\n"], ["1393", "ETF", "1\n"], ["1394", "ETF", "1\n"], ["1397", "ETF", "1\n"], ["1398", "ETF", "10\n"], ["1540", "ETF", "1\n"], ["1541", "ETF", "1\n"], ["1542", "ETF", "1\n"], ["1543", "ETF", "1\n"], ["1544", "ETF", "10\n"], ["1545", "ETF", "10\n"], ["1546", "ETF", "1\n"], ["1547", "ETF", "10\n"], ["1548", "ETF", "10\n"], ["1549", "ETF", "10\n"], ["1550", "ETF", "10\n"], ["1551", "ETF", "10\n"], ["1552", "ETF", "1\n"], ["1554", "ETF", "10\n"], ["1555", "ETF", "10\n"], ["1556", "ETF", "10\n"], ["1557", "ETF", "1\n"], ["1559", "ETF", "1\n"], ["1560", "ETF", "1\n"], ["1561", "ETF", "1\n"], ["1562", "ETF", "10\n"], ["1563", "ETF", "1\n"], ["1565", "ETF", "1\n"], ["1566", "ETF", "1\n"], ["1567", "ETF", "10\n"], ["1568", "ETF", "10\n"], ["1569", "ETF", "10\n"], ["1570", "ETF", "1\n"], ["1571", "ETF", "1\n"], ["1572", "ETF", "10\n"], ["1573", "ETF", "10\n"], ["1574", "ETF", "10\n"], ["1575", "ETF", "10\n"], ["1576", "ETF", "10\n"], ["1577", "ETF", "1\n"], ["1578", "ETF", "1\n"], ["1579", "ETF", "10\n"], ["1580", "ETF", "10\n"], ["1581", "ETF", "1\n"], ["1582", "ETF", "1\n"], ["1583", "ETF", "1\n"], ["1584", "ETF", "10\n"], ["1585", "ETF", "10\n"], ["1586", "ETF", "1\n"], ["1587", "ETF", "1\n"], ["1588", "ETF", "1\n"], ["1589", "ETF", "1\n"], ["1590", "ETF", "1\n"], ["1591", "ETF", "1\n"], ["1592", "ETF", "1\n"], ["1593", "ETF", "1\n"], ["1595", "ETF", "10\n"], ["1596", "ETF", "10\n"], ["1597", "ETF", "10\n"], ["1598", "ETF", "1\n"], ["1599", "ETF", "1\n"], ["1610", "ETF", "10\n"], ["1612", "ETF", "100\n"], ["1613", "ETF", "10\n"], ["1615", "ETF", "100\n"], ["1617", "ETF", "1\n"], ["1618", "ETF", "1\n"], ["1619", "ETF", "1\n"], ["1620", "ETF", "1\n"], ["1621", "ETF", "1\n"], ["1622", "ETF", "1\n"], ["1623", "ETF", "1\n"], ["1624", "ETF", "1\n"], ["1625", "ETF", "1\n"], ["1626", "ETF", "1\n"], ["1627", "ETF", "1\n"], ["1628", "ETF", "1\n"], ["1629", "ETF", "1\n"], ["1630", "ETF", "1\n"], ["1631", "ETF", "1\n"], ["1632", "ETF", "1\n"], ["1633", "ETF", "1\n"], ["1634", "ETF", "1\n"], ["1635", "ETF", "1\n"], ["1636", "ETF", "1\n"], ["1637", "ETF", "1\n"], ["1638", "ETF", "1\n"], ["1639", "ETF", "1\n"], ["1640", "ETF", "1\n"], ["1641", "ETF", "1\n"], ["1642", "ETF", "1\n"], ["1643", "ETF", "1\n"], ["1644", "ETF", "1\n"], ["1645", "ETF", "1\n"], ["1646", "ETF", "1\n"], ["1647", "ETF", "1\n"], ["1648", "ETF", "1\n"], ["1649", "ETF", "1\n"], ["1650", "ETF", "1\n"], ["1670", "ETF", "100\n"], ["1671", "ETF", "1\n"], ["1672", "ETF", "1\n"], ["1673", "ETF", "10\n"], ["1674", "ETF", "1\n"], ["1675", "ETF", "1\n"], ["1676", "ETF", "1\n"], ["1677", "ETF", "10\n"], ["1678", "ETF", "100\n"], ["1679", "ETF", "10\n"], ["1680", "ETF", "10\n"], ["1681", "ETF", "10\n"], ["1682", "ETF", "100\n"], ["1683", "ETF", "10\n"], ["1684", "ETF", "10\n"], ["1685", "ETF", "10\n"], ["1686", "ETF", "10\n"], ["1687", "ETF", "10\n"], ["1688", "ETF", "10\n"], ["1689", "ETF", "100\n"], ["1690", "ETF", "10\n"], ["1691", "ETF", "10\n"], ["1692", "ETF", "100\n"], ["1693", "ETF", "10\n"], ["1694", "ETF", "10\n"], ["1695", "ETF", "100\n"], ["1696", "ETF", "100\n"], ["1697", "ETF", "10\n"], ["1698", "ETF", "10\n"], ["1699", "ETF", "10\n"], ["2021", "ETF", "1\n"], ["2022", "ETF", "1\n"], ["2023", "ETF", "1\n"], ["2024", "ETF", "1\n"], ["2025", "ETF", "1\n"], ["2026", "ETF", "1\n"], ["2027", "ETF", "1\n"], ["2028", "ETF", "1\n"], ["2029", "ETF", "1\n"], ["2030", "ETF", "1\n"], ["2031", "ETF", "1\n"], ["2032", "ETF", "1\n"], ["2033", "ETF", "1\n"], ["2034", "ETF", "1\n"], ["2035", "ETF", "1\n"], ["2036", "ETF", "1\n"], ["2037", "ETF", "1\n"], ["2038", "ETF", "1\n"], ["2039", "ETF", "1\n"], ["2040", "ETF", "1\n"], ["2041", "ETF", "1\n"], ["2042", "ETF", "1\n"], ["2043", "ETF", "1\n"], ["2044", "ETF", "1\n"], ["2045", "ETF", "1\n"], ["2046", "ETF", "1\n"], ["2047", "ETF", "1\n"], ["2048", "ETF", "1\n"], ["2049", "ETF", "1\n"], ["3226", "REIT", "1\n"], ["3227", "REIT", "1\n"], ["3229", "REIT", "1\n"], ["3234", "REIT", "1\n"], ["3240", "REIT", "1\n"], ["3249", "REIT", "1\n"], ["3263", "REIT", "1\n"], ["3269", "REIT", "1\n"], ["3278", "REIT", "1\n"], ["3279", "REIT", "1\n"], ["3281", "REIT", "1\n"], ["3282", "REIT", "1\n"], ["3283", "REIT", "1\n"], ["3285", "REIT", "1\n"], ["3287", "REIT", "1\n"], ["3290", "REIT", "1\n"], ["3292", "REIT", "1\n"], ["3295", "REIT", "1\n"], ["3296", "REIT", "1\n"], ["3298", "REIT", "1\n"], ["3308", "REIT", "1\n"], ["3309", "REIT", "1\n"], ["3451", "REIT", "1\n"], ["3453", "REIT", "1\n"], ["3455", "REIT", "1\n"], ["8951", "REIT", "1\n"], ["8952", "REIT", "1\n"], ["8953", "REIT", "1\n"], ["8954", "REIT", "1\n"], ["8955", "REIT", "1\n"], ["8956", "REIT", "1\n"], ["8957", "REIT", "1\n"], ["8958", "REIT", "1\n"], ["8959", "REIT", "1\n"], ["8960", "REIT", "1\n"], ["8961", "REIT", "1\n"], ["8962", "REIT", "1\n"], ["8963", "REIT", "1\n"], ["8964", "REIT", "1\n"], ["8965", "REIT", "1\n"], ["8966", "REIT", "1\n"], ["8967", "REIT", "1\n"], ["8968", "REIT", "1\n"], ["8969", "REIT", "1\n"], ["8970", "REIT", "1\n"], ["8972", "REIT", "1\n"], ["8973", "REIT", "1\n"], ["8974", "REIT", "1\n"], ["8975", "REIT", "1\n"], ["8976", "REIT", "1\n"], ["8977", "REIT", "1\n"], ["8978", "REIT", "1\n"], ["8979", "REIT", "1\n"], ["8980", "REIT", "1\n"], ["8981", "REIT", "1\n"], ["8982", "REIT", "1\n"], ["8983", "REIT", "1\n"], ["8984", "REIT", "1\n"], ["8985", "REIT", "1\n"], ["8986", "REIT", "1\n"], ["8987", "REIT", "1\n"]]
@data_dirを出力すると"data"、@stock_listは"tosho_list.txt"が出力される。@market_sectionが"nil"である。市場を設定していないということか?
書籍の"text_to_stock.rb"の解説を読んでいるが、Rubyの知識がほとんどないので全くわからない。indexは与えられた証券コードが、銘柄リストの何番目にあるのかを示すもののようだ。
試しに、"./lib/stock_list_loader.rb"の関連していると思われる箇所、
def codes
@codes ||= stock_info.map {|info| info[:code]}
p @codes
end
で@codesを出力してみると、
[1305, 1306, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1356, 1357, 1358, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1397, 1398, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1554, 1555, 1556, 1557, 1559, 1560, 1561, 1562, 1563, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1595, 1596, 1597, 1598, 1599, 1610, 1612, 1613, 1615, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 3226, 3227, 3229, 3234, 3240, 3249, 3263, 3269, 3278, 3279, 3281, 3282, 3283, 3285, 3287, 3290, 3292, 3295, 3296, 3298, 3308, 3309, 3451, 3453, 3455, 8951, 8952, 8953, 8954, 8955, 8956, 8957, 8958, 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8972, 8973, 8974, 8975, 8976, 8977, 8978, 8979, 8980, 8981, 8982, 8983, 8984, 8985, 8986, 8987]
"tosho_list.txt"の証券コード一覧を取得しているようだ。
"estrangement_entry_check.rb"でシミュレーションを銘柄の証券コードがこのリストの中にないことに気づいた…
証券コードを設定するところをこの一覧の中にあるものに変更して(デフォルトの設定値は8604)
stock = tts.generate_stock(1677)
このスクリプトを実行してみると、
$ruby ./check/estrangement_entry_check.rb
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil long
fail in data 19
nil nil
nil long
fail in data 21
nil long
fail in data 22
nil long
fail in data 23
nil long
fail in data 24
nil long
fail in data 25
nil long
fail in data 26
nil long
fail in data 27
nil long
fail in data 28
nil long
fail in data 29
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil short
fail in data 57
nil short
fail in data 58
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil nil
nil long
fail in data 81
nil long
fail in data 82
nil long
fail in data 83
nil long
fail in data 84
nil long
fail in data 85
nil long
fail in data 86
nil long
fail in data 87
nil long
fail in data 88
nil long
fail in data 89
nil long
fail in data 90
nil long
fail in data 91
nil long
fail in data 92
nil long
fail in data 93
nil long
fail in data 94
nil long
fail in data 95
nil long
fail in data 96
nil long
fail in data 97
nil nil
nil nil
nil nil
nil nil
nil nil
nil long
fail in data 103
nil long
fail in data 104
nil long
fail in data 105
nil long
fail in data 106
nil nil
nil nil
なんとか動くようになったようだ!
同じようにこれまでエラーで動かなかった動作チェックスクリプトを試してみる。
"trading_system_check.rb"スクリプトで証券コード(デフォルト設定値3101)を一覧リストの中にある値に以下のように変更して実行してみる。
trades = simulate(1677)
$ ruby ./check/trading_system_check.rb
[]
�����v
文字化けをしているが、書籍から出力は”総資産”に該当しおそらくトレードが一度も成立していないということであるが、エラーがでず正常に動いたと思われる。
さらに"recorder_check.rb"でも再度動作チェックを行う。同様に証券コードを以下のように修正して(デフォルト設定値は[4063, 7203, 8604])実行する。
results = [1677, 1678, 1679].map do |code|
$ ruby ./check/recorder_check.rb
�L�^�t�H���_ result/test ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
文字化けしているがy/nを聞かれたあとにyを入力すると、エラーが出ずに終了する。
result/testフォルダの中にファイルが作られている。
1678.csv _setting.rb _stats.csv _stats_for_each_stock.csv
なぜ1678だけcsvファイルがあるのか分からないが、問題なさそうである。
最後に"simulation_check.rb"の動作チェックを行う。証券コードを以下のように修正して(デフォルト値は8604)実行してみよう。
simulation.simulate_a_stock(1678)
$ ruby ./check/simulation_check.rb
�L�^�t�H���_ result/estrangement/test_simulation ���łɑ����܂��B�㏑�����܂����H y/n
y
�㏑�����܂�
また文字化けしているがy/nを聞かれたあとにyを入力すると、エラーが出ずに終了する。
"/result/estrangement/test_simulation"の中に"1678.csv"が作成されている。中を見ると
<8e>æ<88>ø<8e>í<95>Ê,<93>ü<93>ú<95>t,<93>ü<92>l,<90><94><97>Ê,<8f><89><8a>ú<83>X<83>g<83>b<83>v,<8f>o<93>ú<95>t,<8f>o<92>l,<91>1<89>v(<89>~),R<94>{<90><94>,%<91>1<89>v,<8a>ú<8a>Ô
long,2011/05/09,97,100,94,2011/05/17,94,-300,-1.0,-3.0927835051546393,7
これがどうやらトレードの記録のようだ。とうとうサンプルコードが動くようになった!次はデータの取得。
- open_http': 999 Unable to process request at this time -- error 999 (OpenURI::HTTPError)の原因
また書籍にあるサンプルコードを編集しなおしている人がいるようで、Gitアカウントを見つけた。
https://github.com/tstomoki/trade_simulator
このあたりも参考にさせてもらおう。
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/3615241
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック