Skip to content

Commit ac182c0

Browse files
author
yunjinqi
committed
feat: add bt api live trading integration
1 parent 843dbd5 commit ac182c0

20 files changed

Lines changed: 1414 additions & 237 deletions

backtrader/__init__.py

Lines changed: 100 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -46,62 +46,103 @@
4646
- GitHub: https://github.com/mementum/backtrader
4747
"""
4848

49-
# Load contributed indicators and studies (lazy import to avoid circular dependency)
50-
# from .indicators import contrib as _indicators_contrib
51-
52-
from . import analyzers as analyzers
53-
from . import broker as broker
54-
from . import brokers as brokers
55-
from . import channels as channels
56-
from . import commissions as commissions
57-
from . import commissions as comms
58-
from . import errors as errors
59-
from . import feeds as feeds
60-
from . import filters as filters
61-
from . import indicators as ind
62-
from . import indicators as indicators
63-
from . import observers as obs
64-
from . import observers as observers
65-
from . import signals as signals
66-
from . import sizers as sizers
67-
from . import stores as stores
68-
from . import talib as talib
69-
from . import timer as timer
70-
from . import utils as utils
71-
from .analyzer import *
72-
from .broker import *
73-
from .cerebro import *
74-
from .comminfo import *
75-
from .dataseries import *
76-
from .errors import *
77-
from .feed import *
78-
from .flt import *
79-
from .functions import *
80-
from .indicator import *
81-
from .linebuffer import *
82-
from .lineiterator import *
83-
from .lineseries import *
84-
from .observer import *
85-
from .order import *
86-
from .position import *
87-
from .resamplerfilter import *
88-
from .signal import *
89-
from .sizer import *
90-
from .sizers import SizerFix # old sizer for compatibility
91-
from .store import Store
92-
from .strategy import *
93-
from .timer import *
94-
from .trade import *
95-
from .utils import date2num, num2date, num2dt, num2time, time2num
96-
from .utils import configure_logging, get_logger, reset_logging, set_level
97-
from .version import __btversion__, __version__
98-
from .writer import *
99-
from .profiles import LiveProfile, build_cerebro
100-
101-
# Iteration 138: Tick-level backtesting and live trading
102-
from .events import TickEvent, OrderBookSnapshot, FundingEvent, BarEvent
103-
from .channel import Event, EventPriority, StreamingEventQueue
104-
105-
# import backtrader.studies.contrib
106-
107-
# from backtrader import vectors
49+
import os as _os
50+
51+
_LIGHT_IMPORT = _os.environ.get("BACKTRADER_LIGHT_IMPORT", "").strip().lower() in {
52+
"1",
53+
"true",
54+
"yes",
55+
"on",
56+
}
57+
58+
if _LIGHT_IMPORT:
59+
from . import broker as broker
60+
from . import brokers as brokers
61+
from . import errors as errors
62+
from . import feeds as feeds
63+
from . import indicators as ind
64+
from . import indicators as indicators
65+
from . import observers as obs
66+
from . import observers as observers
67+
from . import stores as stores
68+
from .broker import *
69+
from .cerebro import *
70+
from .comminfo import *
71+
from .dataseries import *
72+
from .errors import *
73+
from .feed import *
74+
from .functions import *
75+
from .indicator import *
76+
from .linebuffer import *
77+
from .lineiterator import *
78+
from .lineseries import *
79+
from .observer import *
80+
from .order import *
81+
from .position import *
82+
from .signal import *
83+
from .strategy import *
84+
from .timer import *
85+
from .trade import *
86+
from .utils import date2num, num2date, num2dt, num2time, time2num
87+
from .utils import configure_logging, get_logger, reset_logging, set_level
88+
from .version import __btversion__, __version__
89+
else:
90+
# Load contributed indicators and studies (lazy import to avoid circular dependency)
91+
# from .indicators import contrib as _indicators_contrib
92+
93+
from . import analyzers as analyzers
94+
from . import broker as broker
95+
from . import brokers as brokers
96+
from . import channels as channels
97+
from . import commissions as commissions
98+
from . import commissions as comms
99+
from . import errors as errors
100+
from . import feeds as feeds
101+
from . import filters as filters
102+
from . import indicators as ind
103+
from . import indicators as indicators
104+
from . import observers as obs
105+
from . import observers as observers
106+
from . import signals as signals
107+
from . import sizers as sizers
108+
from . import stores as stores
109+
from . import talib as talib
110+
from . import timer as timer
111+
from . import utils as utils
112+
from .analyzer import *
113+
from .broker import *
114+
from .cerebro import *
115+
from .comminfo import *
116+
from .dataseries import *
117+
from .errors import *
118+
from .feed import *
119+
from .flt import *
120+
from .functions import *
121+
from .indicator import *
122+
from .linebuffer import *
123+
from .lineiterator import *
124+
from .lineseries import *
125+
from .observer import *
126+
from .order import *
127+
from .position import *
128+
from .resamplerfilter import *
129+
from .signal import *
130+
from .sizer import *
131+
from .sizers import SizerFix # old sizer for compatibility
132+
from .store import Store
133+
from .strategy import *
134+
from .timer import *
135+
from .trade import *
136+
from .utils import date2num, num2date, num2dt, num2time, time2num
137+
from .utils import configure_logging, get_logger, reset_logging, set_level
138+
from .version import __btversion__, __version__
139+
from .writer import *
140+
from .profiles import LiveProfile, build_cerebro
141+
142+
# Iteration 138: Tick-level backtesting and live trading
143+
from .events import TickEvent, OrderBookSnapshot, FundingEvent, BarEvent
144+
from .channel import Event, EventPriority, StreamingEventQueue
145+
146+
# import backtrader.studies.contrib
147+
148+
# from backtrader import vectors

backtrader/brokers/__init__.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,20 @@
1616
>>> cerebro.setbroker(bt.brokers.BackBroker())
1717
"""
1818

19+
import os as _os
20+
1921
# The modules below should/must define __all__ with the objects wishes
2022
# or prepend an "_" (underscore) to private classes/variables
2123

2224
from backtrader.brokers.bbroker import BackBroker as BackBroker
2325
from backtrader.brokers.bbroker import BrokerBack as BrokerBack
24-
from backtrader.brokers.btapibroker import BtApiBroker as BtApiBroker
25-
from backtrader.brokers.mixbroker import MixBroker as MixBroker
26-
from backtrader.brokers.tickbroker import TickBroker as TickBroker
26+
27+
if _os.environ.get("BACKTRADER_LIGHT_IMPORT", "").strip().lower() not in {
28+
"1",
29+
"true",
30+
"yes",
31+
"on",
32+
}:
33+
from backtrader.brokers.btapibroker import BtApiBroker as BtApiBroker
34+
from backtrader.brokers.mixbroker import MixBroker as MixBroker
35+
from backtrader.brokers.tickbroker import TickBroker as TickBroker

backtrader/feeds/__init__.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,29 @@
2525
>>> cerebro.adddata(data)
2626
"""
2727

28-
from .btapifeed import BtApiFeed as BtApiFeed
29-
from .btcsv import *
30-
from .chainer import Chainer as Chainer
31-
from .csvgeneric import *
32-
from .influxfeed import *
33-
from .mixed_channel import MixedChannel as MixedChannel
34-
from .mixed_channel import build_mixed_channel as build_mixed_channel
35-
from .mt4csv import *
36-
from .pandafeed import *
37-
from .quandl import *
38-
from .rollover import RollOver as RollOver
39-
from .sierrachart import *
40-
from .vchart import *
41-
from .vchartcsv import *
42-
from .vchartfile import VChartFile as VChartFile
43-
from .yahoo import *
28+
import os as _os
29+
30+
if _os.environ.get("BACKTRADER_LIGHT_IMPORT", "").strip().lower() in {
31+
"1",
32+
"true",
33+
"yes",
34+
"on",
35+
}:
36+
from .btapifeed import BtApiFeed as BtApiFeed
37+
else:
38+
from .btapifeed import BtApiFeed as BtApiFeed
39+
from .btcsv import *
40+
from .chainer import Chainer as Chainer
41+
from .csvgeneric import *
42+
from .influxfeed import *
43+
from .mixed_channel import MixedChannel as MixedChannel
44+
from .mixed_channel import build_mixed_channel as build_mixed_channel
45+
from .mt4csv import *
46+
from .pandafeed import *
47+
from .quandl import *
48+
from .rollover import RollOver as RollOver
49+
from .sierrachart import *
50+
from .vchart import *
51+
from .vchartcsv import *
52+
from .vchartfile import VChartFile as VChartFile
53+
from .yahoo import *

0 commit comments

Comments
 (0)