昨日の振り返りと今日やること
how-to-make-stock-trading-system.dogwood008.com
昨日は Dockerfile 内で pipenv sync
を呼ぶ事で、固定したバージョンで backtrader をインストールした。今日は backtrader の最初のサンプルを実行する。
メインの Python スクリプトを作成する
まずは、backtrader の Docs にある、 Basic Setup から、ソースをコピーしてくる。下記を main.py
という名前で保存しておく。
なお、先頭の2行分は、 Python 2 で実行した時用なので、今回は必要1ない。
# 以下引用: mementum, "Quickstart Guide - Backtrader", # "https://www.backtrader.com/docu/quickstart/quickstart/#basic-setup", # アクセス日:2020年10月23日, コメント部は著者による from __future__ import (absolute_import, division, print_function, # ←この行は要らない unicode_literals) # ←この行は要らない import backtrader as bt if __name__ == '__main__': cerebro = bt.Cerebro() print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue()) cerebro.run() print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
Dockerfile の修正
次に、 main.py
を Docker から見えるようにする2。
昨日の記事では ADD
命令をしようしたが、脚注にも書いたとおり、 ADD
命令より COPY
命令の方が好ましいので、それに書き換えた上で最後にも命令を追加する。
FROM python:3.8.6 LABEL maintainer="dogwood008" ARG workdir=/app RUN mkdir $workdir WORKDIR $workdir COPY Pipfile $workdir # ← ADD から COPY へ変更 COPY Pipfile.lock $workdir # ← ADD から COPY へ変更 COPY main.py $workdir # ←追加 RUN pip install --upgrade pip && \ pip install pipenv && \ pipenv sync CMD ["pipenv", "run", "python", "main.py"] # ←追加
Makefile の修正とビルド
次に、 Makefile (便利スクリプト)も書き換えておこう。
build: docker build -t dogwood008/backtrader . run: docker run --rm -it dogwood008/backtrader bash up: # ←追加 docker run --rm -it dogwood008/backtrader # ←追加
この状態で make build
を実行すると、前回と同じようにイメージがビルドされる。
$ make build docker build -t dogwood008/backtrader . [+] Building 1.9s (12/12) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 342B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/python:3.8.6 1.9s => [1/7] FROM docker.io/library/python:3.8.6@sha256:0d3333986c2684c699fefa9f39767bd185980ac6 0.0s => [internal] load build context 0.0s => => transferring context: 88B 0.0s => CACHED [2/7] RUN mkdir /app 0.0s => CACHED [3/7] WORKDIR /app 0.0s => CACHED [4/7] COPY Pipfile /app 0.0s => CACHED [5/7] COPY Pipfile.lock /app 0.0s => CACHED [6/7] COPY main.py /app 0.0s => CACHED [7/7] RUN pip install --upgrade pip && pip install pipenv && pipenv sync 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:c2bcf0dd34712bc0283434e12cc38818fbf61fba8479241c95511fad3d4d11fb 0.0s => => naming to docker.io/dogwood008/backtrader
実行
昨日は make run
で実行したが、今日は make up
で実行する。違いはコマンドの最後に bash
が入っていない点である。これにより、 Dockerfile
の CMD
命令で指定した命令が自動的に実行される。
$ make up docker run --rm -it dogwood008/backtrader Starting Portfolio Value: 10000.00 Final Portfolio Value: 10000.00
Portfolio Value
が表示されたらOKだ。自動的に実行が終了し、コンテナからも抜けるようになった。これで最初の一歩が終わり!
-
今回は Python 3.8 系を使用している。↩
-
後日別の記事で書くが、少なくとも開発時に於いては、このやり方はスクリプトの中身を書き換える度にビルドが必要であり不便である。発展課題としては Volume を マウントするのが良いだろう。今日の記事ではスキップする。↩