2012年2月24日金曜日

マーケットスピードからのリアルタイムな株価抜き

楽天証券のマケスピから株価やら出来高を受け取る方法は、一般的にはRSSだと思う。
自分も最初は、エクセルではなくDDE通信でリアルタイムに値を受け取って
Cのプログラムで日経平均やら急騰銘柄の検出をやろうとした時期がある。
実際、リアルタイムに値を受け取ることができた。
300銘柄からのホットリンク通信で値を取り込み、ログに書きだす事もできる。
これは簡単。

ただ、このやり方には問題があった。
RSSの価格と本体の方の値動きがかなり時間差がある。ザラバの急騰銘柄を検出して
即発注しようとしているのに、この時間差は無視できない。
しかもRSSの銘柄の上限数は、300だし。

そこで、マーケットスピード本体の方から値をぶっこ抜こうと試みた。
多重起動のできるらしいし。

一般的に知られている方法としては、Softgate で配布しているものを利用したりするのだが
C#な上に、DLLインジェクションを行なっていて さらに非公開のI/Fを使っているので
MarketSpeedのバージョンがあがると使えなくなる可能性がある。
そして、最近はメンテされていないようだ。

だから、こう考えた。

目で見えているんだから、マケスピ上に刻々と変化する数字をキャプチャし、文字認識方法だ。

で、実際やってみた。
MarketSpeedのWindowハンドルを取得し Client領域のビットマップを取得する。
ウィンドウが重なったりすると、原理上キャプチャできないが これで フルカラーの
ビットマップが得られる。
銘柄コード・価格・出来高の数字は、黄色・赤・緑の色いづれかなのでこれで2値化を行う。
さらに反転表示されている場合は、その領域を反転してからこの処理を実施する。



白黒2値のキャプチャ画像が得られた所で、領域分割を行う。
行毎に隙間があるのと、項目毎のX座標を予め記憶させ
目的の銘柄の株価なり出来高なりを文字認識により得る。

この方法は実際うまくいった。
しかし、処理が重かった。

全画面に広げたアプリをキャプチャして毎回画像処理してるのだから
当然というば当然だが、かなり悔しかった。
1アプリでこの有様だから、多重起動しても さらに処理が追いつかないだろう。

そして、次のアイデアにたどり着くことになる。(次の記事へ続く)






0 件のコメント:

コメントを投稿