BackcastPro 0.0.3__py3-none-any.whl → 0.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of BackcastPro might be problematic. Click here for more details.

BackcastPro/__init__.py CHANGED
@@ -1,8 +1,15 @@
1
1
  """
2
- ## マニュアル
2
+ BackcastPro をご利用いただきありがとうございます。
3
3
 
4
- * [**クイックスタート ユーザーガイド**](../examples/Quick Start User Guide.py)
4
+ インストール後のご案内(インストール済みユーザー向け)
5
5
 
6
+ - ドキュメント総合トップ: https://botteryosuke.github.io/BackcastPro/
7
+ - クイックスタート/チュートリアル: https://botteryosuke.github.io/BackcastPro/tutorial
8
+ - APIリファレンス: https://botteryosuke.github.io/BackcastPro/api-reference
9
+ - 高度な使い方: https://botteryosuke.github.io/BackcastPro/advanced-usage
10
+ - トラブルシューティング: https://botteryosuke.github.io/BackcastPro/troubleshooting
11
+
12
+ ※ 使い始めはチュートリアル → 詳細はAPIリファレンスをご参照ください。
6
13
  """
7
14
  from .backtest import Backtest
8
15
  from .strategy import Strategy
BackcastPro/_broker.py CHANGED
@@ -19,15 +19,32 @@ if TYPE_CHECKING:
19
19
 
20
20
  class _Broker:
21
21
  """
22
- data
23
- cash
24
- spread
25
- commission
26
- margin
27
- trade_on_close
28
- hedging
29
- exclusive_orders
30
- index
22
+ バックテストにおける証券取引の実行、注文管理、ポジション管理、損益計算を担当します。
23
+ 実際の証券会社のブローカー機能をシミュレートし、リアルな取引環境を提供します。
24
+
25
+ Parameters
26
+ ----------
27
+ data : pd.DataFrame
28
+ 取引対象の価格データ。Open, High, Low, Closeの列を持つ必要があります。
29
+ cash : float
30
+ 初期現金残高。正の値である必要があります。
31
+ spread : float
32
+ ビッドアスクスプレッド(買値と売値の差)。取引コストとして使用されます。
33
+ commission : float or tuple or callable
34
+ 手数料の設定方法:
35
+ - float: 相対手数料(例: 0.001 = 0.1%)
36
+ - tuple: (固定手数料, 相対手数料) の組み合わせ
37
+ - callable: カスタム手数料計算関数 (size, price) -> 手数料
38
+ margin : float
39
+ 必要証拠金率(0 < margin <= 1)。レバレッジ = 1/margin として計算されます。
40
+ trade_on_close : bool
41
+ 取引を終値で実行するかどうか。Trueの場合、次の始値ではなく現在の終値で取引します。
42
+ hedging : bool
43
+ ヘッジングモードの有効化。Trueの場合、反対方向のポジションを同時に保有できます。
44
+ exclusive_orders : bool
45
+ 排他的注文モード。Trueの場合、新しい注文が前のポジションを自動的にクローズします。
46
+ index : pd.Index
47
+ 時系列データのインデックス。エクイティカーブの記録に使用されます。
31
48
  """
32
49
  # Tips:
33
50
  # 関数定義における`*`の意味
@@ -150,6 +167,14 @@ class _Broker:
150
167
  margin_used = sum(trade.value / self._leverage for trade in self.trades)
151
168
  return max(0, self.equity - margin_used)
152
169
 
170
+ @property
171
+ def cash(self):
172
+ return self._cash
173
+
174
+ @property
175
+ def commission(self):
176
+ return self._commission
177
+
153
178
  def next(self):
154
179
  i = self._i = len(self._data) - 1
155
180
  self._process_orders()
BackcastPro/backtest.py CHANGED
@@ -9,6 +9,7 @@ from typing import Optional, Tuple, Type, Union
9
9
 
10
10
  import numpy as np
11
11
  import pandas as pd
12
+ from tqdm import tqdm # プログレスバー
12
13
 
13
14
  from ._broker import _Broker
14
15
  from ._stats import compute_stats
@@ -160,6 +161,10 @@ class Backtest:
160
161
  self._strategy = strategy
161
162
  self._results: Optional[pd.Series] = None
162
163
  self._finalize_trades = bool(finalize_trades)
164
+
165
+ # 初期化パラメータを保存(実行後に振り返るため)
166
+ self._cash = cash
167
+ self._commission = commission
163
168
 
164
169
  def run(self) -> pd.Series:
165
170
  """
@@ -220,6 +225,9 @@ class Backtest:
220
225
 
221
226
  strategy.init()
222
227
 
228
+ # strategy.init()で加工されたdataを再登録
229
+ self._data = data
230
+
223
231
  # インジケーターがまだ「ウォームアップ」中の最初の数本のキャンドルをスキップ
224
232
  # 少なくとも2つのエントリが利用可能になるように+1
225
233
  start = 1
@@ -228,7 +236,15 @@ class Backtest:
228
236
  # np.nan >= 3は無効ではない;Falseです。
229
237
  with np.errstate(invalid='ignore'):
230
238
 
231
- for i in range(start, len(self._data)):
239
+ # プログレスバーを表示
240
+ progress_bar = tqdm(range(start, len(self._data)),
241
+ desc="バックテスト実行中",
242
+ unit="step",
243
+ ncols=120,
244
+ leave=True,
245
+ dynamic_ncols=True)
246
+
247
+ for i in progress_bar:
232
248
  # 注文処理とブローカー関連の処理
233
249
  data = self._data.iloc[:i]
234
250
  try:
@@ -240,6 +256,14 @@ class Backtest:
240
256
  # 次のティック、バークローズ直前
241
257
  strategy._data = data
242
258
  strategy.next()
259
+
260
+ # プログレスバーの説明を更新(現在の日付を表示)
261
+ if hasattr(self._data.index, 'strftime') and i > 0:
262
+ try:
263
+ current_date = self._data.index[i-1].strftime('%Y-%m-%d')
264
+ progress_bar.set_postfix({"日付": current_date})
265
+ except:
266
+ pass
243
267
  else:
244
268
  if self._finalize_trades is True:
245
269
  # 統計を生成するために残っているオープン取引をクローズ
@@ -105,6 +105,9 @@ def DataReader(code: str,
105
105
  if col in df.columns:
106
106
  df[col] = pd.to_numeric(df[col], errors='coerce')
107
107
 
108
+ # Add code column to the DataFrame
109
+ df['code'] = code
110
+
108
111
  return df
109
112
 
110
113
  except requests.exceptions.RequestException as e:
@@ -1,6 +1,6 @@
1
1
  """Data and utilities for testing."""
2
2
 
3
- from .datareader import DataReader, JapanStocks
3
+ from .JapanStock import DataReader, JapanStocks
4
4
 
5
5
 
6
6
  TOYOTA = DataReader('72030')
BackcastPro/order.py CHANGED
@@ -20,9 +20,6 @@ class Order:
20
20
  キャンセルして新しい注文を出してください。
21
21
 
22
22
  すべての出された注文は[取消注文まで有効]です。
23
-
24
- [filled]: https://www.investopedia.com/terms/f/fill.asp
25
- [Good 'Til Canceled]: https://www.investopedia.com/terms/g/gtc.asp
26
23
  """
27
24
  def __init__(self, broker: '_Broker',
28
25
  size: float,
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: BackcastPro
3
+ Version: 0.0.5
4
+ Summary: トレーディング戦略のためのPythonバックテストライブラリ
5
+ Author-email: botterYosuke <yosuke.sasazawa@gmail.com>
6
+ Project-URL: Homepage, https://github.com/botterYosuke/BackcastPro/
7
+ Project-URL: Issues, https://github.com/BackcastPro/BackcastPro/issues
8
+ Project-URL: Logo, https://raw.githubusercontent.com/BackcastPro/BackcastPro/main/docs/img/logo.drawio.svg
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Operating System :: OS Independent
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Requires-Python: >=3.9
13
+ Description-Content-Type: text/markdown
14
+
15
+ # <img src="https://raw.githubusercontent.com/botterYosuke/BackcastPro/main/docs/img/logo.drawio.svg" alt="BackcastPro Logo" width="40" height="24"> BackcastPro
16
+
17
+ トレーディング戦略のためのPythonバックテストライブラリ。
18
+
19
+ ## インストール(Windows)
20
+
21
+ ### PyPIから(エンドユーザー向け)
22
+
23
+ ```powershell
24
+ py -m pip install BackcastPro
25
+ ```
26
+
27
+ ### 開発用インストール
28
+
29
+ 開発用に、リポジトリをクローンして開発モードでインストールします。
30
+
31
+ ```powershell
32
+ git clone <repository-url>
33
+ cd BackcastPro
34
+ py -m venv .venv
35
+ .\.venv\Scripts\Activate.ps1
36
+ py -m pip install -e .
37
+ py -m pip install -r requirements.txt
38
+ ```
39
+
40
+ **開発モードインストール(py -m pip install -e .)**
41
+ - プロジェクトを開発モードでインストールします
42
+ - `src` ディレクトリが自動的に Python パスに追加されます
43
+
44
+ ## 使用方法
45
+
46
+ ```python
47
+ from BackcastPro import Strategy, Backtest
48
+ from BackcastPro.data import DataReader, JapanStocks
49
+
50
+ # ここにトレーディング戦略の実装を記述
51
+ ```
52
+
53
+ ## ドキュメント
54
+
55
+ - [ドキュメント一覧](https://github.com/botterYosuke/BackcastPro/blob/main/docs/index.md)
56
+
57
+ ## バグ報告 / サポート
58
+
59
+ - バグ報告や要望は GitHub Issues へ
60
+ - 質問は Discord コミュニティへ([招待リンク](https://discord.gg/fzJTbpzE))
61
+ - 使い方はドキュメントをご参照ください
62
+
@@ -0,0 +1,14 @@
1
+ BackcastPro/__init__.py,sha256=bjVAcDM_rMCxRUjtt3Mz-HTKTIRdcfiMeWfJZOrL2Qk,782
2
+ BackcastPro/_broker.py,sha256=RSI4nOcUG24qfRYEiVI0niWjZ2jqr0RrFA12xVvLIvw,19877
3
+ BackcastPro/_stats.py,sha256=Omcx4BgfddBvnmkYHn4b49TXqCgHYr9McKk46qMKNuM,7843
4
+ BackcastPro/backtest.py,sha256=YL37lPtLK8pRwfLi1EaMThtMu7tz6JSRFLzevT653ik,15025
5
+ BackcastPro/order.py,sha256=6-BkY0PbDaQnVuJ2Vb4pUczmMhlvTO0KmgJ7xb5Pu_M,5501
6
+ BackcastPro/position.py,sha256=7G1fKrCLuW8QACN4mWNvR-6yrk_X9ERFLbqo97LKuX0,2236
7
+ BackcastPro/strategy.py,sha256=KhVXH62QxivI_6C3-7CxjXPXMQ--VMOL3as2iHBGegw,7207
8
+ BackcastPro/trade.py,sha256=8pDyIh96NmzPgEDkYB9h2lekHl3wdK6JeZ5Ix3y8wWQ,7162
9
+ BackcastPro/data/JapanStock.py,sha256=lIyns7Hh7tbGudwOpZ6Dmqf6ucqY8i5VDPNTYyn6hhI,6235
10
+ BackcastPro/data/__init__.py,sha256=3JFR9MCMMlKAaFwP9YGzp3bRnCkKdO5tyG4dpx9KDF4,126
11
+ backcastpro-0.0.5.dist-info/METADATA,sha256=QKvEw7xq_Zwu1HO39jo6LCPjX0P6YzOgS4nl6_0Ylhg,2147
12
+ backcastpro-0.0.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
+ backcastpro-0.0.5.dist-info/top_level.txt,sha256=GiP-TX_Bc2jjwHS9cx0VCrW27e9JPbhWWnqGxa5B4Fs,12
14
+ backcastpro-0.0.5.dist-info/RECORD,,
@@ -1,59 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: BackcastPro
3
- Version: 0.0.3
4
- Summary: トレーディング戦略のためのPythonバックテストライブラリ
5
- Author-email: botterYosuke <yosuke.sasazawa@gmail.com>
6
- Project-URL: Homepage, https://BackcastPro.github.io/BackcastPro/
7
- Project-URL: Issues, https://github.com/BackcastPro/BackcastPro/issues
8
- Project-URL: Logo, https://raw.githubusercontent.com/BackcastPro/BackcastPro/main/docs/img/logo.png
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Operating System :: OS Independent
11
- Classifier: License :: OSI Approved :: MIT License
12
- Requires-Python: >=3.9
13
- Description-Content-Type: text/markdown
14
-
15
- # BackcastPro
16
-
17
- トレーディング戦略のためのPythonバックテストライブラリ。
18
-
19
- ## インストール
20
-
21
- ### PyPIから(エンドユーザー向け)
22
-
23
- ```bash
24
- pip install BackcastPro
25
- ```
26
-
27
- ### 開発用インストール
28
-
29
- 開発用に、リポジトリをクローンして開発モードでインストールしてください:
30
-
31
- ```bash
32
- git clone <repository-url>
33
- cd BackcastPro
34
- pip install -e .
35
- ```
36
-
37
- **開発モードインストール(pip install -e .)**
38
- - 上記で実行したpip install -e .コマンドは、プロジェクトを開発モードでインストールしました
39
- - これにより、srcディレクトリが自動的にPythonパスに追加されます
40
-
41
- ## 使用方法
42
-
43
- ```python
44
- from BackcastPro import Strategy, Backtest
45
- from BackcastPro.lib import resample_apply
46
-
47
- # ここにトレーディング戦略の実装を記述
48
- ```
49
-
50
- ## ドキュメント
51
-
52
- - [PyPIへのデプロイ方法](./docs/How%20to%20deploy%20to%20PyPI.md)
53
- - [サンプル](./docs/examples/)
54
-
55
- ## バグ報告
56
-
57
- バグを報告したり、[ディスカッションボード](https://discord.gg/fzJTbpzE)に投稿する前に、
58
-
59
-
@@ -1,14 +0,0 @@
1
- BackcastPro/__init__.py,sha256=1PPRDL8uh_fE35shzswg3f1XrqVMNBJ1N6H7ZTqSzPg,191
2
- BackcastPro/_broker.py,sha256=5n6SR9wqEZz2s68iIrp7x3v7vhh6zL8ichfoYZPsquA,18191
3
- BackcastPro/_stats.py,sha256=Omcx4BgfddBvnmkYHn4b49TXqCgHYr9McKk46qMKNuM,7843
4
- BackcastPro/backtest.py,sha256=jcLzq9kOFYpm0u3FdXen92kPfKxdMkM4COVS9pbc_kA,13947
5
- BackcastPro/order.py,sha256=JuPJah6Mcm4Qr0wzOCex4hTmqXU96HGGRDiIl7_rsiQ,5636
6
- BackcastPro/position.py,sha256=7G1fKrCLuW8QACN4mWNvR-6yrk_X9ERFLbqo97LKuX0,2236
7
- BackcastPro/strategy.py,sha256=KhVXH62QxivI_6C3-7CxjXPXMQ--VMOL3as2iHBGegw,7207
8
- BackcastPro/trade.py,sha256=8pDyIh96NmzPgEDkYB9h2lekHl3wdK6JeZ5Ix3y8wWQ,7162
9
- BackcastPro/data/__init__.py,sha256=qSf674-OW7fQj48y6VqJW3Y_fSqwj9pAGhFS2u_s5ik,126
10
- BackcastPro/data/datareader.py,sha256=dhJ6BBmj713rD_Ks8mKm2o1MiLf4uG3YwS3xnEb1_cw,6154
11
- backcastpro-0.0.3.dist-info/METADATA,sha256=P-fyxj4jZWfnpIAYbQUmI1T0Eq-ZwsdEd3lWFmY9_wQ,1848
12
- backcastpro-0.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
- backcastpro-0.0.3.dist-info/top_level.txt,sha256=GiP-TX_Bc2jjwHS9cx0VCrW27e9JPbhWWnqGxa5B4Fs,12
14
- backcastpro-0.0.3.dist-info/RECORD,,