Skip to content

Online Environments

Online environments connect to real trading APIs for paper trading or live execution. They provide the same TorchTrade interface as offline environments but fetch real-time market data from exchanges. Each offline environment has a corresponding live counterpart:

Offline (Training) Live (Deployment)
SequentialTradingEnv (spot, leverage=1) AlpacaTorchTradingEnv
SequentialTradingEnv (futures, leverage>1) BinanceFutures / BitgetFutures / BybitFuturesTorchTradingEnv
SequentialTradingEnvSLTP (spot) AlpacaSLTPTorchTradingEnv
SequentialTradingEnvSLTP (futures) BinanceFuturesSLTP / BitgetFuturesSLTP / BybitFuturesSLTPTorchTradingEnv
OneStepTradingEnv (spot) AlpacaSLTPTorchTradingEnv
OneStepTradingEnv (futures) BinanceFuturesSLTP / BitgetFuturesSLTP / BybitFuturesSLTPTorchTradingEnv

Supported Exchanges:

  • Alpaca - Commission-free US stocks and crypto with paper trading
  • Binance - Cryptocurrency futures with high leverage and testnet
  • Bitget - Cryptocurrency futures with competitive fees and testnet
  • Bybit - Cryptocurrency derivatives with native bracket orders and testnet

Overview

Environment Exchange Asset Type Futures Leverage Bracket Orders
AlpacaTorchTradingEnv Alpaca Crypto/Stocks - - -
AlpacaSLTPTorchTradingEnv Alpaca Crypto/Stocks - - Yes
BinanceFuturesTorchTradingEnv Binance Crypto Yes Yes -
BinanceFuturesSLTPTorchTradingEnv Binance Crypto Yes Yes Yes
BitgetFuturesTorchTradingEnv Bitget Crypto Yes Yes -
BitgetFuturesSLTPTorchTradingEnv Bitget Crypto Yes Yes Yes
BybitFuturesTorchTradingEnv Bybit Crypto Yes Yes -
BybitFuturesSLTPTorchTradingEnv Bybit Crypto Yes Yes Yes

Fractional Position Sizing

Non-SLTP environments use action_levels for fractional position sizing — same as offline environments. Action values in [-1.0, 1.0] represent the fraction of balance to allocate. When adjusting positions (e.g., 100% to 50%), the environment only trades the delta, reducing transaction fees.

Live environments use a query-first pattern: they query the actual exchange position (source of truth), calculate the target based on the action, round to exchange constraints (lot size, min notional), and trade only the delta.

Timeframe Format - Critical for Model Compatibility

Always use canonical timeframe forms:

  • Alpaca: ["1Min", "5Min", "15Min", "1Hour", "1Day"]
  • Binance/Bitget/Bybit: ["1m", "5m", "15m", "1h", "1d"]
  • Wrong: ["60min"], ["60m"], ["24hour"] — these create different observation keys and break model compatibility.

Alpaca Environments

Alpaca provides commission-free trading for US stocks and cryptocurrencies with paper trading support.

AlpacaTorchTradingEnv

from torchtrade.envs.alpaca import AlpacaTorchTradingEnv, AlpacaTradingEnvConfig

config = AlpacaTradingEnvConfig(
    symbol="BTC/USD",
    time_frames=["1Min", "5Min", "15Min", "1Hour"],
    window_sizes=[12, 8, 8, 24],
    execute_on="5Min",
    paper=True,  # Paper trading (recommended!)
)

env = AlpacaTorchTradingEnv(config)

AlpacaSLTPTorchTradingEnv

from torchtrade.envs.alpaca import AlpacaSLTPTorchTradingEnv, AlpacaSLTPTradingEnvConfig

config = AlpacaSLTPTradingEnvConfig(
    symbol="BTC/USD",
    time_frames=["1Min", "5Min", "15Min"],
    window_sizes=[12, 8, 8],
    execute_on="5Min",
    stoploss_levels=[-0.02, -0.05],
    takeprofit_levels=[0.05, 0.10],
    paper=True,
)

env = AlpacaSLTPTorchTradingEnv(config)
# Action space: HOLD + 4 SL/TP combinations = 5 actions

Binance Environments

Binance provides cryptocurrency futures trading with up to 125x leverage and testnet support.

BinanceFuturesTorchTradingEnv

from torchtrade.envs.binance import BinanceFuturesTorchTradingEnv, BinanceFuturesTradingEnvConfig

config = BinanceFuturesTradingEnvConfig(
    symbol="BTCUSDT",
    intervals=["1m", "5m", "15m"],
    window_sizes=[12, 8, 8],
    execute_on="1m",
    leverage=5,
    quantity_per_trade=0.01,
    demo=True,  # Testnet (recommended!)
)

env = BinanceFuturesTorchTradingEnv(config)

BinanceFuturesSLTPTorchTradingEnv

from torchtrade.envs.binance import BinanceFuturesSLTPTorchTradingEnv, BinanceFuturesSLTPTradingEnvConfig

config = BinanceFuturesSLTPTradingEnvConfig(
    symbol="BTCUSDT",
    intervals=["1m", "5m"],
    window_sizes=[12, 8],
    execute_on="1m",
    stoploss_levels=[-0.02, -0.05],
    takeprofit_levels=[0.03, 0.06, 0.10],
    leverage=5,
    quantity_per_trade=0.01,
    demo=True,
)

env = BinanceFuturesSLTPTorchTradingEnv(config)
# Action space: HOLD + 2×(2 SL × 3 TP) = 13 actions (long + short)

Bitget Environments

Bitget provides cryptocurrency futures trading with competitive fees and testnet support. TorchTrade uses CCXT to interface with Bitget's V2 API.

CCXT Symbol Format

Bitget uses CCXT's perpetual swap format: "BTC/USDT:USDT" (not "BTCUSDT").

BitgetFuturesTorchTradingEnv

from torchtrade.envs.bitget import BitgetFuturesTorchTradingEnv, BitgetFuturesTradingEnvConfig
from torchtrade.envs.bitget.futures_order_executor import MarginMode, PositionMode
import os
from dotenv import load_dotenv

load_dotenv()

config = BitgetFuturesTradingEnvConfig(
    symbol="BTC/USDT:USDT",
    time_frames=["5min", "15min"],
    window_sizes=[6, 32],
    execute_on="1min",
    product_type="USDT-FUTURES",
    leverage=5,
    quantity_per_trade=0.002,
    margin_mode=MarginMode.ISOLATED,     # ISOLATED (safer) or CROSSED
    position_mode=PositionMode.ONE_WAY,  # ONE_WAY (simpler) or HEDGE
    demo=True,
)

env = BitgetFuturesTorchTradingEnv(
    config,
    api_key=os.getenv("BITGETACCESSAPIKEY"),
    api_secret=os.getenv("BITGETSECRETKEY"),
    api_passphrase=os.getenv("BITGETPASSPHRASE"),
)

BitgetFuturesSLTPTorchTradingEnv

from torchtrade.envs.bitget import BitgetFuturesSLTPTorchTradingEnv, BitgetFuturesSLTPTradingEnvConfig
from torchtrade.envs.bitget.futures_order_executor import MarginMode, PositionMode
import os
from dotenv import load_dotenv

load_dotenv()

config = BitgetFuturesSLTPTradingEnvConfig(
    symbol="BTC/USDT:USDT",
    time_frames=["5min", "15min"],
    window_sizes=[6, 32],
    execute_on="1min",
    stoploss_levels=[-0.025, -0.05, -0.1],
    takeprofit_levels=[0.05, 0.1, 0.2],
    include_hold_action=True,
    product_type="USDT-FUTURES",
    leverage=5,
    quantity_per_trade=0.002,
    margin_mode=MarginMode.ISOLATED,
    position_mode=PositionMode.ONE_WAY,
    demo=True,
)

env = BitgetFuturesSLTPTorchTradingEnv(
    config,
    api_key=os.getenv("BITGETACCESSAPIKEY"),
    api_secret=os.getenv("BITGETSECRETKEY"),
    api_passphrase=os.getenv("BITGETPASSPHRASE"),
)
# Action space: HOLD + 2×(3 SL × 3 TP) = 19 actions (long + short)

Bybit Environments

Bybit provides cryptocurrency derivatives trading with native bracket order support (stop-loss/take-profit set directly on orders). TorchTrade uses pybit, Bybit's official Python SDK, for direct v5 API access.

Symbol Format

Bybit uses simple concatenated symbols: "BTCUSDT" (not "BTC/USDT:USDT").

BybitFuturesTorchTradingEnv

from torchtrade.envs.bybit import BybitFuturesTorchTradingEnv, BybitFuturesTradingEnvConfig
from torchtrade.envs.bybit import MarginMode, PositionMode
import os
from dotenv import load_dotenv

load_dotenv()

config = BybitFuturesTradingEnvConfig(
    symbol="BTCUSDT",
    time_frames=["5m", "15m"],
    window_sizes=[6, 32],
    execute_on="1m",
    leverage=5,
    margin_mode=MarginMode.ISOLATED,     # ISOLATED (safer) or CROSSED
    position_mode=PositionMode.ONE_WAY,  # ONE_WAY (simpler) or HEDGE
    demo=True,  # Testnet (recommended!)
)

env = BybitFuturesTorchTradingEnv(
    config,
    api_key=os.getenv("BYBIT_API_KEY"),
    api_secret=os.getenv("BYBIT_API_SECRET"),
)

BybitFuturesSLTPTorchTradingEnv

from torchtrade.envs.bybit import BybitFuturesSLTPTorchTradingEnv, BybitFuturesSLTPTradingEnvConfig
from torchtrade.envs.bybit import MarginMode, PositionMode
import os
from dotenv import load_dotenv

load_dotenv()

config = BybitFuturesSLTPTradingEnvConfig(
    symbol="BTCUSDT",
    time_frames=["5m", "15m"],
    window_sizes=[6, 32],
    execute_on="1m",
    stoploss_levels=(-0.025, -0.05, -0.1),
    takeprofit_levels=(0.05, 0.1, 0.2),
    include_hold_action=True,
    leverage=5,
    quantity_per_trade=0.002,
    margin_mode=MarginMode.ISOLATED,
    position_mode=PositionMode.ONE_WAY,
    demo=True,
)

env = BybitFuturesSLTPTorchTradingEnv(
    config,
    api_key=os.getenv("BYBIT_API_KEY"),
    api_secret=os.getenv("BYBIT_API_SECRET"),
)
# Action space: HOLD + 2×(3 SL × 3 TP) = 19 actions (long + short)

API Key Setup

Each exchange requires API keys stored in a .env file:

# Alpaca (https://alpaca.markets/signup)
API_KEY=your_alpaca_api_key
SECRET_KEY=your_alpaca_secret_key

# Binance (https://www.binance.com/en/my/settings/api-management)
BINANCE_API_KEY=your_binance_api_key
BINANCE_SECRET_KEY=your_binance_secret_key

# Bitget (https://www.bitget.com/en/support/articles/360038859731)
BITGETACCESSAPIKEY=your_bitget_api_key
BITGETSECRETKEY=your_bitget_secret_key
BITGETPASSPHRASE=your_bitget_passphrase

# Bybit (https://www.bybit.com/app/user/api-management)
BYBIT_API_KEY=your_bybit_api_key
BYBIT_API_SECRET=your_bybit_api_secret

Always Start with Paper/Testnet Trading

Set paper=True (Alpaca) or demo=True (Binance/Bitget/Bybit) before using real funds. Start with low leverage (2-5x) for futures.


Exchange Comparison

Feature Alpaca Binance Bitget Bybit
Asset Types Stocks, Crypto Crypto Crypto Crypto
Futures - Yes Yes Yes
Max Leverage 1x 125x 125x 100x
Paper Trading Yes Yes (Testnet) Yes (Testnet) Yes (Testnet)
Commission Free 0.02%/0.04% 0.02%/0.06% 0.02%/0.055%
SDK Alpaca SDK CCXT CCXT pybit (native)

Requesting New Exchanges

Need support for another exchange (OKX, Interactive Brokers, etc.)? Create an issue or email us at torchtradecontact@gmail.com.