指標のデータベース化

先日、指標をデータベース化するという話をしましたが、
その実現をするためのプログラムでは、いくつかの選択肢があります。
今の環境では、
・ MySQL単独で計算させる。
   MySQLはバージョン5から、ストアドプロシジャという機能が追加されて、
  こいつをつかうと、MySQL自身で繰り返し演算などを行うことができる。
  たぶん、一番、処理は速いが、演算機能自身は貧弱。
・ Javaで計算させる。
   メンテ、速度ともに、一番妥当か。
・ Perlで計算させる。
  メンテは楽、速度は??
と、考えられるのですが、
後々の拡張を考えると、お得意のPerlで処理をさせる方が、
メンテナンスしやすいので、これで処理をすることにする。
自動取得などはほとんどPerlですからね。
できれば、近いうちに、データベースの設計をして、実際の指標を落とし込んでいきたいと
思います。

JavaでのGUIをもう少し調べる

今ひとつJavaの書き方がわからない。
なんの予備知識もなく、いきなりソースをいじっているので仕方ないが・・(–;
やはり、本の一冊くらいは買わないといけないかな。
とりあえず、会社の帰りにこの本をかってみる。
部屋が狭いので、あまり本は買いたくないが、
リファレンスの一冊くらいはあってもよかろう。
でも、昔のリファレンスに比べて、説明が親切で非常にわかりやすい。
昔から、いろんな言語をさわっているので、普通の入門書はあまりにまどろっこしくて、
使えないので、ちょうど良い感じである。
(たぶん、Javaの本は将来この本だけだろう(^^;)
さて、JavaのGUIであるが、MacOSXでも、JiglooなるものがMacででも使えることが
わかった。
早速、つかってみると、結構、おもしろい。
リソースみたいな考えでなく、画面上でオブジェクトをさわると、
リアルにソースが変更されていく。
(動かすたびにCPUがふりきれるが・・)
非常におもしろいが、開発の快適さが失われるので、やはり、SWTをべたべたと書いていくことにする。
まず、つくるべきは、銘柄をいれると、四値や出来高をリストで表示して、
ローソク足を表示する程度のものを作成する。
データベースの扱いは、JDBCなるものがあり、MySQLの場合はこれを利用すれば、
簡単にアクセスできるようである。
とりあえず、ボタンなどの配置をしてみたのが、こんな感じである。
Swttest
とりあえず、ラベル、エディット、リスト、描画領域を作った。
比較的簡単に配置できたのに驚く。
とりあえず、これをたたきに、最低限の機能を実装したい。

日中足データの取得・作成

実際にプログラムを組んでみる。
まずは、ログイン処理・・・
これは、データベースに入っている、私の証券会社のIDとパスワードを設定して、
submitするだけである。簡単である・・・。
はずだが、なぜか、変遷してない。
処理的には問題ないはずだが・・・。
取得したhtmlを見て、びっくり、Safariで普通に見ているときにはわからない現象が起こっていた。
おそるまじ・・・。
原因がわかれば対処はできる。
結局、数時間はまってしまった。
ログインしてしまえば、現在のログイン状態を内部変数に保持しつつ、
必要な会社のデータをリクエストすればよい。
現在値だけであれば、注視すべき銘柄をボードにいれて、それをリロードするのが、
処理は速いが、やはり、せっかくの日中足データ取得をするのであれば、
気配値もとりたいので、一つずつリクエストすることにする。
途中、
・ 気配値の取得
・ 表示されている現在時間の取得
ではまる。
気配値取得では、売り買い気配値がそれぞれ、
・5本ある場合
・5本ない場合
・5本以上ある場合
が、あって、htmlからどのように取得すればよいか、
ロジックが思いつかずに時間がかかる。
散歩中に思いついた・・。やはり気分転換は必要だ。
日時取得では、日時が文字列として扱われていることから、
データベースにinsertする時に文字列となってしまい、
日時型に設定したフィールドに入らない(デフォルト値)という現象であった。
処理中の変数を見ても、どう見てもおかしくない。
試しに日付を抽出して成形する作業を取得の直後におこなうと・・・・・・
動いた!
と、いうわけで、Perlの処理中にも日付であることを認識させておかないと、
DBIで処理をするときにうまくやってくれないようである。
そんなこと、どこにも書いてないぞ・・・。(って、見てないだけでしょうけど)
試行錯誤で、なんとなく動くようになる。
あとは実際の取得。
でもこればかりは、付き合えない(ザラ場は仕事だし)ので、
心配ですね。

日中足データの取得・概要

昨日の考えを具体化するために、プログラムを考える。
この処理も先の処理と同様に、Perlを利用する。
取得の時間は午前8時から午後3時まで取得することにする。
祝日などの休日などの取得も考えないといけないが、
最終的には、コンソール(制御用画面)を作るので、
そちらで操作することにする。
基本的には今まで作ってきたものと、考え方は同様であるが、
ログインをしないといけないことから、画面の変遷や再ログインを求められた時の
対応なども記述しないといけない。
ただ、以前にPerlで同じような処理を書いたことがあるので、なんとかなるでしょう。

日足データ取れていない・・

全部とれたつもりが・・
全然取れてなかった・・・・(;;)
サブルーチンの戻り値を、本番寸前に直返しからアドレス返しに変えてしまって、
それが原因で全部、データベースに格納する時にエラーになってました。
そこの部分を修正して実行。
無事、取得できた・・。
やっぱり、プログラム自身の動きとともに、成果物のデータベースのcountも見ておかないといけないです。
まーー、とりあえず、全部取得できたのでよしとしよう・・。

とりあえず日足データの取得できそう

EclipseでのPerl作業は非常に快適である。
今までは、エラーが出た行を一つずつつぶして行ったが、
Eclipseであれば、常時シンタックスチェックをしてくれるし、(うっとうしいほど・・(^^;)
エラーメッセージを見ながら、ソースを訂正できるので、非常に効率が良いです。
さて、過去の日足データを取得するシステムは、テストベースでは順調に取得できている。
最初、TreeBuilderで解析した後に、$tree->deleteするのを忘れていて、
メモリを食いまくっていたが、無事原因がわかり、
Jcodeも快適に処理をしてくれている。
実際に全データの取得を試してみると・・、想像通り、ヤフーから拒否されます。
当然といえば当然です。
人間ではあり得ない速度でとり続けるのはおかしいですからね。
とりあえず、負荷の少ない時間帯で、適度にインターバルを取りながら、
全データの取得が完了しました。
次からは、毎日の日足データの追加をすればいいので、
今回のような全部の取得をすることはないと思います。
ただ、実際の運用まではしばらく試行錯誤することになるので、
データベースで最後の取引データ日付から、当日まで取得するように、
改良して待機させることにします。

過去日足データの取得

日々のデータ取得も大事であるが、過去の履歴も大事である。
なぜならば、システムトレードには、過去の履歴でのシミュレーションが必要だからである。
そんな訳で、タイトルのとおり、過去日足データの取得である。
とりあえず、5年くらいの取得をすることとする。
過去の履歴には、株価データと信用残データがあるが、
今回の自動取引でつかう指数のほとんどは株価データであることから、
今回は株価データのみの取得とすることとした。
取得する情報は、
・ 会社コード
・ 日付
・ 4値
・ 出来高
などである。
なんせ、会社数も多い上に、期間も長いことから、だいぶしんどそう・・・。

基本情報の収集

データベースの用意ができ、開発環境もできたので、早速、情報取得のプログラムをつくる。
(2月末から仕事が忙しくあまり開発時間が作れず、全然「早速」ではない・・)
先にも書いたとおり、Eclipse上のPerlで開発することにしている。
ところで、なんで情報の収集をPerlでするのか。
それは、HP上の情報を収集するのを、
・Windows上のC++(VisualC++)
・Windows上のExcelVBA
・NetBSD上のC++
・NetBSD上のPerl(i386、68040)
・MacOSX上のPerl(G4、このManmini)
で、やってみたことがあるが、
結局、Perlでの取得が一番楽に開発できて(^^;
と、いう理由だけである。
タイトルにも書いた、基本情報の収集であるが、
これもヤフーファイナンスさんから取得することにする。
会社の一覧もないので、会社の一覧を取得しつつ、会社の詳細情報も収集する。
収集する項目は、
・会社コード
・会社名
・上場市場
・時価総額
・発行株式数
・一株配当
・決算月
・単元株数
など、である。
あまり技術的な話を書くと、HPの方で書くネタがなくなるので、
詳細は書かないが、
・ 全上場企業の会社コードの取得
・ 各上場企業の詳細情報の取得
・ データベースに情報を格納
の作業をminiですると、CPUが振り切れます(^^;
当然、データベースのサーバもかねており、私のメールチェック、HP閲覧などを
こなしているので、当然といえば当然ですが・・・。
ちょっと、miniがかわいそうでした。
試行錯誤しましたが、結局、一晩で全部取ってきてくれました。
ちなみに取得した企業数は、「3877」でした。
今後は、一月に一回くらいのペースで取得しようと思います。
(できれば、夜中に自動起動するようにしたい)

webkitでのやり方不明

いろいろと調べるけど、Macのcocoaなプログラムで、webへsubmitする方法が、
わからないです。
どう考えても、できないはずはないんですが、2日探して、見つからないので、
このまま、時間が過ぎていくのはもったいないので、別の方法を考えないといけないのか・・・
Automatorや、AppleScriptなんかを、使えば、
自動運転ができることは、間違いないんですけど、
これをつかってしまうと、他の環境への移行がめんどそうですからね。
もうすこし、UNIXよりにしようか・・・。

漢字コード問題解決!

先日から悩んでいる、漢字コード問題。
HPを見ていると、Xcodeでソースの中に漢字を直書きするのは、御法度だとか・・・
妙に動いたりするので、お気軽に書いてたけど、やっぱりだめだったんですね。
Windowsな環境やUNIXな環境でコーディングするときは、ちゃんと外部定義するんですけどね。
ついつい、Xcodeに甘えてしまいました。
いろいろと試行錯誤した結果、
Localizable.strings
というテキストファイルをプロジェクトに追加して、
そのファイルには、
“tyouseigo” = “調整後終値*”;
みたいに、ソース内で使う内容を定義していきます。
あとは、普通にif文などで、
if( [[aValue objectAtIndex:iCnt] isEqualToString:NSLocalizedString(@”tyouseigo”,@””)] )
みたいに判定すれば、無事判定してくれます。
ほんとに、これにははまったなぁ・・・(–;
そんでもって、実行・・・
Xcodeok
うっし、無事取得できたぞ。(ほんとはこんなに簡単には取得できてなくて試行錯誤してます(^^;)
これで、なんとか日足は取得できるぞ。