開発の動機
当時、利用している証券会社のシステムが物足りなく信用できないものであったため自作しました。でも自分で作成した後、まもなくネット証券側もシステムをリニューアルして、自分のものより遥に高機能なものに置き換わったのですが、損益グラフを表示した時にグラフのメモリ幅を変更出来ないため見にくいという不満があったりするので、その点でまだは自分のソフトの方が優れているかなと思っています。まぁオプション売買を活発にしている人はそれ程多くないと思いますので、証券会社も力を入れていないのだと思います。5社ほどで取引したことありますが、そもそもオプション売買のシミュレーション機能なんて無い証券会社もありました。
最近は自分もあまりオプション取引をしていないのでよく知りませんが、今ではWebベースでもWindowsネイティブソフト並にユーザインターフェースに凝ったソフトを提供している証券会社があるかもしれません。
機能
- 日経225先物、日経225先物ミニ、日経225オプション(CALL,PUT)の建玉を一つのポジション、複数のポジションをまとめたものをストラテジーとして、ユーザ毎の複数のストラテジーの保存。
- 複数の建玉の売買シミュレーションと損益推移(個別・合算)グラフを表示
※ブラックショールズモデルを利用したオプション理論価格計算に対応しているので、満期(SQ)時の損益だけでなく、現時点での原資産価格(日経225先物価格)毎の損益推移を表示出来ます - twitterを利用したユーザー認証とポジションをtwitterで呟く
ER図
UserモデルとStrategyモデルが1対多、StrategyモデルとPositionモデルが1対多で関連付けられている単純なテーブル構造です。
他のテーブルと関連付けられていないCandlestickモデルというのはネット上に転がっている先物価格のロウソク足用のcsvデータを流し込むためのテーブルで、ヒストリカル・ボラティリティ(HV)を計算するためだけに使用しています。HVの計算方法には色々あるようですが、自分が使用したのはここに記載されている方法に倣っています。
気が向いたときにcsvデータを手動で更新するという運用の仕方をしてました。画面から手入力するとその値を優先して使用するようにしているので、実際にはHVを手入力して使うことが多かったです。開発当時は無かったのですが、今なら日経平均ボラティリティインデックスがリアルタイムで更新されているのでその値を手入力する方がいいかもしれません。20%(日経平均VIが20ポイント)であれば0.2を入力します。このHVの値を使ってオプション理論価格を算出します。
※ボラティリティにはHVとは別にインプライド・ボラティリティ(IV)というものがありますが、ボラティリティに関しては別記事を書こうと思います。
テーブル構造
-
Userテーブル
名称 内容 例 name サイト内で使用する独自のユーザ名 provider twitter認証APIで返される文字列 “twitter” screen_name twitter認証APIで返される文字列 “SappierBoy” uid twitter認証APIで返される文字列 “1111111111” -
Strategyテーブル
名称 内容 例 draw_type 損益グラフを個別表示するか合算表示するか 1,未定義 interest 金利 0.02 name ストラテジー名 “abc戦略” range グラフの幅デフォルト500とした相対数値で拡大・縮小 500 sigma オプション理論価格計算に使用するボラティリティ(HV) 0.2 -
Positionテーブル
名称 内容 例 distinct 商品種別(日経225先物、日経225先物mini、CALLオプション、PUTオプション) exercise 行使価格(オプションの場合のみ、先物の場合はnil) 0.02 expiration 限月(満期月) “2014/06” maturity 残存日数(1日に満たない場合も日数換算) 0.1~365 number オプション理論価格計算に使用するボラティリティ 0.2 sale 売り、買いの区別 unit 商品単価 -
Candlestickテーブル
※どこから先物価格のデータを取得するかでテーブル構造は変わるので省略します。必要なのはオプションの原資産となる先物価格の終値20日分です。私が利用していたのはこのサイトです。
以下のようにcsvデータをダウンロード
wget -O ./lib/futures.csv "https://k-db.com/site/jikeiretsuF.aspx?c=101&year=0&download=csv"
csvデータから先物価格データを格納
rails runner Candlestick::biteoff