Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5928524

Browse filesBrowse files
committed
REF: Rename param lib.FractionalBacktest(fractional_unit=)
Fixes #1229 Thanks!
1 parent d673d0a commit 5928524
Copy full SHA for 5928524

3 files changed

+21-7Lines changed: 21 additions & 7 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎backtesting/backtesting.py‎

Copy file name to clipboardExpand all lines: backtesting/backtesting.py
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,6 +1153,10 @@ class Backtest:
11531153
[active and ongoing] at the end of the backtest will be closed on
11541154
the last bar and will contribute to the computed backtest statistics.
11551155
1156+
.. tip:: Fractional trading
1157+
See also `backtesting.lib.FractionalBacktest` if you want to trade
1158+
fractional units (of e.g. bitcoin).
1159+
11561160
[FIFO]: https://www.investopedia.com/terms/n/nfa-compliance-rule-2-43b.asp
11571161
[active and ongoing]: https://kernc.github.io/backtesting.py/doc/backtesting/backtesting.html#backtesting.backtesting.Strategy.trades
11581162
""" # noqa: E501
Collapse file

‎backtesting/lib.py‎

Copy file name to clipboardExpand all lines: backtesting/lib.py
+16-6Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from __future__ import annotations
1515

1616
import multiprocessing as mp
17+
import warnings
1718
from collections import OrderedDict
1819
from inspect import currentframe
1920
from itertools import chain, compress, count
@@ -511,22 +512,31 @@ class FractionalBacktest(Backtest):
511512
A `backtesting.backtesting.Backtest` that supports fractional share trading
512513
by simple composition. It applies roughly the transformation:
513514
514-
data = (data / satoshi).assign(Volume=data.Volume * satoshi)
515+
data = (data * fractional_unit).assign(Volume=data.Volume / fractional_unit)
515516
516517
as left unchallenged in [this FAQ entry on GitHub](https://github.com/kernc/backtesting.py/issues/134),
517518
then passes `data`, `args*`, and `**kwargs` to its super.
518519
519-
Parameter `satoshi` tells the amount of scaling to do. E.g. for
520-
μBTC trading, pass `satoshi=1e6`.
520+
Parameter `fractional_unit` represents the smallest fraction of currency that can be traded
521+
and defaults to one [satoshi]. For μBTC trading, pass `fractional_unit=1/1e6`.
522+
Thus-transformed backtest does a whole-sized trading of `fractional_unit` units.
523+
524+
[satoshi]: https://en.wikipedia.org/wiki/Bitcoin#Units_and_divisibility
521525
"""
522526
def __init__(self,
523527
data,
524528
*args,
525-
satoshi=int(100e6),
529+
fractional_unit=1 / 100e6,
526530
**kwargs):
531+
if 'satoshi' in kwargs:
532+
warnings.warn(
533+
'Parameter `FractionalBacktest(..., satoshi=)` is deprecated. '
534+
'Use `FractionalBacktest(..., fractional_unit=)`.',
535+
category=DeprecationWarning, stacklevel=2)
536+
fractional_unit = 1 / kwargs.pop('satoshi')
527537
data = data.copy()
528-
data[['Open', 'High', 'Low', 'Close']] /= satoshi
529-
data['Volume'] *= satoshi
538+
data[['Open', 'High', 'Low', 'Close']] *= fractional_unit
539+
data['Volume'] /= fractional_unit
530540
super().__init__(data, *args, **kwargs)
531541

532542

Collapse file

‎backtesting/test/_test.py‎

Copy file name to clipboardExpand all lines: backtesting/test/_test.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,7 @@ def next(self):
939939
self.assertEqual(stats['# Trades'], 56)
940940

941941
def test_FractionalBacktest(self):
942-
ubtc_bt = FractionalBacktest(BTCUSD['2015':], SmaCross, satoshi=1e6, cash=100)
942+
ubtc_bt = FractionalBacktest(BTCUSD['2015':], SmaCross, fractional_unit=1/1e6, cash=100)
943943
stats = ubtc_bt.run(fast=2, slow=3)
944944
self.assertEqual(stats['# Trades'], 41)
945945

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.