前回の振り返り
前回は Jupyter を導入して、作業の効率化を図った。
how-to-make-stock-trading-system.dogwood008.com
今回の内容
今回は、株取引に避けては通れない、手数料の計算を導入する。
変更内容
今回の変更内容を下記に記す。行数としては少ないが、変更を加える手順が前々回までと異なっているので、続けて説明する。
(前略) if __name__ == '__main__': (中略) # Add the Data Feed to Cerebro cerebro.adddata(data) # Set our desired cash start cerebro.broker.setcash(100000.0) + # 簡単にするため、 + # 手数料を購入・手仕舞い額の 3.98% にする + # (auカブコム証券、制度信用1日分に相当) + cerebro.broker.setcommission(commission=0.0398)
変更方法
まず、 docker-compose up
で Jupyter Notebook を起動して、表示されたURLにアクセスする。
$ docker-compose up (中略) app_1 | or http://127.0.0.1:8888/?token=fb737(中略)f1eda
次に、前回作成したファイルを開く。ここでは、 main.ipynb
という名前を付けておいたので、それを開く。
下記の通り、今回の変更内容を挿入する。
あとは昨日同様、 Cell
→ Run All
でグラフを出力する。
実行結果
手数料無しの場合
今回の実行結果を見る前に、前回までの実行結果を見てみよう。下記の図がそれである。このバックテストでは、最初の現金を 100,000
から始めており、バックテスト後の評価額を一見すると、儲かっているように見える。
手数料有り(3.98%)の場合
次に、手数料有りの場合を見てみよう。評価額が大幅に減っていることがわかるだろうか。どうやら、このストラテジーは、取引毎に課される手数料を 3.98%
取られると、利益をだせないようである。
手数料有り(0.3%)の場合
最後に、手数料が 0.3%
の場合を見てみよう。下記のものがそれである。これ位の手数料率でやっと利益が出るくらいであることがわかるだろうか。
高頻度取引は手数料との闘い
もしあなたが作ろうとしている取引アルゴリズムが、例えばデイトレードのように高頻度に取引を行うものならば、如何に手数料を抑えるかが肝になってくるだろう。
「1日の総約定代金」に対して手数料が課され、かつ一定金額までは無料という証券会社1もある。これらの証券会社をいくつか契約し、口座に資金を分散して投入しておき、手数料が無料になる上限まで注文が通ったら、その後は次の証券会社へ注文を出す、といったようなことが理論上は可能である。高頻度取引を行う人は、こういった手数料を抑えるための対策を検討しても良いかもしれない。