FC2ブログ
現役プログラマー村健の、投資に役立つプログラムを作るための勉強ブログです。 自動売買、システムトレードに挑戦!します。 勉強と習得の成果を記録です。
本ブログについて
本ブログは、プログラマー観点で投資への対費用効果を上げるために何ができるか?を考えていくブログです。
基本的には、ツール作成・公開、投資に関わるプログラム情報、最終的には 完全なる自動売買を目指しています。

現在、HPの方で現在作成中のツールや発注ロジックなどを公開中です。
プログラムからのIE操作で、スレッドにより複数タブの制御を行っているのですが、「objIE.Document.ParentWindow」へのアクセス部分でキャストの例外(InvalidCastException)が発生しました。
調べてみると、スレッドでSTAではなくMTAでアクセスした場合に、本現象が発生するようです。
現状の実装がBackgroundWorkerを使っているため、MTAとなっていました。
以下コードで検証し、MTAだとダメでSTAだとOKになるのを確認できました。

テストコードはこちら

http://social.msdn.microsoft.com/Forums/ja-JP/ac4ae328-a700-4404-8c8f-e72fb22753ce/exception-occurs-when-ihtmlwindow2-window-thedocparentwindow?forum=ieextensiondevelopment
http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/6d122f94-7533-4daa-98de-b31fe4f5794f/backgroundworkerrpcecallrejected?forum=csharpgeneralja

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
スポンサーサイト



HPの見直しにあわせて、ツールも見直しを。

過去に作ったVB2005のツールをVB2008に変換してみたり。
slnファイルをVB2008で開けばウィザードがでてVB2008用のファイルに変換してくれますが、.NetFrameworkのバージョンはVB2005は2.0ですがVB2008は3.5です。
WindowsXP以上を使ってる方は.Net3.5はインストールできるのですが、Windows2000の人は.Net2.0までしかインストールできないので、このままではWindows2000ユーザは使えなくなってしまいます。
なので、VB2008で作成する.Netのバージョンを2.0、3.0、3.5から選択できるので、2.0にしました。
コンパイル→詳細コンパイルオプション
で選択できます。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
HPで公開しているDDE通信API制御DLLについて、
使い方の質問のメールを頂きました。

HPの更新もあまりできておらず、同様に思われている方もいるかもしれませんので、メールの回答部分を以下に一部引用します。


~~~~引用ここから~~~~

WindowにはDDE通信を行うAPI(user32.dll)の関数が既に備わっているのですが、
VB.NETで扱う為には引数や戻り値などの型をあわせる必要があります。
(hconv型→System.IntPtrな感じで。
C言語の型にあわせる必要があるので、VB.NETの型で互換性があるものを使う)
ツールを作ろうとしている時はここを調べるだけでも何日もかかったので、せっ
かくなのでVB.NETで簡単に扱えるようにDLL化した次第です。

このDLLでDDE通信を行うためのAPI関数には簡単にアクセスできるのですが、
DDE通信を行うための設定の手順はかなり複雑です。
この手順を簡略化したDLLも公開する予定だったのですが、こちらも頓挫しています。
(どこかのサイトで公開されていた気がしますが、覚えてないです)
それなので、各自でプログラミングしてもらう必要があります。

参考になるサイトとしては、
http://www.kumei.ne.jp/c_lang/sdk2/sdk_155.htm
などがあります。
C言語で、解読はかなり難しいと思われます。
(昔はもっと良いサイトもあったものですが)
DDEの関数を扱っている場所を重点的にみると良いと思います。

あと、約1年前に作成していた時にブログに少しだけ情報を書き込んでいます
(プログラムのカテゴリ)


~~~~引用ここまで~~~~

一生懸命つくっていた時期からもう一年近くたつようです。
いつかどこかのタイミングで気を引き締めないといけないですね。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
前からHP用に「Webからデータを取得するプログラムの組み方」のページを作っていたのですが、完成するにはまだまだ時間がかかりそうなので、下書きをのせます。

主要な情報は歯抜けになっていますが、今から始めようと思っている人には多少の役に立つのではないでしょうか。


●抽出

前ページでは、プログラムによるWebページからHTMLを取得する方法を紹介しましたが、
次はHTMLから欲しいデータを取得する方法です。

EXCELのWebクエリによるデータ取得ならば、セルにデータが直接入るのでセルを参照すれば簡単にデータが扱えます。
しかし、操作が簡単な分、速度が遅くなっているので、大量銘柄の操作には向いていません。

そこでプログラム言語の登場です。

プログラムを組んでいる方はご存知だと思いますが、htmlはテキストデータです。
メモ帳で中身を見ることもできます。
データを取得するためには、htmlの記述を理解することが必要です。

データ抽出でよく使われる方法として、文字列操作命令があります。
InStr、Left、Right、StringのIndexOf等を使い、データを見つけて(位置を指定、検索)取り出す方法です。
htmlはテキストデータで文字と同義な為、文字列操作命令を使用するのがイメージとして簡単です。
ただし効率が悪いです。

私がお勧めするのは、正規表現と使う方法と、XMLを使う方法です。

これら、難易度は少し高いですが、覚えてしまえば簡単に扱えます。

○Webクエリ
セルに値が入っているので、比較的簡単です。
情報によってセルの位置が変わるものは注意。
**命令などで項目の位置を特定し、
値を取得するように。


○正規表現を利用する
正規表現の詳しい内容は書籍や他サイトに譲るとして、
ここでは投資情報を取得する場合の簡単な使い方について説明したいと思います。

まず、正規表現を使うことで、パターンに一致する文字を取り出すことができます。

例えば、株価データを含む以下のhtmlであれば、
<>""<>
以下の正規表現を記載することで、
<>""<>
この実行結果が得られます。
<>""<>

○正規表現を確認する

私の場合、作成した正規表現が期待通り動作するか(htmlからデータが正しく取得できるか)の確認のために、
自作の正規表現チェックツールを使用しています。HPに公開しています。
このツール以外にもフリーで使いやすいものもあると思いますよ。

以下、正規表現チェックツールを使った確認の方法です。
・・・
上記をいれると、
・・・
なったと思います。

○正規表現をプログラムで扱う

私の場合は自作DLLのRegu.dllを使用してプログラムを組んでいます。
ここではこの・・・.dllを使って説明してます。
.NETには正規表現を扱うクラスが標準用意されていますので、Regu.dllを使用しなくても可能です。
Regu.dllは.NETの正規表現クラスを使って自分が使いやすくクラス化しただけなので。

EXCELではXXを参照設定すれば正規表現が扱えます。


○XML

XMLの詳しい内容は書籍や他サイトに譲るとして、
ここでは投資情報を取得する場合の簡単な使い方について説明したいと思います。

XMLはタグ構成?です。HTMLもタグ構成?であり、htmlをXMLで扱うことで、簡単にデータが取り出せます。

ただし、HTMLはそのままXMLにできない場合もあります。
例えば
タグに
はありません。そのため、html構文としては正しくてもXMLとしてそのまま設定できないものを修正する必要があります。

同様に修正が必要な場合として、HTMLの構文誤りがあります。
HTMLは少しの構文間違いも、ブラウザが判断して正しく表示されますが、ソース上は構成が誤っている事があります。
このHTMLをそのままXMLに入れてもNGになるので、こういった箇所は正規表現で抽出するか、ソースをプログラムが修正して扱うかする必要があります。

ここらを判断し、HTMLをXML形式として(必要なら変更・修正して)使えるか判断し、
使えなければ正規表現を用いる。のがらく。

検証してはいませんが、XMLより正規表現の方が速度は速いらしい。
扱いはXMLがよい。
正規表現で小さな情報ブロックを取り出し、それをXMLに格納してデータを取り出すやり方が良いかと思います。

○XMLプログラム

EXCELではXXを参照設定すれば、XMLが扱えます。

XMLプログラムには色々な方法がありますが、今回は私が使用している方法で記述します。

以下の
・・・
データを参照したいときは、
・・・


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
HPを更新しました。

最近は、株関係ではありませんが、
Webを操作するプログラムをVBで作成しています。

IE.Document.~を頻繁に使っていますが、
まだプログラムでWebを操作する処理を完全に習得していないので、
すんなりと動かなかったり、いちいち調べなおしたりと、
手間が色々とかかっていました。

それなので、まとめて資料を作ろうと思い立ち、
調査した内容を整理して、ついでにHPに載せました。


最近凝っているUWSCでもWeb操作ができるのですが、
複雑な処理を行いたいので、自由度が高いVBでプログラムを組んでいます。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
仕事で単純で機械的な作業があったので、
そういえばマウス・キーボード操作を自動化できるツールがあったな、
ということで、UWSCを使ってみました。

UWSCは、自動売買系の情報を探しているときにちらほら
見てはいたのですが、自分は自作派だ、と思って試していませんでした。

仕事で試した感じ、ログインやPopupのクリックなど、
そう時間をかけることなく実行スクリプトを組むことができました。
とても便利で、自動で動いているのを見るのはカッコイイです。

プログラム未経験者はスクリプトを組むのは厳しいだろうなと思います。
(マウスやキーの動作をそのまま記憶・実行は簡単にできますが、
例えばこのWindowのPopのボタンを実行、といった事は
スクリプトを組む必要があり、多少なりともプログラム知識が必要です)


このUWSCですが、IE上の動作も自動で実行する事ができます。

どこかでUWSCで発注スクリプトを組んでる、とか見たような気がしますが、
いったいどうやるんでしょうね。

発注に必要なパラメータ(銘柄コード、銘柄数、金額等々)は
どうやって指定するのか、
証券会社のWebページをうまく操作するためにHTMLなどの解析がやりにくい、
と思いました。

うまい方法はあるんですかね?
知っている方はコメント頂けると嬉しいです。。。

まだまだ使い始めでどこまでできるのかは全然把握できてませんが、
便利なツールだなぁという感想です。

でも発注プログラムはVBAかVB.NETが可能性が広がって良いかなと。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
今日は安産祈願の為、鶴岡八幡宮まで。

空いた時間でツール作成を進めました。

株価DBを作成するツールです。

以前作成した分析サポートツールで使用するのがとりあえずの目的です。
ただのDBなので、他にも色々な使い方もあると思います。

ツール自体は完成。
とりあえずで正常に動いてそう。
詳細は後日。

あとは、一通り試してみてバグがないか調査、
画面とか機能を少し使いやすくする、
分析サポートツールと連携がうまくいくか調査、
公開用HPのページ作成、
な感じです。
平日に時間がとれればすぐにでもできるんですが、
なかなかね。他にやりたいこともいっぱいあるのに。。。

さて、このツールも需要はあるんでしょうか。
分析サポートツールのDL数もたいしたことないですし、
あんまり役にたたないのかな?

まぁ学べることもあった事ですし、よしとしましょう。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
今日は運良く定時に帰ることができたので、HPの更新したりツールを作ったり、何しようか?って感じで嬉しいです。
でも結局TVみて終わりそうです。

以前作った指数チェッカーをHPにアップしました。
内容は以前の記事を参考にしてください。

しょぼいツールですけどね。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
今日、松井証券用のプログラムを作ろうかと思っていましたが、
メンテナンス中でできませんでした。

ネタがないので、昨日作ったexcel用VBAのDBアクセスをアップしました。

ただ、わかりやすいように手を加えたりしていないので、
VBA、DBの知識が多少ある人向けですね。
これ
・DBから指定テーブルの全てのデータをSheet2に展開
・展開したデータ(に編集を加えたもの)を別のDBに登録
新と旧のDBのテーブル構成が変わったので、
データを移動するときに簡単にEXCELで編集できるものが
欲しいな、ということでつくりました。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
今日は仕事の一環で、EXCELのVBAでデータベース(以下DB)にアクセスする
処理を作ってました。
以前VC6で作ってたりしたので、すんなり作ることができました。

株価データもDBで扱えた方がだんぜん有利なので、
発注ロジックと同様に、初心者でも簡単に扱える
DB操作ロジックとして公開できればいいですね。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング