Introduction
In this tutorial, you'll learn how to create and deploy AI trading agents that can interact with Robinhood's API to execute trades on your behalf. This builds upon the recent announcement that Robinhood now supports AI agents for stock trading through a dedicated account system. We'll walk through creating a basic trading agent that can make buy/sell decisions based on simple technical indicators.
Prerequisites
- Basic Python programming knowledge
- Understanding of stock trading concepts and technical indicators
- Robinhood account with API access enabled
- Python libraries: robinhood-api, pandas, numpy
Step-by-Step Instructions
Step 1: Set Up Your Development Environment
Install Required Libraries
First, create a virtual environment and install the necessary packages:
python -m venv trading_agent_env
source trading_agent_env/bin/activate # On Windows: trading_agent_env\Scripts\activate
pip install robinhood-api pandas numpy
This creates an isolated environment to prevent conflicts with other Python projects and installs the essential libraries for trading and data analysis.
Step 2: Configure Robinhood API Access
Get Your Credentials
Robinhood's API requires authentication. You'll need to:
- Log into your Robinhood account
- Enable API access through their developer portal
- Generate your API credentials
import robinhood as rh
# Set up authentication
rh.login(username='your_username', password='your_password')
Important: Never hardcode credentials in your scripts. Use environment variables for security.
Step 3: Create a Basic Trading Agent Class
Define the Core Agent Structure
import robinhood as rh
import pandas as pd
import numpy as np
class TradingAgent:
def __init__(self, account_balance=10000):
self.account_balance = account_balance
self.portfolio = {}
def get_stock_data(self, symbol, interval='day', span='week'):
# Fetch stock data using Robinhood API
return rh.get_stock_historicals(symbol, interval, span)
def calculate_sma(self, data, window=20):
# Calculate Simple Moving Average
return pd.Series(data['close']).rolling(window=window).mean()
def make_decision(self, symbol):
# Simple trading logic based on moving averages
data = self.get_stock_data(symbol)
sma_20 = self.calculate_sma(data, 20)
if len(sma_20) >= 2:
if sma_20.iloc[-1] > sma_20.iloc[-2]:
return 'buy'
else:
return 'sell'
return 'hold'
This agent class sets up the basic structure for trading decisions, including data fetching and simple technical analysis.
Step 4: Implement Trading Logic
Add Execution Capabilities
def execute_trade(self, symbol, action, quantity=1):
if action == 'buy':
# Check if we have enough balance
stock_price = rh.get_latest_price(symbol)
if stock_price * quantity <= self.account_balance:
# Execute buy order
order = rh.order_buy_limit(symbol, quantity, stock_price)
self.account_balance -= stock_price * quantity
print(f'Bought {quantity} shares of {symbol}')
else:
print('Insufficient balance')
elif action == 'sell':
# Check if we own the stock
if symbol in self.portfolio and self.portfolio[symbol] >= quantity:
stock_price = rh.get_latest_price(symbol)
order = rh.order_sell_limit(symbol, quantity, stock_price)
self.account_balance += stock_price * quantity
self.portfolio[symbol] -= quantity
print(f'Sold {quantity} shares of {symbol}')
else:
print('Not enough shares to sell')
def run_trading_cycle(self, symbols):
for symbol in symbols:
decision = self.make_decision(symbol)
if decision == 'buy':
self.execute_trade(symbol, 'buy', 1)
elif decision == 'sell':
self.execute_trade(symbol, 'sell', 1)
This implementation adds the ability to execute actual trades, with proper balance checking and portfolio management.
Step 5: Set Up Automated Monitoring
Create a Trading Loop
import time
def main():
# Initialize agent with $10,000
agent = TradingAgent(account_balance=10000)
# List of stocks to monitor
symbols = ['AAPL', 'GOOGL', 'MSFT', 'TSLA']
while True:
try:
print('Executing trading cycle...')
agent.run_trading_cycle(symbols)
print(f'Current balance: ${agent.account_balance:.2f}')
# Wait 1 hour before next cycle
time.sleep(3600)
except Exception as e:
print(f'Error occurred: {e}')
time.sleep(60) # Wait 1 minute before retry
if __name__ == '__main__':
main()
This creates a continuous trading loop that checks for opportunities and executes trades automatically. The 1-hour interval respects market timing and reduces API rate limiting issues.
Step 6: Add Risk Management Features
Implement Stop-Loss and Position Sizing
def calculate_position_size(self, symbol, risk_percentage=0.02):
# Calculate position size based on risk tolerance
current_price = rh.get_latest_price(symbol)
stop_loss = current_price * 0.95 # 5% stop loss
risk_amount = self.account_balance * risk_percentage
position_size = risk_amount / (current_price - stop_loss)
return int(position_size)
def set_stop_loss(self, symbol, stop_loss_price):
# Set stop-loss orders for existing positions
pass
def get_portfolio_value(self):
# Calculate total portfolio value
total = self.account_balance
for symbol, quantity in self.portfolio.items():
stock_price = rh.get_latest_price(symbol)
total += stock_price * quantity
return total
Adding risk management ensures your agent doesn't lose significant capital and maintains proper position sizing based on your risk tolerance.
Summary
In this tutorial, you've built a basic AI trading agent that can fetch stock data, analyze technical indicators, and execute trades through Robinhood's API. The agent includes core functionality for decision-making, execution, and risk management. Remember that this is a simplified example - real trading requires more sophisticated analysis, backtesting, and risk controls. Always test your agents with small amounts before using significant capital, and consider regulatory requirements and market conditions when deploying automated trading systems.



