【PanActiveMarketDatabaseのヘルプを参照すれば道は開けるだろう】

 

天の声が聞こえてきた週末。そのヘルプはどこにあるのか?から迷走する。何せ本来はMacユーザーだ。インストールしたプログラムファイルと一緒にCドライブのどこそこにあると書かれていてもそこまでたどり着く方法がわからない。隠しフォルダとかほんとやめて。

 

どれだけ歩き続けただろう。砂漠の真ん中でとうとう石板を見つけた。

 

『Dim C() As String, N() As String』

 

CはCode、NはNameということだからこれが間違いなく宝の地図だ。

 

でもC()ってこれVBAの変数じゃないよね?別のプログラム言語の話しよね?

 

ヘルプに書いてあるサンプルコードがまったくもって不親切。コピペしてももちろん動かない。()は定まらない何かを示しているのではないか、C(3)とかならデータの数は4個。銘柄の総数はたまに変わる。()ってことはつまりDBにある銘柄全体くさいと閃いてからは手が動くようになった。

 

 

 

 

ほどなくしてボボボと文字列が現れる。

 

 

 

 

出たぁぁあぁぁぁぁあぁ!!!

 

温泉を掘っていてお湯が噴き出した時はきっと同じような気持ちなるだろう。デジタルトランスフォーメーションとはこのことか。

 

自分でコードを書いておきながらどうして表示されたのかさっぱりわからない。

ともあれこれでまた先に進める。詰んでないス。

全銘柄の時系列データ自動抽出でまたも問題発生。

 

楽天RSSで抽出された全銘柄リストのうち、チャートギャラリーのデータベースに存在しない銘柄があるようで、その銘柄コードを入力してしまうと途端にエラーを吐いてマクロが停止してしまう。

 

上場がらみの処理中なのか取引が行われていない銘柄のようだ。おそらくそんな銘柄はいくつか存在するはずで、どっちみちこういった銘柄はトレードしないのだから、ごそっと対象外にしてしまいたい。つまり出来高が0なんだからその条件で除外してしまえ。

 

またエラー。ETNと表記されている銘柄は一部上場で出来高があるのにチャートギャラリーには存在しない。ETFの親戚か何かだろう。エラーを起こした銘柄コードをひとつずつ拾って地道に除外リスト化することを考えた。

 

エクセルにはオートフィルタ機能というものがあって、配列でカンマ区切りにすれば抽出条件を文字列として指定できるようだ。しかし実運用上はそういった銘柄の入れ替えが不定期に発生するはずで、いちいちVBAコードを開いてアレイの中身をメンテナンスするというのは労働でしかない。うまくねぇな・・

 

せめてリストを別セルに作って列単位で指定できないものか。グーグル様よ。

 

あったありました。安定の検索力。

 

 

 

 

それでもリストにない曲者銘柄コードが発生したらエラーを起こし、そのたびにメンテナンスしなければならない。それでは完全自動化にはならない。詰んだか。

 

別の道を歩もう。いっそチャートギャラリーに収容されている全銘柄リストを取得したいな。そっちは日々パンローリング社にメンテされてるんだから都度これを読み込ませるマクロならノーメンテ楽勝じゃないか。やってみるか。

楽天RSSの銘柄情報からすべての上場企業リストを取得するシリーズです。

 

1001から9999までの数値を楽天RSSに代入して銘柄情報を抽出するのも苦労。そして銘柄が存在しないコードを省くのもまた苦労なのでした。

 

エラーを吐いたり、無反応だったりとメソッドが通用しないのです。

 

ググって出てくるような方法は総当たりで試しましたので、結果としては成功です。正常に動作しつつ最もシンプルなコードとして以下を採用させていただきました。クリーンな4142全銘柄リストを無事ゲット。感謝!

 

 

このシートの銘柄コードを上から順に取得し変数に代入して PanActiveMaketDatabese から時系列データを抜き出す作業へと移行します。多少タイムロスしているな。どうにか週末までには売買シグナル出しを完成させたいね。

 

これをGoogle語に翻訳すると・・・

 

【VBA 指定行から最終行までのセルの数値を順番に取得する】 かな。お茶休憩したらいっちょやってみよう。

 

 

 

楽天RSSを使って本日時点で上場中の全銘柄コードリストを引っ張ってくるぞ大作戦。

 

RssMarket関数があればイチコロでしょうと思っていたら全然そんなことはなかった。。

 

まず、同時にエクセルに表示できる上限が500ということで全然足りないので、ライブ表示させたセルの値を別のセルにコピーしてライブのセルに入った関数を消すことで上限を回復するというのがセオリーのようだ。

 

実際にやってみると、セル内に【表示上限超過】というエラーが返ってきてしまう。300銘柄にしてみても状況はあまり変わらない。なぜなんだ。同時表示数を楽天サーバーのほうで計算しているのだろうから、そのタイムラグがあると予想し、時間差で処理する方法を考えた。

 

しかし、これも不安定で使い物にならない。表示されたり、されなかったりするのはどうしてなんだ。プロシージャの実行方法がRSSの表示に影響しているのかもと仮説を立て、ググってみると有力な情報を得た。

 

http://www.max.hi-ho.ne.jp/happy/YNxv9c13.html

 

なぁるほど、相性の良い絶妙な処理メソッドというのがあるのだな。

 

というわけで、コードを手直しして最適な設定とするとやっとまともに動き出した。

 

【全銘柄の取得には処理時間を10分ほどかけよ】ということだね。これにて完全な銘柄コードを手に入れたぞぅ。

 

 

 

今日はここまで!おつかれちゃん

「東証に存在しない銘柄のコードを入力すると回避できない実行エラーが起こる問題」

 

証券コード i = 1001 TO 9999  これをどうにかエラーを吐かせないように入力していきたいのだが・・・

 

風呂に入ってボーッとしていたら、解決方法が思いついた。簡単なことだった。

 

「データベースに存在しているコードを入力すれば良い」んじゃないか!!

 

楽天RSSから抜き出してな!

 

楽天RSSの関数 RssMarket(xxxx,銘柄なんちゃら)のxxxxに4桁の証券コードを入力すると、銘柄情報をリアルタイムでセルに表示してくれる。試しに存在しないコードを入れてみたが、何も表示されない・・

 

そう、エラーが起こらないんだわ。 

 

ここになら i = 1001 TO 9999 で1キザミで放り込めるではないですか。しかも毎日更新されて最新のデータを維持できる。楽天RSSの同時表示銘柄数は500らしいけど、1001 TO 1500、1501 TO 2000 といった具合で処理を分割すれば問題ないはずだ。

 

晩飯も済ませたし、ようし今夜は眠くなるまでやるぞぅ。

 

残業なんて何年ぶりだろう。無理ー

 

 

 

1銘柄の検証ができるところまでのツールが完成したところだったので、午前中は無駄なコードやグラフを削除して軽量コンパクトなファイルに改修した。満足。

 

次は東証全銘柄についてスクリーニングしたい。

 

ここで一つ問題が発生した。Pan Active Market Database に銘柄コードを入力して株価データを取得する際に、データベースに存在しないコードを入力するとVBA上でエラーとなり、処理が止まってしまう。「On Errorステートメント」で対応することができそうだったので、コードを入力するも、エラー処理が動作しない。On Errorと書いてあるのに無視していつもの黄色いヤツが出てしまうのだ。

 

 

 

エラーをスルー出来ればFor文で1づつコードを足し上げることで、いずれ存在する銘柄コードとなる手筈だった。

 

Pan Active Market Database側のプログラムで優先度が高く設定されているのか、VBAにとってイレギュラーな処理なんだろうか。わからぬ。

 

まぁなにしろ現状では存在しないコードを入力することができないわけだ。

 

参考図書として買っておいた「Rubyではじめるシステムトレード」では、このエラーについて触れられていて回避方法も指南されているがVBAには適用できない。まさかこの作業のみのために知識ゼロからRubyとSQLiteを紐解くとか。学習コストが・・・

 

晩酌しながら何か策を練ることにする。

 

今日はここまでおつかれちゃん。背中いてぇ。

今回はSQ日の15時少し前と16時半に分けて2単位エントリした。

 

有利な指値となるように板の面倒を見たからか、早速多少の利益が出ている。この優良指値?を自動化できないものだろうか。人間ができることなら自動化できるよね。

 

さっさと株の自動売買システムを完成させて、オプション取引の自動化ロボをつくりたい。

 

VBAの手直しは順調に進んでいる。分析ボタンで検証すると、シグナルはだいたい理論値通りに出ていることを確認した。過去15年分のトレード収益シミュレーションもしっかり表示されていて嬉しい。

 

これでひとまず「使える」エクセルファイルになった。

 

明日からはこのファイルに書き込んだプロシージャとオリジナル関数をベースに、東証の全銘柄をスクリーニングできるようなものに改修したい。

 

はい今日もよくやったお疲れちゃん。

 

さていよいよこの日を迎えることができた。

 

初めてのエクセルVBAで移動平均やRSIなどを組み合わせた、オリジナル手法のシステムトレード検証である。

 

すべてのコードは書き終えた。3年分の時系列データをチャートギャラリープロから読み込んである。

 

いざ、分析ボタンを押してみようじゃないか!ポチっとな

 

動いたぁぁぁぁぁぁ!!!

 

 

 

 

しかし、集計値がおかしい。まぁどこかの数式が間違っているのだろう。期間中4回あったシグナルは逃していないようだ。

 

それだけでもトレードに一応は使えるもんね。

 

では今週はここまでとしておこう。改修はまた来週のお愉しみということで。

いよいよ6月に新しくなった(らしい)楽天RSSの導入だ。

 

参考となる動画があまりなかったが、楽天証券のヘルプを読みながらエクセル上でどうにか動くところまでもってこれた。

 

途中でファイルが壊れたらしく、手戻りしたが+半日ぐらいは想定内。これでファンダメンタルズ分析が可能となった。

 

今見たらRSSデータが消えていた。そんなこともあるかもと値をコピーして加工する仕様にしておいたので問題は少ない(あるにはある)。表示されるのはザラバ中だけなのかな。

 

ともあれ今日もおつかれちゃん。