株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

バックテスト環境の構築

CSV取得処理をDockerイメージ化して再利用・自動化 その5

「Docker コンテナによる自動的なファイル同期」ができるような Docker イメージの作成は、打ち切ることとする。 費用対効果が悪いので、別のアプローチの方がよさそうだ。 ツールを使った場合と同等以下の同期速度になるような Linux 用スクリプトを作成し…

CSV取得処理をDockerイメージ化して再利用・自動化 その4

引き続き docker run するだけでCSVを取得してくれる便利 Docker イメージを作成しようともがいている。 how-to-make-stock-trading-system.dogwood008.com どうやってもうまくいかないので、いっそ ServerCore である mcr.microsoft.com/windows/servercore…

CSV取得処理をDockerイメージ化して再利用・自動化 その3

引き続き Docker の Windows コンテナの中で WebDAV サーバをドライブとしてマウントしようとしているが、うまくいかない。 how-to-make-stock-trading-system.dogwood008.com System Error 53 System error 67 has occurred. とエラーが出るばかりで、マウ…

CSV取得処理をDockerイメージ化して再利用・自動化 その2

昨日の記事に引き続き、Dockerで Windows 用のイメージを作っていく。ただし、引き続き試行錯誤中なので、まだ完全に動くわけではない。 今日は `Dockerfile` から呼び出される `files\init.ps1` を紹介する。

CSV取得処理をDockerイメージ化して再利用・自動化 その1

Windows Server 2016にて、下記を自動で行う Docker イメージを作ろうとしている。 Docker イメージからコンテナを作れば、スケジューラに `docker run` を自動実行するようにさえ設定すれば、実行したタイミングで最新のものに同期してくれるのがメリットで…

戦略:前日比x%以下で買い、前日比y%以上で売り その12 アナライザの使用

昨日の記事で、 `backtrader.Analyzer` を使えば、バックテストの結果を解析することができそうだという技術メモを残した。今日はそれを実際に使っていく。試しに「ドローダウン」と「年次リターン」を表示するように変更する。

戦略:前日比x%以下で買い、前日比y%以上で売り その11 微修正・注文量の調整

昨日の記事に一部誤りがあったので修正する。 how-to-make-stock-trading-system.dogwood008.com ログ出力用の部分で FIXME が残っていたので、それを下記の通り修正したのみ。 price=open_today, unit=size, open_today=open_today, close_yesterday=close_…

戦略:前日比x%以下で買い、前日比y%以上で売り その10 真・注文量の調整

昨日の記事を受けて、動くものを作り直した。 how-to-make-stock-trading-system.dogwood008.com 必要な部分のみ抜粋し、その内容を下記の通り掲載する。 (前略) def _size(self, unit_price: float, is_buy: bool) -> Optional[int]: ''' Params --------…

戦略:前日比x%以下で買い、前日比y%以上で売り その9 注文量の調整

昨日の記事で、一旦戦略は完成したものの、注文量の調整については未着手だった。 how-to-make-stock-trading-system.dogwood008.com そこで bt.Sizer を使用して注文量の調整を行う為、下記を参考に実装していた。 www.backtrader.com しかし、結果として、…

戦略:前日比x%以下で買い、前日比y%以上で売り その8 一旦完成

バックテスト用の戦略1個目が(一旦)完成しました。ライセンスをGPLにして配付しているので、誰でも無料で閲覧できます。

戦略:前日比x%以下で買い、前日比y%以上で売り その7

昨日に引き続き、公式のドキュメントで怪しいと思った部分を翻訳していく。 how-to-make-stock-trading-system.dogwood008.com <原文> The current data has already happened and cannot be used to execcute an order. If the logic in the strategy is …

戦略:前日比x%以下で買い、前日比y%以上で売り その6

下記は前回までの記事。 how-to-make-stock-trading-system.dogwood008.com 注文が通らない理由が、だんだんわかってきた気がする。 www.backtrader.com The current data has already happened and cannot be used to execcute an order. If the logic in t…

戦略:前日比x%以下で買い、前日比y%以上で売り その5

上記は昨日の記事。引き続きうまく注文が通らないので、アタックしている。 にっちもさっちもいかないので、一旦与えているパラメータに誤りが無いかを見直すことにする。 下記は buy() に渡すパラメータのうち、 exectype のものを抜粋したものである。 exe…

戦略:前日比x%以下で買い、前日比y%以上で売り その4

前回の記事は下記の通り。 how-to-make-stock-trading-system.dogwood008.com しかし、注文が依然として通らない。困った。 下記はbacktraderから出力されたログである。 [DEBUG] 2020-11-18, Expired: Buy ¥xxx,100 (@xxx1.00 * 100) ←前日の注文が有効期限…

戦略:前日比x%以下で買い、前日比y%以上で売り その3

昨日に引き続き戦略を作成していく。但し未だ完成していないので途中経過を添付する。 how-to-make-stock-trading-system.dogwood008.com import backtrader as bt from logging import getLogger, StreamHandler, Formatter, DEBUG, INFO if USE_BOKEH: fro…

戦略:前日比x%以下で買い、前日比y%以上で売り その2

昨日は大まかな戦略の方針を定めた。 how-to-make-stock-trading-system.dogwood008.com この方針に従って実装を進めていく。まだ完成はしていないが、戦略の部分だけ途中経過を公開する。 import backtrader as bt from logging import getLogger, StreamHa…

戦略:前日比x%以下で買い、前日比y%以上で売り その1

概要 方針 用意する現金を100万円にする 信用取引を使用する 10-50万円を購入金額にする 建玉は全て買い 最小取引単位の買い注文と、全量売り注文 買い注文は始値と前日終値の比が▲x%を下回ったとき 売り注文は前日終値の比が+y%を上回ったとき 概要 下記で…

Backtrader で KABU+ のデータを読めるようにする その8

昨日の記事ではうまく動かせなかったが、それを修正して動くようにしたのが本日の記事である。 how-to-make-stock-trading-system.dogwood008.com backtrader_plotting を動かす都合上、 Google Colab では TestStrategyWithLogger クラスを別ファイル test_…

Backtrader で KABU+ のデータを読めるようにする その7

昨日まででKABU+のCSVを読み込んで Backtrader でバックテストをする準備が整った。 github.com ここで、下記のスクリプトを実行しようとしているが、期待通りに動かないので現在修正中。 github.com -----------------------------------------------------…

Backtrader で KABU+ のデータを読めるようにする その5

昨日は元の呼び出し部分をそのままコピーしてきて、 KabuPlusJPCSVData クラスに再実装することで、確かにそのメソッド内で失敗することを確認した。 how-to-make-stock-trading-system.dogwood008.com 今日以降はそれを受けて、実際に呼び出し部で失敗しな…

Backtrader で KABU+ のデータを読めるようにする その4

昨日の記事では転けている箇所とその行数、およびその行が所属するメソッドを特定した。 how-to-make-stock-trading-system.dogwood008.com 今回は、標準で bt.feeds.YahooFinanceCSVData に用意されているパーサである _loadline() メソッドを上書きするた…

Backtrader で KABU+ のデータを読めるようにする その3

昨日は、どの辺で転けているかの特定を行った。 how-to-make-stock-trading-system.dogwood008.com 具体的には、 h = float(linetokens[next(i)]) で転けている。 /usr/local/lib/python3.6/dist-packages/backtrader/feeds/yahoo.py in _loadline(self, lin…

Backtrader で KABU+ のデータを読めるようにする その2

これの続きをやっていく。 how-to-make-stock-trading-system.dogwood008.com 下記を参考に、本当に必要な部分のみを記載して実行してみる。なお、諸般の事情によりGoogle Colabを使用して実行する。 how-to-make-stock-trading-system.dogwood008.com なお…

Backtrader で KABU+ のデータを読めるようにする その1

how-to-make-stock-trading-system.dogwood008.com の続き。 japan-stock-prices_2020_7974.csv で読めるようにする。 class KabuPlusJPCSVData(bt.feeds.YahooFinanceCSVData): ''' Parses pre-downloaded Yahoo Japan CSV Data Feeds (or locally generate…

Kabu + のプロキシを作る - nginx.conf を設定して、APIサーバとして待ち受ける

振り返り nginx の設定ファイル nginx.conf nginx 振り返り ここまで下記の記事のようにプロキシを作るとして連載してきたが、振り返ってみると「プロキシサーバ」が一般的に指すものではなく、「代理で値を取得&キャッシュしておくAPIサーバ」を作ってきた…

Kabu + のプロキシを作る - Windows Server のポート開放

手順 動作確認 今後 nginxに外からアクセスできるようにするため、Windows ファイアウォールの設定を変更して、待ち受けポートを開放する。 手順 サーバーマネージャー → セキュリティが強化された Windows ファイアウォール 受信の規則 → 新しい規則... ポ…

Kabu + のプロキシを作る - nginxの待ち受けポートを変える

何故ポートを変えるのか 基本的に、HTTPのデフォルトポートは 80 、HTTPSは 443 である。これはPublicにするAPIサーバであれば、従う方が良い。なぜなら、アクセスの度にポートを指定しなくて良いからである。 では、何故そのポートを変えるのか。今回作成す…

Kabu + のプロキシを作る - nginx on Windows でプロキシ

今日はメモ程度。Windows の中でnginxをホストして、指定したポートを開けておけばそとからアクセスできるようになった。これでほぼ確実にプロキシサーバの構築が可能な目処が立った。参考にしたサイトは下記の通り。 nginx.org mode-n.jp qiita.com

Kabu + のプロキシを作る - サーバを何にするか

昨日までの記事で、いよいよCSVを自分のサーバ向けに配信できる環境が整った。 how-to-make-stock-trading-system.dogwood008.com Windowsで動いている都合上、色々と不便があるので、WSL2 を入れて ほぼ Linux にしたかったのだが、どうもさくらのVPSで提供…

Kabu + のプロキシを作る - WebDAV の同期ツールで個別株のヒストリカルデータを取得できない問題に対処

結論 取説の後ろの方に記載があった内容で解決する。具体的にはレジストリの編集を行う事で、1つのディレクトリ内のファイル数上限を2000万個まで許容する。 症状 同期ツールを実行すると、 「システムに接続されたデバイスが機能していません。」 と表示が…

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.