Skip to content

Commit 1249b0c

Browse files
committed
Rename some classes:
Order -> SimpleOrder OrderBase -> Order Asset -> OHLCAsset AssetBase -> Asset
1 parent d798d46 commit 1249b0c

14 files changed

+740
-729
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ celerybeat.pid
104104
# Environments
105105
.env
106106
.venv
107+
.venv.*
107108
env/
108109
venv/
109110
ENV/

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Below is an example usage (the performance of the example strategy won't be good
2525
```python
2626
import pandas as pd
2727

28-
from yabte.backtest import Strategy, StrategyRunner, Order, Book
28+
from yabte.backtest import Strategy, StrategyRunner, SimpleOrder, Book
2929
from yabte.utilities.plot.plotly.strategy_runner import plot_strategy_runner
3030
from yabte.utilities.strategy_helpers import crossover
3131
from yabte.tests._helpers import generate_nasdaq_dataset
@@ -64,9 +64,9 @@ class SMAXO(Strategy):
6464
data = df.loc[ix_2d, ("CloseSMAShort", "CloseSMALong")].dropna()
6565
if len(data) == 2:
6666
if crossover(data.CloseSMAShort, data.CloseSMALong):
67-
self.orders.append(Order(asset_name=symbol, size=-100))
67+
self.orders.append(SimpleOrder(asset_name=symbol, size=-100))
6868
elif crossover(data.CloseSMALong, data.CloseSMAShort):
69-
self.orders.append(Order(asset_name=symbol, size=100))
69+
self.orders.append(SimpleOrder(asset_name=symbol, size=100))
7070

7171

7272
# load some data

docs/index.rst

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ A typical strategy looks as follows:
2828

2929
.. code-block:: python
3030
31-
from yabte.backtest import Strategy, StrategyRunner, Order, Book, Asset
31+
from yabte.backtest import Strategy, StrategyRunner, SimpleOrder, Book, OHLCAsset
3232
from yabte.utilities.strategy_helpers import crossover
3333
3434
# All strategies inherit from the Strategy base class.
@@ -80,19 +80,19 @@ A typical strategy looks as follows:
8080
# executed the next day. There are different types
8181
# of order, e.g. positional and basket and some orders
8282
# support hooks for running arbitrary checks for limits etc.
83-
self.orders.append(Order(asset_name=symbol, size=-100))
83+
self.orders.append(SimpleOrder(asset_name=symbol, size=-100))
8484
elif crossover(data.CloseSMALong, data.CloseSMAShort):
85-
self.orders.append(Order(asset_name=symbol, size=100))
85+
self.orders.append(SimpleOrder(asset_name=symbol, size=100))
8686
8787
8888
To run our strategy, we use a StrategyRunner:
8989

9090
.. code-block:: python
9191
92-
# The Asset class is any pricable object with accompanying High, Low, Close,
93-
# Open & Volume field data. One can subclass Asset to support different field
92+
# The OHLCAsset class is any pricable object with accompanying High, Low, Close,
93+
# Open & Volume field data. One can subclass OHLCAsset to support different field
9494
# types, e.g. Volatility.
95-
assets = [Asset(name="GOOG", denom="USD"), Asset(name="MSFT", denom="USD")]
95+
assets = [OHLCAsset(name="GOOG", denom="USD"), OHLCAsset(name="MSFT", denom="USD")]
9696
9797
sr = StrategyRunner(
9898
# Data is provided as a pandas dataframe with two level

docs/yabte.backtest.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Strategy
99
:members:
1010
:member-order: bysource
1111

12-
Order
12+
SimpleOrder
1313
-----
1414
.. autoclass:: yabte.backtest.order.OrderStatus
1515
:members:
@@ -39,7 +39,7 @@ Book
3939
:members:
4040
:member-order: bysource
4141

42-
Asset
42+
OHLCAsset
4343
-----
4444

4545
.. automodule:: yabte.backtest.asset

notebooks/Delta_Hedging.ipynb

Lines changed: 676 additions & 676 deletions
Large diffs are not rendered by default.

notebooks/Readme_Example.ipynb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21706,10 +21706,10 @@
2170621706
"source": [
2170721707
"import pandas as pd\n",
2170821708
"\n",
21709-
"from yabte.backtest import Strategy, StrategyRunner, Order, Book\n",
21709+
"from yabte.backtest import Book, SimpleOrder, Strategy, StrategyRunner\n",
21710+
"from yabte.tests._helpers import generate_nasdaq_dataset\n",
2171021711
"from yabte.utilities.plot.plotly.strategy_runner import plot_strategy_runner\n",
2171121712
"from yabte.utilities.strategy_helpers import crossover\n",
21712-
"from yabte.tests._helpers import generate_nasdaq_dataset\n",
2171321713
"\n",
2171421714
"\n",
2171521715
"class SMAXO(Strategy):\n",
@@ -21745,9 +21745,9 @@
2174521745
" data = df.loc[ix_2d, (\"CloseSMAShort\", \"CloseSMALong\")].dropna()\n",
2174621746
" if len(data) == 2:\n",
2174721747
" if crossover(data.CloseSMAShort, data.CloseSMALong):\n",
21748-
" self.orders.append(Order(asset_name=symbol, size=-100))\n",
21748+
" self.orders.append(SimpleOrder(asset_name=symbol, size=-100))\n",
2174921749
" elif crossover(data.CloseSMALong, data.CloseSMAShort):\n",
21750-
" self.orders.append(Order(asset_name=symbol, size=100))\n",
21750+
" self.orders.append(SimpleOrder(asset_name=symbol, size=100))\n",
2175121751
"\n",
2175221752
"\n",
2175321753
"# load some data\n",

yabte/backtest/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,32 @@
44
ADFI_AVAILABLE_AT_CLOSE,
55
ADFI_AVAILABLE_AT_OPEN,
66
ADFI_REQUIRED,
7-
Asset,
87
AssetDataFieldInfo,
98
AssetName,
9+
OHLCAsset,
1010
)
1111
from yabte.backtest.book import Book, BookMandate, BookName
1212
from yabte.backtest.order import (
1313
BasketOrder,
14-
Order,
1514
OrderSizeType,
1615
OrderStatus,
1716
PositionalBasketOrder,
1817
PositionalOrder,
1918
PositionalOrderCheckType,
19+
SimpleOrder,
2020
)
2121
from yabte.backtest.strategy import Strategy, StrategyRunner
2222
from yabte.backtest.transaction import CashTransaction, Trade
2323

2424
__all__ = [
25-
"Asset",
25+
"OHLCAsset",
2626
"AssetDataFieldInfo",
2727
"AssetName",
2828
"Book",
2929
"BookName",
3030
"BookMandate",
3131
"CashTransaction",
32-
"Order",
32+
"SimpleOrder",
3333
"OrderSizeType",
3434
"OrderStatus",
3535
"BasketOrder",

yabte/backtest/asset.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import pandas as pd
88
from mypy_extensions import mypyc_attr
99

10-
__all__ = ["Asset"]
10+
__all__ = ["OHLCAsset"]
1111

1212

1313
# use ints until mypyc supports IntFlag
@@ -25,7 +25,7 @@
2525

2626
@mypyc_attr(allow_interpreted_subclasses=True)
2727
@dataclass(kw_only=True)
28-
class AssetBase:
28+
class Asset:
2929
"""Anything that has a price."""
3030

3131
name: AssetName
@@ -97,7 +97,7 @@ def _filter_data(self, data: T) -> T:
9797

9898
@mypyc_attr(allow_interpreted_subclasses=True)
9999
@dataclass(kw_only=True)
100-
class Asset(AssetBase):
100+
class OHLCAsset(Asset):
101101
"""Assets whose price history is represented by High, Low, Open, Close and Volume
102102
fields."""
103103

yabte/backtest/order.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
logger = logging.getLogger(__name__)
1818

19-
__all__ = ["Order", "PositionalOrder", "BasketOrder", "PositionalBasketOrder"]
19+
__all__ = ["SimpleOrder", "PositionalOrder", "BasketOrder", "PositionalBasketOrder"]
2020

2121

2222
class OrderStatus(Enum):
@@ -53,7 +53,7 @@ class OrderSizeType(Enum):
5353

5454
@mypyc_attr(allow_interpreted_subclasses=True)
5555
@dataclass(kw_only=True)
56-
class OrderBase:
56+
class Order:
5757
"""Base class for all orders."""
5858

5959
status: OrderStatus = OrderStatus.OPEN
@@ -62,7 +62,7 @@ class OrderBase:
6262
book: BookName | Book | None = field(repr=False, default=None)
6363
"""Target book."""
6464

65-
suborders: List[OrderBase] = field(default_factory=list)
65+
suborders: List[Order] = field(default_factory=list)
6666
"""Additional orders to be executed the following timestep."""
6767

6868
label: Optional[str] = None
@@ -106,7 +106,7 @@ def apply(self, ts: pd.Timestamp, day_data: pd.Series, asset_map: Dict[str, Asse
106106

107107
@mypyc_attr(allow_interpreted_subclasses=True)
108108
@dataclass(kw_only=True)
109-
class Order(OrderBase):
109+
class SimpleOrder(Order):
110110
"""Simple market order."""
111111

112112
asset_name: AssetName
@@ -189,7 +189,7 @@ class PositionalOrderCheckType(Enum):
189189

190190
@mypyc_attr(allow_interpreted_subclasses=True)
191191
@dataclass(kw_only=True)
192-
class PositionalOrder(Order):
192+
class PositionalOrder(SimpleOrder):
193193
"""Ensures current position is `size` and will close out existing positions to
194194
achieve this."""
195195

@@ -249,7 +249,7 @@ def apply(self, ts: pd.Timestamp, day_data: pd.Series, asset_map: Dict[str, Asse
249249

250250
@mypyc_attr(allow_interpreted_subclasses=True)
251251
@dataclass
252-
class BasketOrder(OrderBase):
252+
class BasketOrder(Order):
253253
"""Combine multiple assets into a single order."""
254254

255255
asset_names: List[AssetName]

yabte/backtest/strategy.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from .asset import ADFI_AVAILABLE_AT_OPEN, Asset, AssetName
1616
from .book import Book, BookMandate, BookName
17-
from .order import Order, OrderBase, OrderStatus
17+
from .order import Order, OrderStatus
1818

1919
logger = logging.getLogger(__name__)
2020

@@ -34,10 +34,10 @@ def __iter__(self):
3434
def popleft(self):
3535
return self.deque.popleft()
3636

37-
def append(self, order: OrderBase):
37+
def append(self, order: Order):
3838
return self.deque.append(order)
3939

40-
def extend(self, orders: Iterable[OrderBase]):
40+
def extend(self, orders: Iterable[Order]):
4141
return self.deque.extend(orders)
4242

4343
def sort_by_priority(self):
@@ -46,7 +46,7 @@ def sort_by_priority(self):
4646
self.deque.clear()
4747
self.deque.extend(ou_sorted)
4848

49-
def remove_duplicate_keys(self) -> List[OrderBase]:
49+
def remove_duplicate_keys(self) -> List[Order]:
5050
"""Remove older orders with same key.
5151
5252
Returns a list of orders than were removed with status set to REPLACED.

yabte/tests/_helpers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pandas as pd
44

5-
from yabte.backtest.asset import Asset
5+
from yabte.backtest.asset import OHLCAsset
66

77
data_dir = Path(__file__).parent / "data"
88
notebooks_dir = Path(__file__).parents[2] / "notebooks"
@@ -13,7 +13,7 @@ def generate_nasdaq_dataset():
1313
dfs = []
1414
for csv_pth in (data_dir / "nasdaq").glob("*.csv"):
1515
name = csv_pth.stem
16-
assets.append(Asset(name=name, denom="USD"))
16+
assets.append(OHLCAsset(name=name, denom="USD"))
1717
df = pd.read_csv(csv_pth, index_col=0, parse_dates=[0])
1818
df.columns = pd.MultiIndex.from_tuples([(name, f) for f in df.columns])
1919
dfs.append(df)

yabte/tests/test_notebooks.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,7 @@ def test_notebooks_smoke(self):
2020
with nb.open() as f:
2121
nb = nbformat.read(f, as_version=4)
2222
# will raise exception if issue, eg missing module
23-
ep.preprocess(nb, {"metadata": {"path": str(notebooks_dir)}})
23+
nb_node, resources = ep.preprocess(
24+
nb, {"metadata": {"path": str(notebooks_dir)}}
25+
)
26+
foo = 1

yabte/tests/test_simulation.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def _gbm_recover_weiner(T, N, M, r, p, sigma):
2828
class SimulationTestCase(NumpyTestCase):
2929
def setUp(self):
3030
self.rng = np.random.default_rng(12345)
31+
super().setUp()
3132

3233
def test_weiner_simple(self):
3334
R = [[1, 0.9], [0.9, 1]]

0 commit comments

Comments
 (0)