Package: tradingenv
IntroductionBacktest trading strategies or train reinforcement learning agents withtradingenv, an event-driven market simulator that implements the
OpenAI/gym protocol.Installationtradingenv supports Python 3.7 or newer versions. The following command
line will install the latest software version.pip install tradingenvNotebooks, software tests and building the documentation require extra
dependencies that can be installed withpip install tradingenv[extra]ExamplesReinforcement Learning - Lazy InitialisationThe package is built upon the industry-standardgymand therefore can be used in
conjunction with popular reinforcement learning frameworks includingrllibandstable-baselines3.fromtradingenv.envimportTradingEnvXYimportyfinance# Load data from Yahoo Finance.tickers=yfinance.Tickers(['SPY','TLT','TBIL','^IRX'])data=tickers.history(period="12mo",progress=False)['Close'].tz_localize(None)Y=data[['SPY','TLT']]X=Y.rolling(12).mean()-Y.rolling(26).mean()# Lazy initialization of the trading environment.env=TradingEnvXY(X,Y)# OpenAI/gym protocol. Run an episode in the environment.# env can be passed to RL agents of ray/rllib, stable-baselines3 or ElegantRL for training.obs=env.reset()done=Falsewhilenotdone:action=env.action_space.sample()obs,reward,done,info=env.step(action)Reinforcement Learning - Custom InitialisationUse custom initialisation to personalise the design of the environment,
including the reward function, transaction costs, observation window and leverage.env=TradingEnvXY(X=X,# Use moving averages crossover as featuresY=Y,# to trade SPY and TLT ETFs.transformer='z-score',# Features are standardised to N(0, 1).reward='logret',# Reward is the log return of the portfolio at each step,cash=1000000,# starting with $1M.spread=0.0002,# Transaction costs include a 0.02% spread,markup=0.005,# a 0.5% broker markup on deposit rate,fee=0.0002,# a 0.02% dealing fee of traded notionalfixed=1,# and a $1 fixed fee per trade.margin=0.02,# Do not trade if trade size is smaller than 2% of the portfolio.rate=data['^IRX']/100,# Rate used to compute the yield on idle cash and cost of leverage.latency=0,# Trades are implemented with no latencysteps_delay=1,# but a delay of one day.window=1,# The observation is the current state of the market,clip=5.,# clipped between -5 and +5 standard deviations.max_long=1.5,# The maximum long position is 150% of the portfolio,max_short=-1.,# the maximum short position is 100% of the portfolio.calendar='NYSE',# Use the NYSE calendar to schedule trading days.)BacktestingThanks to the event-driven design, tradingenv is agnostic with respect
to the type and time-frequency of the events. This means that you can
run simulations either using irregularly sampled trade and quotes data,
daily closing prices, monthly economic data or alternative data.
Financial instruments supported include stocks, ETF and futures.classPortfolio6040(AbstractPolicy):"""Implement logic of your investment strategy or RL agent here."""defact(self,state):"""Invest 60% of the portfolio in SPY ETF and 40% in TLT ETF."""return[0.6,0.4]# Run the backtest.track_record=env.backtest(policy=Portfolio6040(),risk_free=prices['TBIL'],benchmark=prices['SPY'],)# The track_record object stores the results of your backtest.track_record.tearsheet()track_record.fig_net_liquidation_value()Relevant projectsbtgym: is an OpenAI
Gym-compatible environment forbacktraderbacktesting/trading library, designed to provide gym-integrated
framework for running reinforcement learning experiments in [close
to] real world algorithmic trading environments.gym: A toolkit for developing and
comparing reinforcement learning algorithms.qlib: Qlib provides a strong
infrastructure to support quant research.rllib: open-source library
for reinforcement learning.stable-baselines3: is
a set of reliable implementations of reinforcement learning
algorithms in PyTorch.DevelopersYou are welcome to contribute features, examples and documentation or
issues.You can run the software tests typingpytestin the command line,
assuming that the folder\testsis in the current working directory.To refresh and build the documentation:pytest tests/notebooks
sphinx-apidoc -f -o docs/source tradingenv
cd docs
make clean
make html