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 +9 -2
- BackcastPro/_broker.py +34 -9
- BackcastPro/backtest.py +25 -1
- BackcastPro/data/{datareader.py → JapanStock.py} +3 -0
- BackcastPro/data/__init__.py +1 -1
- BackcastPro/order.py +0 -3
- backcastpro-0.0.5.dist-info/METADATA +62 -0
- backcastpro-0.0.5.dist-info/RECORD +14 -0
- backcastpro-0.0.3.dist-info/METADATA +0 -59
- backcastpro-0.0.3.dist-info/RECORD +0 -14
- {backcastpro-0.0.3.dist-info → backcastpro-0.0.5.dist-info}/WHEEL +0 -0
- {backcastpro-0.0.3.dist-info → backcastpro-0.0.5.dist-info}/top_level.txt +0 -0
BackcastPro/__init__.py
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
BackcastPro をご利用いただきありがとうございます。
|
|
3
3
|
|
|
4
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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
|
# 統計を生成するために残っているオープン取引をクローズ
|
BackcastPro/data/__init__.py
CHANGED
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,,
|
|
File without changes
|
|
File without changes
|