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

現在、HPの方で現在作成中のツールや発注ロジックなどを公開中です。
ついにWindows Vistaとoffice2007が発売されましたね。

EXCEL2007では、
1つのシートで最大1,048,576行(2の20乗)、
16,384列(2の14乗)まで扱うことができるらしいです。
今まで大変だった長期過去データの分析などが簡単に行えますね。
(大量データを扱うにはかなりのマシンスペックが必要そうですが)

VBAマクロなんかはどうなってるんでしょうね?
そのまま使う事ができれば現在使用しているプログラムの移行
がスムーズにできるのですが。。。

それにしても価格が高い・・・
乗り換えは当分先になりそうです・・・

今後、EXCELを使ったトレードや分析も、
EXCEL2007に移行していくんでしょうね。


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



現在、HPの見直しを行いながら、次の計画を実施中です。

今まで習得した知識・技術から、
自動売買ツールのベースとなるものができないかを探ってみています。


具体的にやりだしたことは、VBAで公開している各証券会社への
発注ロジックを、VB2005化(.NET2.0のDLL化)しています。

目指すところは効率化の為のプログラムの部品化・共通化なので、
設計の段階からそこのところを考慮していかねばなりません。

全体構想は文章にすると量がありそうなので、
そのうちHPにまとめられればいいかなと思ってます。
まぁ構想自体は自分の考えなので、
他の人が見てもあまり意味ないんでしょうね・・

簡単に言えば、機能を
・情報取得(InfoGet)
・売買分析(Analize)
・発注(Order)
と大きく3つに分けて作成し、またそれぞれの機能が、
・期間(短中長期)、
・トレード手法(ファンダ、テクニカル、徳山式etc)
・発注方法(IE、UWSC、GMO_API)
を用意した処理(DLL)を組み合わせることで実現できるような。

構想がでかすぎてすでに実現不可能な気がしますね(^^;


何度か作って作り直してを繰り返せば、
そのうちにそこそこの物ができるのじゃないかと思っています。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
一週間ほど帰郷します。
プライベートの大イベント関係です。はい。

そのため、メールなどのお返事が遅くなるかもしれませんので、
ご了承下さい。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
家に帰ってからHP更新をぼちぼちと。

さほど量がないサイトなのに、構成を変えるだけでもかなり
時間がかかってしまいます。
長めの時間を取って、整理し直した方が良いなと思ったり。

ただプライベートで大イベントが発生し、忙しくなりそうです。


ブログの左下にQRコードをつけてみました。
携帯でも見れるよ、という方は是非。

ちなみに自分の携帯は3年くらい前の物で、
QRコードを写そうと思ったら専用のレンズみたいなのを
通さないといけません・・・
なのでQRコード使ったことありません。。。

このブログは携帯ではいったいどんな形で表示されるのだろう?
と想像を膨らませてみたりしています。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
仕事も一段落して時間が少しできましたので、
今後の活動予定・方針を挙げます。

・HPの内容が古いので、精査&追加
・作りかけのツールを完成させる。ツールをパワーアップさせる
・情報収集してプログラムネタを探す

基本的には、今まで作った物の見直しを予定しています。
こういったことは時間に余裕があるときにしかできませんしね。

なぜなら、新しいネタはガンガンやる気がでるんですが、
昔やったことを整理したり文章見直したりするのは後ろ向きな感じがして、
モチベーションがなかなかあがらないからです。
他にすることないのでやるかぁって感じでやる気を出していますw

それに、文章編集やプログラムなら仕事中にやっててもばれませんし、
効率的に時間を使えますw

決して仕事をさぼっているわけではなく、自分の担当はさっさと終わらせて
時間が余ってるのですよ。念のため・・・w


見る人がいる・いないに関係なく、自分でなっとくできる物を
作りたいですねー。
実際見る人がいなければ寂しいですが、自分で納得できた物は、
必ず共感してくれる人はいますしね。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
HPGMOインターネット証券の「LocalAPIServer」アクセスDLLを公開しました。

「LocalApiServer」用なので、今は意味がまったくないと思いますが・・・。

正式サービスが開始したら、また正式なアクセスDLLも作る予定ですし。
どこかの有志が作ってくれそうですし。

ソースを見て勉強したい!という方がいらっしゃれば、
運営に協力頂ければ差し上げます。


せっかくの新しいネタだったのですが、
DLLも完成して尽きてしまいました・・・

でも、だいぶ仕事も落ち着いてきて、
中途半端になってたものを片付けるチャンスといえばそうなんですが。

何をどこまでやったかあまり覚えてないので・・・w


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
GMOインターネット証券のLocalAPIServer活用その3です。

●XMLHTTP
ComのMSXMLを使えば、WebアクセスからXMLの扱いまでが簡単に
行えるようです。
バージョンは6.0が最新のようです。

Webへのアクセスは、
Private _objXmlHttp As MSXML2.XMLHTTP
・・・
objXmlHttp.open("GET", url, False)
_objXmlHttp.send()
urlに実行サンプルURLを入れてやれば、応答が格納されます。
あとは_objXmlHttp.response***で取得します。

ちなみに、アプリケーションを終了してもログイン状態は保持されています。
Cookieが継続される為でしょうか?ここら辺はちょっとわかりません。。。

参考
http://x7net.com/~access/AcTipsVbaXMLHTTP.html

●XPath
XPathなら、DosプロンプトでPathを指定するようにXMLを扱えます。

例えば、
_objXmlDoc.selectSingleNode("/loginResponse/message/text()").nodeValue()
こんな記述でアクセスできます。

この方が視覚的にわかりやすいし、変更も容易ですね。

銘柄情報取得メソッドのmarketからの値の取り出しに苦労しました。
複数証券取引所に上場している場合を考えないといけない為です。
サンプルでは東証のみになっているので、、
応答のテンプレートを複数銘柄に書き換えてテスト&処理作成しました。

XPathもまだよくわからないので、できたコードがこれ。
Dim looper
For Each attributeNode As Object In _objXmlDoc.selectNodes("//marketList/market/text()")
ReDim Preserve result.market(looper)
result.market(looper) = attributeNode.nodeValue
looper += 1
Next
もっと良い方法があると思いますが、現状はコレが限界です・・・

参考
http://www.gotdotnet.com/japan/student/column/xml/xmlprogramming8.aspx

●最後に

処理の実現方法がいくつかありましたが、
現状の規模ではどれも速度的には大差ないと思います。

プログラムの難度、コード量、配布サイズでどの方法で実現するか選ぶべきですね。

自分的なお勧めはMSXMLのCOMを使用する方法です。

MSXMLのDLLも配布する場合にサイズが大きくなるのは嫌ですが、
WebアクセスもXMLアクセスも比較的楽なコードで実現でき、
EXCEL_VBAにも流用できそうだからです。


あとは、実際にサービスが始まったときに、どのくらいの修正が入るかです。
まぁここまで理解できていれば楽勝ではないか?と思ったりして・・・。


今回作ったDLLは後で公開します。
まぁ「LocalApiServer」用なので使う意味はないと思いますけど。

コードが欲しい方がいらっしゃれば、運営に協力頂ければ差し上げる
予定です。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
GMOインターネット証券のLocalAPIServer活用その2です。

引き続き、テストツールの開発状況です。

前回までで「LocalAPIServer」からXML形式のメッセージを取得する
処理まで完成しているので、
XML形式からデータを取り出す方法を調査しました。


ちなみに、今回の記事はXML初心者の自分がいろいろ調べながら進める過程を
時系列で綴っており、構成が全くまとまっていないと思います。

お見苦しいと思いますが、ご了承ください。
(単にまとめるのが面倒くさいだけですがw)


●XMLからデータ取得は?

VS.NETには、System.XmlをImportsすれば使用できるXmlTextReaderクラスがあるので、
これで試してみます。

ちなみに、XmlTextReaderクラスはデータ取得元としてURLを指定できるようです。
実行サンプルURLを直接指定する事ができそうですが、
Cookieの設定ができない(できるかもしれないですが、方法がみつけられなかった)ので、
ログイン状態を保持することができませんでした。

前回の処理で、応答メッセージはStreamReaderクラスに格納していると思いますので、
そのままXmlTextReaderの入力データとして指定します。

reader = New StreamReader(responce.GetResponseStream(), Encoding.UTF8)
Dim xmlRdr As New XmlTextReader(reader)

あとはReadメソッドで1つずつ読み込んでいき、
NodeTypeによって要素や値などが判断できます。

While xmlRdr.Read
Select Case xmlRdr.NodeType
Case Xml.XmlNodeType.Element
Console.WriteLine("<{0}>", xmlRdr.Name)
・・・・

これで各要素ごとの値を取得することができるようになりました。

参考サイト
・HIRO's.Net:http://vbdotnet.fc2web.com/VBNET2005/XML/XmlReaderMenu.htm


●データを扱いやすくしたい→XmlDocument

上記により値の取得はできるようになりましたが、
上から順番に読み込んでいくのはデータとして扱いにくいので、
今後の事も考え、要素名(or番号)を指定する事で値を取得できる方法を探してみました。

XmlDocumentクラスを使うことでできるようです。

xmlDoc.Load(reader)でXMLデータを設定します。
データの取り出しは、
xmlDoc.DocumentElement.ChildNodes(1).ChildNodes(0).Value 'responseStatus
の様にノード番号を指定してやることで、そのノードの値が取得できます。

参考サイト
・HIRO's.Net:http://vbdotnet.fc2web.com/VBNET2003/XMLMenu.htm


●EXCEL_VBAでXMLを扱う調査

EXCEL_VBAでXMLを扱う方法を調べました。
COMのMicrosoftXMLを使えばよいようです。
参照設定からMSXMLx.xを追加します。(最新バージョンは6.0)

参考サイト
・http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200605/06050060.txt

IEをCreateする方法&MSXMLでVBAでも動作できそうです。


さらに!
調べを進めてみるとXMLHTTPなるものがありました。
先のMSXMLに実装されているクラスで、WebアクセスもXMLも扱えます。

また、XPathなるものを使用すれば、要素名(responseStatus)を指定して
値を取得することができるようです。

コレらを使えば、今までの処理がすっきりできそうです。
(てかほとんど作り変えか?)


XMLは奥が深すぎです・・・

続きは次回


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
GMOインターネット証券のLocalAPIServer活用その1です。

●前回のレビュー補足

ドキュメントをよく読むと、
「LocalAPIServer」の動作としては
・リクエストパラメータの正当性チェック
・リクエストパラメータの値により、定型テンプレートを応答メッセージにて返却
とありました。
わざわざコードを見る必要もなかったみたいです(^_^;

●テストツールを作成してみる

早速、「LocalApiServer」用のテストツールを作成しようと思います。

開発言語は、無料で高機能なVB.NET2005を使用することにします。

ツールの仕様ですが、第一段階としては、
ドキュメントにある実行サンプルURLを送信し、
応答のXMLメッセージを取得する、
という簡単な作りにします。

機能はたいした事はありませんが、完成すればロジックはほぼ固まるので、
これを足がかりに本格的なツールが開発できると思います。

画面構成は「ログイン」「ログアウト」「情報取得」「」とし、
それぞれのボタン押下で該当するURLメッセージを送信します。


●IEのCreateによる作成

以前、IEのURL欄に実行サンプルURLを直接入力する方法で
動作確認済みなので、
プログラムでIEをCreateして操作する方法で作成してみます。

IEのCreateによってWebにアクセスするツールは今までに
いくつか作成しており(自動発注等)、
自作のIEWebアクセスクラスがあるので、
これらのノウハウを使って作成したところ、
数行程度の入力で完成しました。

処理としては、ボタンを押したときにNavigateのURLとして
それぞれの実行サンプルURLを指定するだけでした。

応答データは、「_objIE.Document.body.innertext」で取得できます。

IEをCreateする処理は、HPで公開しているVBAの
発注プログラムが参考になると思います。


●Webアクセスクラスによる処理

ただ、今回はコントロールへの値設定やボタンクリックなどのIEを必要としない操作なので、
勉強を兼ねてIEを使用しないやり方を探してみました。

すると、WebClientクラスか、WebRequestクラス/WebResponseクラス
によってWebにアクセスできるようです。

WebClientクラスの方が操作が簡単との事なので、
こちらで作成する事にします。

一連の処理を作成しましたが、
ログインがOKとなった後に発注や情報取得を行っても
「ログインがされていない」エラーが応答されてしまい、
処理が行われませんでした。

ドキュメントに「Cookie の設定が無効になっていると正常に動作しません」とあるので、
Cookieの設定が行えていない事が原因と考えられます。

●Cookieの設定

WebClientクラスでCookieを使用する方法が探しても見つかりませんでした。

WebRequestクラス/WebResponseクラスでは幾つか見つかったので、
こちらのクラスで処理を実装する事にします。

結果、予想通りCookieを設定することで、期待通りの動作をしました。

以下に参考にしたサイトを挙げます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/302wcget/wcget.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/311webreqres/webreqres.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html
http://support.microsoft.com/kb/891748/ja

●結論

IEをCreateする方法とWebアクセスクラスを使う方法ですが、
速度的にもさほど変わりはなく(ほんの少しWebアクセスクラスが早い)、
どちらでもいいかな、と思います。

EXCELのVBAで実装する場合は、(今までどおりの)IEのCreateで行えば良いと思います。

あとはXMLの応答メッセージからの値が抽出できれば、
サーバとのやりとり部分はほぼ完成ですね。

時間ができたらブログかHPに公開するかもしれません。
(コード量はかなり少ないです)


実際のサービスが開始したときに
そのまま使えるとは限らないのが要注意ですね。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
GMOインターネット証券のWeb開発キットレビューその2です。

●インストール

付属のドキュメントにしたがって「Local API Server」を
インストールしました。

「Local API Server」はPython&CherryPyで開発されているようです。
(Pythonはフリーなオブジェクト指向プログラミング言語です)
(CherryPyはPythonベースのWeb開発ツールです)

ちなみに、上記は「Local API Server」の開発言語であり、
自作ツールは好きな言語を使用できます。

インストール時に注意した事
・環境変数にパスを追加するために、セミコロンで連結する。
 (末尾に「;C\Python25」を追記)
・.NETでツールを開発する場合はエラー回避手順が必要なので、
 これも実施する。(無料で使えるVB.NET2005にて開発する予定なので)


●実行!

「Local API Server」を起動している状態で、
ドキュメントに記載されている
・ログイン
・銘柄情報要求
・注文要求
・ログアウト
の実行サンプル文をIEのアドレスに入力し、
HTML/XMLにて結果が表示されるのを確認しました。

今回のドキュメントでは、
・株式注文の変更・取消
・株式取引に関わる顧客の注文履歴やポジションの参照
・証券総合口座の余力の参照
のメソッド詳細が記載されていないため、これらの確認はできませんでした。

全ての機能の仕様の公開は、正式なWebサービス開始前に再度仕様が
公表される予定なので、もう少し待つ必要がありそうです。


●解析

仕様が公開されていないメソッドについて、
「Local API Server」に機能自体は実装されているかと思い
コードを見てみましたが、実装されていないようです。

ついでにわかったことは、
処理らしき処理はメソッドのパラメータチェックぐらいしかなく、
応答メッセージとしては用意されているテンプレートを返却する、
だけのようです。

(Pythonは初めてみる言語なので、見落としの可能性もあります)


●結論

取引ツールとして、どのように動作をさせるべきで、
どんなプログラムを組む必要があるか、イメージができました。

ただ、昨年秋に公開するといっていたのに、
出てきたものがたいしたことないのは残念。

サービス開始が間に合わず、でも何も出さないわけにはいかず、
でもあまり内容を解析されたくないので、
でてきたものがコレ、みたいな印象です。

「Local API Server」は別にいらないから(代替は簡単に作れそう)、
仕様を全部公開してほしかったです。


●その他

Pythonに詳しければ、「Local API Server」を改造して
実践に近い動作を行わせることも可能でしょう。
しかし、現状の公開内容ではたいした機能拡張もできず、
あまり意味ないですね。
仕様が公開されるころにはサービス開始するでしょうし。
「Local API Server」もバージョンアップするのでしょうか?
するなら、オフライン環境で思う存分試験ができますね(意味あるのか?)。
有志が何か良いものを作ってくれそうな予感。

メソッドを何かの言語でDLLにしてしまえば、
EXCEL等でも使うことが可能ですね。


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