#やっぱり、損するのは怖いんですもの。
株や指数やらを生まれてはじめて買い始めてみたので、システム化できるところはpythonでシステムしてポートフォリオを管理していくこととした。システム化する人間(僕)の取引スタイルはビビりだが、システムの方は、相応のリスクを取っていく予定。VIXや仮想通貨などにも手を出していく。仮想通貨周りは、別途、nim/C++でEOSを触ってみたい。webassemblyの勉強も兼ねて。
システム化の目標は、自分で選定した銘柄のトレードで、ロボアドバイザーwealthnaviの直近の年リターン(10%前後の模様)を超え続けること。
wealthnaviについては、以下あたりを参考に(ベンチマークも兼ねて、僕もwealthnaviを併用していく予定)。
https://akilog.jp/wealthnavi-review/
#きっかけは、「人間のトレード」
先月末のFacebookの株価下落をきっかけに、facebookやtwitterの株の「差分(difference)」を買い始めてみた。いわゆる、CFD(contract for difference、差金決済取引)という奴。値動きは株価連動なので、以下、実株の売買や株価連動ETFにも通用する(最終的には先物などにも通用する話としたい)
せっかくなので、CFDでいろいろググりつつ、夜な夜なその他いくつか買ったり売ったりして、1週間ちょいすごした(米国のものを売買しているので相場が動くのは夜)。
結果、(もちろん、売買の価格差はあるけれど)売買時に手数料はないことを利用して、ちいさな差分をちまちまと利益を出しつつある(以下、その一部)。Twitterはまだ仕込み時期(昨晩は寝落ち中に指値でちまちまと買っていた)。
....ぁ、これGMOクリック証券の発注ツールの画面ね。GMOの宣伝ではないけど。
本来的な価格と思えるところから下がっている、とか、配当利回りが上がっている、とかの理由で買っては、なんとなくここでいいかなというところで売ったり、売らずに保持したり。たぶん、小市民の典型みたいな投資スタイルなのだと思う。Facebookやテスラの株主総会前に鬼のような金額積んで空売りとか、こぇー。。。
ということで、自身の小市民的なスタイルがだいたい分かり、「(僕という)人間のトレード」の限界はだいたい見えたところで、システム化していきたい。実装は、相場が開く前の夜9時ころか、相場がしまった後の午前6時くらいに。
#トレードのシステム化
僕の場合は、「リバランス」指向で。
金融トレードに関するシステムは数多くあり、システム化のアプローチもさまざまだろう。加えて、金融取引独特の用語も多々ある。そもそもテクニカルの意味が、IT業界となんか違うし。
その中で、僕が注目したのはリバランス。
複数の資産や証券に分散投資するポートフォリオ運用において、資産の再配分をリバランスといいます。(初めてでもわかりやすい用語集)
webで見る限り、株、債権、不動産といった値動きが異なるポートフォリオ間での投資比率の調整を意味することが多いようだが、近しい値動きをするターゲット間でもリバランスは機能する。株Fと株Tを持っているとして、株Fが株Tに対し上昇した場合、株Fを利益確定させて得たお金で株Tを買う(その逆も同じ)といった取引もリバランスだ。
僕の場合、先月の急落銘柄兄弟であるFacebook株とTwitter株との間でのリバランスをしばらくの間、やっていく予定。FacebookもTwitterも、規模的にオンリーワンなサービスを提供している企業なので、当面は株価的に手堅い場面が多いだろうとの読みから(もちろん、最近は両社の事業の将来性を疑問視する記事もよく見かけるけどね)。
加えて、こうした個別株と市場全体の指数(主にVolatility IndeX;VIX)との間のリバランスのシステム化も進めて行く予定。この部分がうまくロジック化できれば、ロボアドバイザーに勝てるようになるのではないかと。ただいま、個別株とVIXとの取引の理論面を勉強中。VIX、かなり面白い存在。
#まずは、Facebook株とTwitter株の値動きを取得し比較する。
pandas_datareaderを用いた株価取得
pythonistが株価などを扱う場合は、pandas_datareaderを用いるのが定番。簡単で便利。
ただ、株価APIはインターフェースがけっこう変わってしまうので、要注意。今回は「The Investors Exchange (IEX)」を利用。
インターフェースの詳細は、以下を参照:
http://pandas-datareader.readthedocs.io/en/latest/readers/iex.html
はじめに何も考えずに、今年の両株の値動きをプロットしてみよう。
こんな感じ(他の株に変える時には変数ごと置換するため、ベタに変数名を市場での両株の略称に...)。
import pandas_datareader.data as web
import pandas as pd
import datetime
import matplotlib.pyplot as plt
#データ取得設定
start = datetime.datetime(2018, 1, 1)
end = datetime.datetime(2018, 12, 28)
FB, TWTR ='FB','TWTR'
source= 'iex'
#両株に結合dfを生成
def getMerged(f,t, target):
F,T = f[target], t[target]
df =pd.concat([F,T], axis=1)
df.columns=[f"{FB}-{target}",f"{TWTR}-{target}"]
return df
fb = web.DataReader(FB, source, start, end)
twtr = web.DataReader(TWTR, source, start, end)
dfh =getMerged(fb,twtr,'high') #日高値(high)を指定
dfh.plot()
はい、しょぼいというか動きを読み取りにくいですね。
##相対値化
リバランス目的では、相対値を取ることが大事。
pandasではそのあたりが簡単にできます。まずは、各株の分析1日目の値を1.0とすべく以下のような関数を作る。
#列(対象株)ごとに1行目の値で相対値化
def getNormalizedSl(sl):
sl = sl / sl.iloc[0]
return sl
def getNormalizedDf(df):
df[FB]= getNormalizedSl(df[FB])
df[TWTR]= getNormalizedSl(df[TWTR])
return df
あとは、PythonでPandasのPlot機能を使えばデータ加工からグラフ作成までマジでシームレスあたりを参考に、少しきれいめにプロットしてみる。
7月1日にtwitte株を買った場合、月末には25%以上値下がりしているんですね。。
私の場合、7/28以降に両株買いを増やしていったので、以下のような値動きを追いかけたことになる。
急落以降は、別世界になってますね。今はTwitter株が仕込み時期らしきことが伺える。よし、買うぞ。ちまちまと。
#今後は統計的アプローチを開始
まだまだしょぼいグラフでお手数感満載だけど、株価を自らコードで管理・分析していくと自分のポートフォリオのためのシステムを作っていける。自己の判断を客観視する意味では良いことかと。
ここから先は、「最強の学問」こと統計学を使って、リバランスロジックを組んでいこうと思う。投資のロボアドバイザーが話題なものでAI使って、といきたくなるけど、まぁ、AI使いはほどほどに、だね。
#(参考)この本を情報源にした。
何分、初心者なもので,「個人投資家のためのFinTechプログラミング(日経BPムック)」を情報源とした。リバランスのアイデアはここから。ただ、載っているpython/pandas周りのコードがひどいのがあるので、ひどいコードに嫌悪感抱く人は、読まないように。
あと、アマゾンとアップルの株価で長期リバランスという例題で検証を進めてくれていたが、正直今後の投資戦略には役立たない検証であった。株式投資初心者で、いろいろとググる手間を省きたい人は買ってもいいかも。