ワクワクワーク
VBの利用
いろいろ作成していると、似たような関数をたくさん作る羽目になりバージョン管理が苦痛になってきました。
オブジェクト指向で進めたいのですが、VBAではカプセル化しかできないので、Implemenets宣言の利用も考えましたが、非常に不便な代物なので、諦めました。
VBを利用しようかなと思っています。
しかし、このサイトでオブジェクト指向で検索するとひとつもヒットしないので、これは止めたほうがいいのかなと不安に感じました。
すでにVB利用なさっている方がいらっしゃったら、ぜひ事情を教えてください。
宜しくお願い致します。
2020年07月10日
ワクワクワーク
補足です。
結局、VBからRSSの関数を呼び出すだけなのですから、特に問題はないように思うのですが、ような議論が今までないということは、何か重要な問題があるのかなと推測しています。
杞憂ならいいのですが,、、
2020年07月10日
大野 了
ワクワクワークさん、こんにちは!!
VBというのは、VBAではなく、VB.Netのことでしょうかー?
以下、VB.Netという事で・・・
自分も同じようなことを、
いろいろとやったんですが、最終的にVBAに落ち着いてしまいましたw
自分がやってた時は、C#だったのですが、
COMなどでExcelをコントロールする形ではなく、
VSTOを作ってExcelのアドインとして動かしていました。
自分はシステムトレーダーなので検証のためのバックテストを必ずやるのですが、
まず、C#で作ったシステムでバックテストを行い、
使えそうなロジックが出来たら、
そのまま、そのバックテストのソースコードから、
VSOTにリビルドして、Excelに流し込んでました。
これだと、オブジェクト指向な言語かつ1ソースでバックテストも運用もでき、
運用時はVSTOで低コストでシステムを稼働させることができます。
とはいえ、デバックなどで若干面倒な部分もあり、
最終的には、VBAで頑張って動かすという感じに落ち着きましたw
もしバックテストなどを考えずに、オブジェクト指向言語だけを使用して
生産性を上げるのが目的ならば・・・
以下の方法かなーと思います。
1.メインロジックはVB.Netで作成し、実際の発注は最小限度のVBAを作り
VB.NetからはCOMなどを利用しコントロールする。
※Excelをインターフェースの様に使い、
岡三RSSとのやり取りだけはExcelを経由する感じです。
2.VB.NetでVSTOを作って発注させる。
作るのは若干面倒ですが、こいつが一番安定すると思います。
3.岡三RSSのモジュールを直接叩く
ちょろっと見た感じ、岡三RSSはマネージド型のプログラムの様ですので、
ログインの処理などの仕様が解析できるのであれば、
VB.Netなどから使うには一番良いかもしれません。
VBA・・・
通常の言語に慣れてると面倒ですよね・・・
2020年07月10日
大野 了
あっ、捕捉が出てきた・・・
個人的には、特段、問題は無いと思います。
自分の知り合いも、PythonとRubyから使われている方がいるのと、
逆に、メインはVBAで統計系の計算の部分だけ、Pythonを呼び出す
という方もおられます!!
ここで質問が上がらないのは、
もしかしたら他の言語からRSSを使おうとされる方は、
そのまま気にせずにやられてるだけかもですw
2020年07月10日
ワクワクワーク
大野さん
なるほどVBAに落ち着かれたのですね。
>とはいえ、デバックなどで若干面倒な部分もあり、
最終的には、VBAで頑張って動かすという感じに落ち着きましたw
なんとなくわかるような(笑)
どちらのバグかの切り分けの問題ですか?
>3.岡三RSSのモジュールを直接叩く
確かに、ログインの処理などの仕様が解析できるのであれば、
これが一番簡単そうですが、その部分のハードル高そうですね。
大野さんご自身は、ログインの処理などの仕様が解析はいかがでしたか?
お差支えなければ、できたかどうかだけでも教えていただけると、ありがたいです。
2020年07月10日
大野 了
>どちらのバグかの切り分けの問題ですか?
もう、数年も前の話なので、
もしかすると今は違うかも&俺のやり方が悪かっただけかもしれませんが、
自分がやってた時は、VSTOのアプリでVBA側のデバッグ自体が出来なくて、
ログとか埋め込みながらやってたのですが、途中で面倒になって・・・
『そんなことより、ロジックをもっと作らなきゃ』
とそっちに注力してたら、面倒になってしまいました(笑
>大野さんご自身は、ログインの処理などの仕様が解析はいかがでしたか?
>お差支えなければ、できたかどうかだけでも教えていただけると、ありがたいです。
作ろうと思ったのが、岡三RSSがVer1の頃で今の岡三RSSとは大きく違うのであれですが、
正確な結果だけ言うと『挫折するよりも前に、途中で止めた』という感じになります(笑
VSで読み込むだけでメソッドなどは見ることが出来て、
名前から大体の動きは予想できます。
ただ・・・
メソッドを使う順序とか戻ってくるオブジェクトの中身の解析とか
そこらへんはトライ&エラーで調査しないといけない感じです。
エラー時の処理とかまで考えた時は、
意外と時間が掛かりそうで、妄想で不安定なシステムを作るよりも、
VSTOで作れば安全でいつも使ってる言語でできるやん・・・
という感じで終わりました。
トライ&エラーやってる時に、もし相手側のシステムに影響を与えてしまった場合は
目も当てられないですし・・・
2020年07月11日
ワクワクワーク
>自分はシステムトレーダーなので検証のためのバックテストを必ずやるのですが、
バックテストのことも教えていただきありがとうございます。
RSSにはMT4のようなバックテスト環境はないので、ご自分でRSSと連動したバックテスト環境を作っていらっしゃるのですか?
頭が下がります。素晴らしいですね。
2020年07月10日
大野 了
はい、連動という感じだと少し異なりますが、
RSSでデータをとってきて、
それをC#側でバックテストするシステムを作っています。
VBAでもできないことはないのですが、遅すぎて・・・
今はマルチスレッドでやってるんですが、GPGPUでやれるように変更してるところです!!
2020年07月11日
ワクワクワーク
貴重な体験を披露いただき、興味深いお話を伺え、大変参考になりました。
本当にありがとうございます。
なるほど、ログインの処理などの仕様が解析はやはり避けたほうがよさそうですね😃
バックテスト(シミュレーシ)処理系をご自分でC#で用意なさっているのですね。
GPGPUを使われるほどの計算量があるというと、アルゴリズムの最適性を総当たりで計算なさっているのですか?
実際、それが確実かもしれませんね。
お話を踏まえて、私は、とりあえず出来合いのバックテスト処理系に先物データを流し込んで、そのバックテスト処理系の言語でシミュレーションをして、素性のいいアルゴリズムをVBAで書き直そうと思います。
アナログな方法ですが、アルゴリズムさえ決まれば、その実装コーディング自体は簡単ですから、そのほうがアルゴリズムのコードを書き直す手間だけで済み、かえって簡単そうです。
その後再考したのですが、VBAのクラスモジュールの範囲内でも、継承が使えないことを逆手にとって、多様性(ポリモーフィズム)について工夫する余地がありそうです。
それなら、岡三RSSの謎なデータ構造を解析する努力よりも、簡単な気がします (笑)
というのも、私は割と単純な取引アルゴリズムで勝負したいからです。
私も、以前は皆さんご存じの遺伝的アルゴリズムや強化学習をはじめとしていろいろ試してみました。
しかし、しょせん局所最適解ですし、大域的な傾向もわからないから、無意味だと悟りました。
そのような手法で組合せ探索的によいアルゴリズムを調べようとしても、しばしばカーブフィッティング(つまり非大域的な局所最適解)に陥るだけのように感じます。
総当たりには勝てません。
DLは局所性にはより頑健ですが、結果がブラックボックス(正確に言うと人間に結果の直観的理解ができない)でしかももはや(Pythonライブラリなどの形で)コモディティであるので、やはり使う気になれません。
ライブラリの豊富さ(とハードウェアの速さ)を追求するなら、クラウドサービスを使うのもいいかもしれませんが、上記の理由からあまり考えていないです💦
2020年07月12日
大野 了
ワクワクワークさん
>なるほど、ログインの処理などの仕様が解析はやはり避けたほうがよさそうですね😃
仕様を公開して頂けるとありがたいですけどねー(笑
>GPGPUを使われるほどの計算量があるというと、アルゴリズムの最適性を総当たりで計算なさっているのですか?
はい、自分は2段階でやってまして―
ひとつひとつのストラテジの最適性はほぼ総当たり
最終的なストラテジの組み合わせは、遺伝的アルゴリズムやニュートン法などの数理最適化を行って出しています。
ストラテジも増えてきたので、終わるの待ってると眠くなっちゃうので、
数秒で結果が返ってほしいなーと・・・(笑
遺伝的アルゴリズムやニュートン法で、もし大域的最適解がたまたま引けたとしても
それ自体がカーブフィッティングしてる可能性もあるので、
結果が局所か大域かという以前に、自分はどうしても周辺領域の結果が欲しくなります。
>お話を踏まえて、私は、とりあえず出来合いのバックテスト処理系に先物データを流し込んで、そのバックテスト処理系の言語でシミュレーションをして、素性のいいアルゴリズムをVBAで書き直そうと思います。
自分も最終的に同じような流れでやってます(笑
>VBAのクラスモジュールの範囲内でも、継承が使えないことを逆手にとって、多様性(ポリモーフィズム)について工夫する余地がありそうです。
VBAのクラスは名前が紛らわしいのですが、
オブジェクト指向で言うところのクラスとは違い、
元来はCOMインターフェースなどのためにあるクラスっぽいので、
オブジェクト指向でいうクラス的なことはあきらめたが良いかもしれません!!
それでも、もうちょっと使いやすいと良いんですけどねー
>私も、以前は皆さんご存じの遺伝的アルゴリズムや強化学習をはじめとしていろいろ試してみました。
>しかし、しょせん局所最適解ですし、大域的な傾向もわからないから、無意味だと悟りました。
>DLは局所性にはより頑健ですが、結果がブラックボックス(正確に言うと人間に結果の直観的理解ができない)でしかももはや(Pythonライブラリなどの形で)コモディティであるので、やはり使う気になれません。
そうなんですよねー
DLしかりRNNしかり、はじき出された計算式が人間的に納得できない事も多く・・・
まーそんなこと気にすることが間違いなんでしょうけど・・・(笑
過学習させちゃうことも多々あり、未だに実践投入できるようなものが出来ていません(笑
2020年07月12日