【ITニュース解説】Inside the Portfolio: How Stocksimpy Tracks Trades and Value
ITニュース概要
Stocksimpyは、Pythonのバックテストライブラリ。Portfolioクラスは、現金、取引、株式の記録を担当。DRY原則に基づき、取引ロジックの重複を避ける。現金の保持、売買操作、履歴追跡が主な機能。defaultdict(int)で辞書のキーエラーを解決。独立して動作し、複数の株式に対応。今後はバックテストロジックを実装予定。
ITニュース解説
この記事は、Pythonで株式のバックテスティングライブラリ「Stocksimpy」を開発する過程を紹介する連載の一部だ。今回は、ポートフォリオの管理に特化した「Portfolio」クラスの設計と実装について解説する。 バックテスティングとは、過去の株価データを用いて、特定の投資戦略がどれくらいの利益を上げられたかを検証する手法だ。Stocksimpyは、このバックテスティングを簡単に行えるようにするためのライブラリとして開発されている。 記事では、なぜポートフォリオを管理するクラスが必要なのか、そしてPortfolioクラスが具体的にどのような役割を担うのかを説明している。 まず、ポートフォリオを管理するクラスが必要な理由として、「Don't Repeat Yourself (DRY)」の原則を挙げている。DRY原則とは、同じコードを何度も書くことを避け、再利用可能な形でコードを記述することを推奨するソフトウェア開発の原則だ。バックテスティングのロジック内で現金の流れや株式の保有状況を管理することも可能だが、同じような処理を何度も記述する必要が生じる。そこで、Portfolioクラスを作成することで、現金の流れや株式の保有状況の管理を一元化し、コードの重複を避けることができる。 また、Portfolioクラスを持つことで、バックテスティングのロジックと現金の流れの管理を分離できるという利点もある。これにより、コードの見通しが良くなり、メンテナンスが容易になる。もし、現金の流れに関する処理に誤りがあった場合でも、Portfolioクラスのみを修正すればよく、バックテスティング全体のコードを修正する必要はない。 次に、Portfolioクラスの3つの主要な役割について解説する。 1つ目は、現金と株式の保有状況の記録だ。Portfolioクラスは、利用可能な現金(self.cash)と、保有している株式(self.holdings)を記録する。これらの情報を一箇所で管理することで、誤りを防ぎ、コードをより簡潔に保つことができる。 2つ目は、株式の売買操作の実行だ。バックテスティングのループから直接現金や株式の保有状況にアクセスすることを避け、Portfolioクラスが売買操作を担うように設計されている。売買操作を実行するためには、株式の現在の価格を知る必要があるが、Portfolioクラスは独立して使用できることが望ましい。そこで、exec_trade()メソッドに価格をパラメータとして渡すことで、この問題を解決している。exec_trade()メソッドは、株式の売買を実行し、現金と株式の保有状況を更新する役割を担う。 3つ目は、取引履歴の追跡だ。ユーザーは、シミュレーションが株式を売買した際のポートフォリオの変化や、全体の評価額を知りたいと考えるだろう。そのため、Portfolioクラスは、すべての取引をself.trade_logに記録する_log_trade()メソッドを備えている。これにより、ユーザーは過去の取引履歴を簡単に確認できる。 記事では、Portfolioクラスの具体的な使用例も示されている。初期資本を10,000ドルとしてPortfolioクラスを初期化し、NVDAという銘柄の株式を10株、1株あたり170ドルで購入する例が示されている。 また、Pythonの辞書型において、存在しないキーに対して値をインクリメントしようとするとエラーが発生するという問題についても触れている。この問題に対して、Pythonのcollectionsモジュールからdefaultdict(int)を使用することで、新しいキーを自動的に0で初期化し、問題をスマートに解決する方法を紹介している。 最後に、Portfolioクラスは独立して動作するように設計されており、カスタムのバックテスティングループで使用できること、複数の株式を問題なく処理できることを述べている。 記事は、読者に対して、Stocksimpyに対する提案や改善点があれば、著者のSNSやコメントを通じて知らせてほしいと呼びかけている。そして、このライブラリが、定量分析を始めたばかりの人々にとって役立つものになることを願っている。 この記事を読むことで、読者はポートフォリオ管理クラスの重要性、具体的な設計、そして実装方法について学ぶことができる。これは、システムエンジニアを目指す初心者にとって、ソフトウェア設計の原則や具体的なコーディング技術を学ぶ上で非常に有益だ。