株式売買ユーティリティのメンテナンス

投稿日:

 標記システムはこの3月に手直しして、快調に動いている。

 しかし、この株価好調の折柄、どうも売買成績がそれほど良くない。

 毎日の売買シミュレーションの結果は、成績の良いものがテーブルに格納されて提示される仕組みだ。成績の悪いものは日々の値動きにより次第に排除されていく。ふと気づいてこのテーブルを見てみたら、銘柄数が減っている。はじめのうちは100社以上が残っていたが、今見ると70社ほどに減ってしまっていた。

 ははあ、これだな、と思い、先週から少し試行錯誤して、東証一部の貸借銘柄リストを1893社、東証のサイトから貰ってきた。これを対象銘柄テーブルに全部ブチ込んだ。

 前は自分の気に入った東証二部の銘柄も入れていたが、売買両方向でシミュレーションするので貸借銘柄でないと都合が悪い。東証二部の銘柄を混ぜると貸借銘柄でない銘柄を削除したりするのが面倒になることと、東証一部の貸借銘柄は信用の高い銘柄で自然、時価総額も高いということになるから、これも好都合だと思ったのだ。時価総額が高ければ、そう簡単には倒産などしない。以前は時価総額の高い順に上からリストを持ってきていたが、それはシミュレーションに時間がかかっていたから銘柄数を厳選するためで、最近は計算機を性能の良いもの(Corei7+メモリ32GBのデスクトップマシンのVM)に替えたので、この部分は気にしなくてよくなったのだ。

 株価データは無料を期するため、「Yahoo!株価」からトロトロとスクレイピングする仕組みである。ところが、約1900社の全部のダウンロードには50時間ほどもかかる。

 先週の土日からそれに手を付け、シミュレーションはようやく7.1(木)の未明、真夜中に起動した。

 ところが、朝までかかって1527銘柄ほどシミュレーションしたところで、停止してしまった。

 データにゴミでも入ったかな、と思い、一度スクレイピングした全部のデータを消去して、ダウンロードからもう一度取り掛かることにした。また改めて50時間以上かかる。

 しかし、今度も1526銘柄で異常終了してしまった。

 そんなことに、昨日の土曜日の早朝まで費やしてしまった。今まで最大の銘柄数は700銘柄くらいしか食わせたことがないので、そういうバグがあることがわからなかったのである。

 シミュレーション部分はCで書いてある。どこかにメモリの開放忘れでもあるのかな、とソースを読んでみるがそんなことはない。

 しかし、PostgreSQLへのアクセスにlibpqを使っているのだが、そのリザルトオブジェクトを開放していない場所が1か所あることに気づいた。ある銘柄の過去5年分の日足データを列挙するループに入る直前に「res = PQexec(con, sqlstr);」なんてことをやり、この「res」には過去5年分の日足データが入る。「res」をループ内で使うのだが、ループを出た後でこの「res」を開放しないまま、再び「res = PQexec(con, sqlstr);」が呼ばれるのだ。どうも、これを1500回も繰り返すとメモリリークを起こすようだ。

 そこで、日足データ列挙ループの出口を出てすぐのところに「PQclear(res);」というコードを足した。

 これでもう一度様子を見ることにする。

投稿者: 佐藤俊夫

 50代後半の爺。技術者。元陸上自衛官。2等陸佐で定年退官。ITストラテジストテクニカルエンジニア(システム管理)基本情報技術者

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください