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

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

GUI部分の実装

分析のための情報収集は概ね目処がたったことから、
次は、実際に運用をする部分の制作に入る。
当初、様々な指数などはExcelなどでシミュレーションを繰り返して、
有用なもののみをプログラムに組み込み、採用しようと思ったが、
Mac用のExcelがなく、(Excelは存在するが、私は持っていない)
ここまでMacで作ってきたので、データの分析をWindowsでするのも
気が悪いので、Mac上で分析をできるようにしたい。
とりあえず、情報の分析や、各指数などの閲覧用のプログラムを作る。
PerlでCUIなツールを作るのが楽であるが、ここは今後の事もあるので、
GUIで作業できるようにする。
ここは、今までさわらずにいたJavaをさわるのが、一番汎用性がありそうだ。
JavaでのGUIを調べてみると、Swingなどとかかれた本が多数みつかった。
JavaのGUIの定番らしい。
ただ、SWTというものがあって、これは、Javaチックな外観でなく、
Macチックな外観をつくれるようである。
今回はJava初めてで、どうせ苦労するのはわかっているので、
ここは情報の少ないが、見た目のよさげな、SWTを利用することにしたい。
SWTを深く探っていくと、どうも、OSによってネイティブなライブラリを利用する、
そこが、Macらしい外観の根拠でもあるらしい。
とりあえず、Eclipseも適当につかっていて、ライブラリのして方法も今ひとつわからない。
しかたないので、ソースのある場所に、指定のライブラリを置いておくとちゃんと動くようだ。
(後にプロジェクトのプロパティで場所指定できることがわかる)
SWTを使うときに、JFaceというのを使うと、SWTをカプセル化できるようであるので、
こちらも使うことにする。
もう一つ、RCPというが、このJFaceを抽象してくれるようであるが、
私はあまり抽象化は好きではなく、そのまま素で使うことにする。
(抽象化すると、中で動いているSWTの正体がわからないままになりそう)
WindowsやLinuxでは、VisualEditorなるもので、GUIでボタンなどの配置ができるようであるが、
あいにく、Macのみでやりたいので、プログラムに直接コードで作ることにする。

ザラ場取得成功!

今日も、同じ要領で、ザラ場処理をさせる。
今日の稼働時間は、7時から22時でした(^^;
結果は、予想どおり、無事取得!!
今日は、銘柄を25銘柄に増やして作業をしたが、
無事、処理されたようである。
それでも1銘柄1秒程度かかっており、取得だけでも30秒近くの時間がかかっている。
やはり、気配値の取得をするものと、現在値と出来高くらいの取得のものと色分けして、
銘柄数としては100程度は取得できるようにしたい。
これは、実際に稼働しつつ、挑戦していきたい。
とりあえず、シミュレーションをできる環境をつくり、
実際の運用を開始したいと思う。

日中足データの取得・ザラバでテスト

先日のシステムを実際にザラバで稼働させてみた。
テストなんで、今自分がもっている5銘柄でテスト。
まだ、時間での制御はできていないので、午前7時から午後7時半まで取得した(^^;
(要は家出てから帰るまで)
いけてるじゃん。
と、おもったのもつかの間・・。
LOGを見ると1銘柄の取得に2秒もかかっている。
たしかに、解析ロジックは鈍くさいかもしれんけど、2秒もかかることないのに・・。
分析の結果、やはりザラ場は証券会社からのレスポンスが夜に比べて落ちる。(当たり前です)
1銘柄取得するごとにログインしていた(;;)
と、いう致命的な状況でした。
もっと早く気が付けよ・・という内容ですが、
実際に動かさないとわかりませんでした。
明日は、普通に取得できればいいけど・・。
明日は金曜日なので、ここでちゃんと取得しときたい。

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

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

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

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

日中足データの活用

先日までで、とりあえず日足データの取得はできるようになった。
現状のデータで、日足データを解析して、売り買いのシグナルを出し、
翌日の寄りつきで成行or指し値で買いを入れつつ、約定すれば、売りの注文をだせば、
普通にスイングトレードはできそうである。
それであれば注文を自動化せずとも、夜に帰宅後、kabu.comで、買い注文をいれて、
リレー注文で、売り注文をW指し値などでいれれば、対応できる。
ただ、それだと、タイトルの「Macが株取引」でなくなってしまうので、
なんとか、日中にリアルタイムな株価や気配値を見ながら、処理したい。
そんなわけでリアルな日中足データを取得することにする。
問題は、このデータをどこから取得するのか。
HPで調べると本当のリアルタイム株価は価格的にきつい・・・、と、いうか普通に趣味でやるには、
全く無理な金額である。
そんなわけで、
・ 日足データから翌日に動きのあるであろう株を推定する。
・ 証券会社(今回デイトレ用に開設した某e証券)からほぼリアルタイム株価を取得
・ 取得できた株価をデータベースに格納
・ 取得できた銘柄の分析をして、売り買いのシグナルをだす。
・ シグナルによって、実際の売買をする。
と、いった感じで処理しようと思う。
取得する情報は、
・ 取得日時(or取引日時)
・ 取引価格
・ 4値
・ 出来高
・ 気配値(売り買い5本に統一)
などを取得する。
間隔は1分おきくらいでよいかと思っています。
この辺は実際に取得、解析、注文、などのCPUの食い具合などを見ながら
決めたいと思います。
あまり、たくさん、証券会社にリクエストすると、クレームがくるような話も聞きますんで、
常時監視する管理銘柄も、30~50程度になると思います。

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

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

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

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

過去日足データの取得

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