Skip to content

Commit 7431063

Browse files
committed
DOC: Move Backtest.__init__ docs (pdoc3) out of lib.FractionalBacktest
1 parent 233cd03 commit 7431063

File tree

2 files changed

+74
-77
lines changed

2 files changed

+74
-77
lines changed

backtesting/backtesting.py

Lines changed: 72 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,11 +1081,81 @@ class Backtest:
10811081
Backtest a particular (parameterized) strategy
10821082
on particular data.
10831083
1084-
Upon initialization, call method
1084+
Initialize a backtest. Requires data and a strategy to test.
1085+
After initialization, you can call method
10851086
`backtesting.backtesting.Backtest.run` to run a backtest
10861087
instance, or `backtesting.backtesting.Backtest.optimize` to
10871088
optimize it.
1088-
"""
1089+
1090+
`data` is a `pd.DataFrame` with columns:
1091+
`Open`, `High`, `Low`, `Close`, and (optionally) `Volume`.
1092+
If any columns are missing, set them to what you have available,
1093+
e.g.
1094+
1095+
df['Open'] = df['High'] = df['Low'] = df['Close']
1096+
1097+
The passed data frame can contain additional columns that
1098+
can be used by the strategy (e.g. sentiment info).
1099+
DataFrame index can be either a datetime index (timestamps)
1100+
or a monotonic range index (i.e. a sequence of periods).
1101+
1102+
`strategy` is a `backtesting.backtesting.Strategy`
1103+
_subclass_ (not an instance).
1104+
1105+
`cash` is the initial cash to start with.
1106+
1107+
`spread` is the the constant bid-ask spread rate (relative to the price).
1108+
E.g. set it to `0.0002` for commission-less forex
1109+
trading where the average spread is roughly 0.2‰ of the asking price.
1110+
1111+
`commission` is the commission rate. E.g. if your broker's commission
1112+
is 1% of order value, set commission to `0.01`.
1113+
The commission is applied twice: at trade entry and at trade exit.
1114+
Besides one single floating value, `commission` can also be a tuple of floating
1115+
values `(fixed, relative)`. E.g. set it to `(100, .01)`
1116+
if your broker charges minimum $100 + 1%.
1117+
Additionally, `commission` can be a callable
1118+
`func(order_size: int, price: float) -> float`
1119+
(note, order size is negative for short orders),
1120+
which can be used to model more complex commission structures.
1121+
Negative commission values are interpreted as market-maker's rebates.
1122+
1123+
.. note::
1124+
Before v0.4.0, the commission was only applied once, like `spread` is now.
1125+
If you want to keep the old behavior, simply set `spread` instead.
1126+
1127+
.. note::
1128+
With nonzero `commission`, long and short orders will be placed
1129+
at an adjusted price that is slightly higher or lower (respectively)
1130+
than the current price. See e.g.
1131+
[#153](https://github.com/kernc/backtesting.py/issues/153),
1132+
[#538](https://github.com/kernc/backtesting.py/issues/538),
1133+
[#633](https://github.com/kernc/backtesting.py/issues/633).
1134+
1135+
`margin` is the required margin (ratio) of a leveraged account.
1136+
No difference is made between initial and maintenance margins.
1137+
To run the backtest using e.g. 50:1 leverge that your broker allows,
1138+
set margin to `0.02` (1 / leverage).
1139+
1140+
If `trade_on_close` is `True`, market orders will be filled
1141+
with respect to the current bar's closing price instead of the
1142+
next bar's open.
1143+
1144+
If `hedging` is `True`, allow trades in both directions simultaneously.
1145+
If `False`, the opposite-facing orders first close existing trades in
1146+
a [FIFO] manner.
1147+
1148+
If `exclusive_orders` is `True`, each new order auto-closes the previous
1149+
trade/position, making at most a single trade (long or short) in effect
1150+
at each time.
1151+
1152+
If `finalize_trades` is `True`, the trades that are still
1153+
[active and ongoing] at the end of the backtest will be closed on
1154+
the last bar and will contribute to the computed backtest statistics.
1155+
1156+
[FIFO]: https://www.investopedia.com/terms/n/nfa-compliance-rule-2-43b.asp
1157+
[active and ongoing]: https://kernc.github.io/backtesting.py/doc/backtesting/backtesting.html#backtesting.backtesting.Strategy.trades
1158+
""" # noqa: E501
10891159
def __init__(self,
10901160
data: pd.DataFrame,
10911161
strategy: Type[Strategy],
@@ -1099,79 +1169,6 @@ def __init__(self,
10991169
exclusive_orders=False,
11001170
finalize_trades=False,
11011171
):
1102-
"""
1103-
Initialize a backtest. Requires data and a strategy to test.
1104-
1105-
`data` is a `pd.DataFrame` with columns:
1106-
`Open`, `High`, `Low`, `Close`, and (optionally) `Volume`.
1107-
If any columns are missing, set them to what you have available,
1108-
e.g.
1109-
1110-
df['Open'] = df['High'] = df['Low'] = df['Close']
1111-
1112-
The passed data frame can contain additional columns that
1113-
can be used by the strategy (e.g. sentiment info).
1114-
DataFrame index can be either a datetime index (timestamps)
1115-
or a monotonic range index (i.e. a sequence of periods).
1116-
1117-
`strategy` is a `backtesting.backtesting.Strategy`
1118-
_subclass_ (not an instance).
1119-
1120-
`cash` is the initial cash to start with.
1121-
1122-
`spread` is the the constant bid-ask spread rate (relative to the price).
1123-
E.g. set it to `0.0002` for commission-less forex
1124-
trading where the average spread is roughly 0.2‰ of the asking price.
1125-
1126-
`commission` is the commission rate. E.g. if your broker's commission
1127-
is 1% of order value, set commission to `0.01`.
1128-
The commission is applied twice: at trade entry and at trade exit.
1129-
Besides one single floating value, `commission` can also be a tuple of floating
1130-
values `(fixed, relative)`. E.g. set it to `(100, .01)`
1131-
if your broker charges minimum $100 + 1%.
1132-
Additionally, `commission` can be a callable
1133-
`func(order_size: int, price: float) -> float`
1134-
(note, order size is negative for short orders),
1135-
which can be used to model more complex commission structures.
1136-
Negative commission values are interpreted as market-maker's rebates.
1137-
1138-
.. note::
1139-
Before v0.4.0, the commission was only applied once, like `spread` is now.
1140-
If you want to keep the old behavior, simply set `spread` instead.
1141-
1142-
.. note::
1143-
With nonzero `commission`, long and short orders will be placed
1144-
at an adjusted price that is slightly higher or lower (respectively)
1145-
than the current price. See e.g.
1146-
[#153](https://github.com/kernc/backtesting.py/issues/153),
1147-
[#538](https://github.com/kernc/backtesting.py/issues/538),
1148-
[#633](https://github.com/kernc/backtesting.py/issues/633).
1149-
1150-
`margin` is the required margin (ratio) of a leveraged account.
1151-
No difference is made between initial and maintenance margins.
1152-
To run the backtest using e.g. 50:1 leverge that your broker allows,
1153-
set margin to `0.02` (1 / leverage).
1154-
1155-
If `trade_on_close` is `True`, market orders will be filled
1156-
with respect to the current bar's closing price instead of the
1157-
next bar's open.
1158-
1159-
If `hedging` is `True`, allow trades in both directions simultaneously.
1160-
If `False`, the opposite-facing orders first close existing trades in
1161-
a [FIFO] manner.
1162-
1163-
If `exclusive_orders` is `True`, each new order auto-closes the previous
1164-
trade/position, making at most a single trade (long or short) in effect
1165-
at each time.
1166-
1167-
If `finalize_trades` is `True`, the trades that are still
1168-
[active and ongoing] at the end of the backtest will be closed on
1169-
the last bar and will contribute to the computed backtest statistics.
1170-
1171-
[FIFO]: https://www.investopedia.com/terms/n/nfa-compliance-rule-2-43b.asp
1172-
[active and ongoing]: https://kernc.github.io/backtesting.py/doc/backtesting/backtesting.html#backtesting.backtesting.Strategy.trades
1173-
""" # noqa: E501
1174-
11751172
if not (isinstance(strategy, type) and issubclass(strategy, Strategy)):
11761173
raise TypeError('`strategy` must be a Strategy sub-type')
11771174
if not isinstance(data, pd.DataFrame):

backtesting/lib.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -511,9 +511,9 @@ class FractionalBacktest(Backtest):
511511
A `backtesting.backtesting.Backtest` that supports fractional share trading
512512
by simple composition. It applies roughly the transformation:
513513
514-
df = (df / satoshi).assign(Volume=df.Volume * satoshi)
514+
data = (data / satoshi).assign(Volume=data.Volume * satoshi)
515515
516-
as unchallenged in [this FAQ entry on GitHub](https://github.com/kernc/backtesting.py/issues/134),
516+
as left unchallenged in [this FAQ entry on GitHub](https://github.com/kernc/backtesting.py/issues/134),
517517
then passes `data`, `args*`, and `**kwargs` to its super.
518518
519519
Parameter `satoshi` tells the amount of scaling to do. E.g. for

0 commit comments

Comments
 (0)