Tradovate
===================================
.. important::
**Tradovate does not provide market data.** You must use a separate data source for live trading. Recommended data sources include DataBento, ProjectX, or Interactive Brokers (all support futures data).
Tradovate is a futures broker that provides access to CME Group markets. This guide will help you set up Tradovate with Lumibot for futures trading.
Getting Started
---------------
To get started with Tradovate, you'll need:
1. A Tradovate account (create one at `tradeovate.com `_)
2. API credentials from your Tradovate dashboard
3. A separate data source for market data
Obtaining API Credentials
-------------------------
1. Log into your Tradovate account
2. Navigate to the API section in your dashboard
3. Create a new API application to get your credentials
4. Note down your:
- Username
- Dedicated Password (for API access)
- CID (Client ID)
- Secret
Required Environment Variables
------------------------------
.. list-table:: Required Tradovate Environment Variables
:header-rows: 1
:widths: 40 60
* - Variable
- Description
* - ``TRADOVATE_USERNAME``
- Your Tradovate username
* - ``TRADOVATE_DEDICATED_PASSWORD``
- Your dedicated API password (not your login password)
* - ``TRADOVATE_CID``
- Your Client ID from Tradovate API dashboard
* - ``TRADOVATE_SECRET``
- Your Secret from Tradovate API dashboard
Optional Environment Variables
------------------------------
.. list-table:: Optional Tradovate Environment Variables
:header-rows: 1
:widths: 40 60
* - Variable
- Description
* - ``TRADOVATE_IS_PAPER``
- Set to ``true`` for demo trading, ``false`` for live (default: ``true``)
* - ``TRADOVATE_APP_ID``
- Application identifier (default: ``Lumibot``)
* - ``TRADOVATE_APP_VERSION``
- Application version (default: ``1.0``)
* - ``TRADOVATE_MD_URL``
- Market data URL override (not recommended)
Configuration Examples
----------------------
**Paper Trading Configuration:**
.. code-block:: bash
# Required credentials
TRADOVATE_USERNAME=your_username
TRADOVATE_DEDICATED_PASSWORD=your_api_password
TRADOVATE_CID=your_client_id
TRADOVATE_SECRET=your_secret_key
# Use paper trading (default)
TRADOVATE_IS_PAPER=true
# Set Tradovate as broker with separate data source
TRADING_BROKER=tradovate
DATA_SOURCE=databento # or projectx, ibrest, ib
**Live Trading Configuration:**
.. code-block:: bash
# Required credentials
TRADOVATE_USERNAME=your_username
TRADOVATE_DEDICATED_PASSWORD=your_api_password
TRADOVATE_CID=your_client_id
TRADOVATE_SECRET=your_secret_key
# Enable live trading
TRADOVATE_IS_PAPER=false
# Set Tradovate as broker with separate data source
TRADING_BROKER=tradovate
DATA_SOURCE=databento
Broker + Data Source Combinations
----------------------------------
Since Tradovate doesn't provide market data, you must configure a separate data source. Here are the supported combinations:
**Tradovate + DataBento (Recommended for Futures)**
.. code-block:: bash
# Tradovate broker
TRADING_BROKER=tradovate
TRADOVATE_USERNAME=your_username
TRADOVATE_DEDICATED_PASSWORD=your_api_password
TRADOVATE_CID=your_client_id
TRADOVATE_SECRET=your_secret_key
# DataBento data source
DATA_SOURCE=databento
DATABENTO_API_KEY=your_databento_key
**Tradovate + ProjectX**
.. code-block:: bash
# Tradovate broker
TRADING_BROKER=tradovate
TRADOVATE_USERNAME=your_username
TRADOVATE_DEDICATED_PASSWORD=your_api_password
TRADOVATE_CID=your_client_id
TRADOVATE_SECRET=your_secret_key
# ProjectX data source
DATA_SOURCE=projectx
PROJECTX_TOPONEFUTURES_API_KEY=your_projectx_key
PROJECTX_TOPONEFUTURES_USERNAME=your_projectx_username
PROJECTX_FIRM=toponefutures
**Tradovate + Interactive Brokers (REST API)**
.. code-block:: bash
# Tradovate broker
TRADING_BROKER=tradovate
TRADOVATE_USERNAME=your_username
TRADOVATE_DEDICATED_PASSWORD=your_api_password
TRADOVATE_CID=your_client_id
TRADOVATE_SECRET=your_secret_key
# Interactive Brokers data source (REST API)
DATA_SOURCE=ibrest
IB_USERNAME=your_ib_username
IB_PASSWORD=your_ib_password
**Tradovate + Interactive Brokers (Legacy TWS)**
.. code-block:: bash
# Tradovate broker
TRADING_BROKER=tradovate
TRADOVATE_USERNAME=your_username
TRADOVATE_DEDICATED_PASSWORD=your_api_password
TRADOVATE_CID=your_client_id
TRADOVATE_SECRET=your_secret_key
# Interactive Brokers data source (Legacy TWS)
DATA_SOURCE=ib
INTERACTIVE_BROKERS_IP=127.0.0.1
INTERACTIVE_BROKERS_PORT=7497
INTERACTIVE_BROKERS_CLIENT_ID=1
Running Your Strategy
---------------------
**Method 1: Using Environment Variables (Recommended)**
Set your environment variables as shown above, then run your strategy:
.. code-block:: python
from lumibot.strategies import Strategy
from lumibot.traders import Trader
from lumibot.entities import Asset
class MyFuturesStrategy(Strategy):
def initialize(self):
self.sleeptime = "1M" # Run every minute
# Use continuous futures contracts (recommended approach)
self.asset = Asset("MES", asset_type=Asset.AssetType.CONT_FUTURE)
def on_trading_iteration(self):
# Your futures trading logic here
price = self.get_last_price(self.asset)
self.log_message(f"{self.asset.symbol} price: {price}")
# Strategy will automatically use Tradovate + DataBento from environment
strategy = MyFuturesStrategy()
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
Futures Symbol Format
----------------------
When trading futures with Tradovate, use Lumibot's continuous futures format with Asset objects:
.. code-block:: python
from lumibot.entities import Asset
# Recommended approach - continuous futures
mes_asset = Asset("MES", asset_type=Asset.AssetType.CONT_FUTURE) # Micro E-mini S&P 500
es_asset = Asset("ES", asset_type=Asset.AssetType.CONT_FUTURE) # E-mini S&P 500
nq_asset = Asset("NQ", asset_type=Asset.AssetType.CONT_FUTURE) # E-mini NASDAQ
ym_asset = Asset("YM", asset_type=Asset.AssetType.CONT_FUTURE) # E-mini Dow
.. list-table:: Common Futures Symbols
:header-rows: 1
:widths: 30 70
* - Symbol
- Description
* - ``MES``
- Micro E-mini S&P 500 futures
* - ``ES``
- E-mini S&P 500 futures
* - ``NQ``
- E-mini NASDAQ futures
* - ``YM``
- E-mini Dow futures
* - ``RTY``
- E-mini Russell 2000 futures
* - ``CL``
- Crude Oil futures
* - ``GC``
- Gold futures
* - ``ZN``
- 10-Year Treasury Note futures
.. note::
Using continuous futures (``CONT_FUTURE``) is recommended as Lumibot automatically handles contract rollover and expiration dates.
Important Notes
---------------
1. **No Market Data**: Tradovate does not provide market data. You must configure a separate data source.
2. **Data Source Pricing**: You'll need to pay for market data through your chosen data source (DataBento, ProjectX, etc.).
3. **Futures Only**: Tradovate specializes in futures contracts. Stocks and options are not supported.
3. **Paper vs Live**: Always start with paper trading (``TRADOVATE_IS_PAPER=true``) to test your strategies.
4. **API Limits**: Be aware of Tradovate's API rate limits. Lumibot handles this automatically, but excessive requests may be throttled.
5. **Account Requirements**: Ensure your Tradovate account has sufficient margin for futures trading.
6. **Timezone**: Tradovate operates in US Central Time. Lumibot handles timezone conversions automatically.
Troubleshooting
---------------
**Authentication Issues**
- Verify your credentials are correct
- Ensure you're using the dedicated API password, not your login password
- Check that your CID and Secret match your API application
**Connection Problems**
- Confirm your internet connection is stable
- Check if Tradovate's API is experiencing downtime
- Verify your account is in good standing
**Data Issues**
- Remember that Tradovate doesn't provide market data
- Ensure your separate data source is properly configured
- Check that your data source supports the symbols you're trading
**Trading Issues**
- Verify your account has sufficient margin
- Check that you're trading during market hours
- Ensure the contract symbols are correctly formatted
For additional support, consult the `Tradovate API documentation `_ or contact Tradovate support directly.