Options flow analysis is the practice of tracking institutional trading activity to gauge market sentiment. Because institutional traders, often referred to as "smart money", move large amounts of capital, their trades can significantly impact stock prices. By monitoring specific trade conditions, developers can build tools to identify Block Trades and Sweep Orders.
A Block Trade is a privately negotiated order executed apart from the public auction market, typically involving a large volume of contracts printed on a single exchange. In contrast, a Sweep Order indicates an aggressive buyer or seller who splits a large order across multiple exchanges to fill the position as quickly as possible, often signaling an expectation of immediate price movement.
Obtain API key:
Get your SteadyAPI key
The Endpoint
To access this data programmatically, SteadyAPI provides the GET /v1/markets/options/options-flow endpoint. This endpoint returns significant option transactions across various US option exchanges, allowing you to analyze strikes, premiums, and trade sides.
Documentation:
SteadyAPI Options Flow Endpoint Documentation
Detailed Parameter Analysis
To filter the flow data effectively, you must understand the required and optional parameters:
- type: This required parameter defines the asset class you wish to filter. Accepted values are
STOCKS,ETFS, orINDICES. - page: This optional integer allows you to paginate through the flow data to retrieve older transactions from the current trading session.
Python Example
The following script demonstrates how to fetch the latest options flow and filter for "Whale" trades, transactions with a premium value greater than $100,000.
import requests
import json
# Configuration
url = 'https://api.steadyapi.com/v1/markets/options/options-flow'
api_key = 'YOUR_AUTH_KEY' # Replace with your actual API Key
# Parameters
params = {
'type': 'STOCKS',
'page': '1'
}
headers = {
'Authorization': f'Bearer {api_key}'
}
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
print(f"Tracking Large Block Trades (Premium > $100k)...\n")
# Iterate through the body of the response
for trade in data.get('body', []):
# Clean premium string (e.g., "$41,500,000") to float for comparison
premium_str = trade.get('premium', '$0').replace('$', '').replace(',', '')
premium_val = float(premium_str)
# Filter for high-value trades
if premium_val > 100000:
print(f"Symbol: {trade['baseSymbol']}")
print(f"Contract: {trade['expiration']} ${trade['strikePrice']} {trade['symbolType']}")
print(f"Side: {trade['side'].upper()} | Condition: {trade['tradeCondition']}")
print(f"Premium: {trade['premium']}")
print("-" * 30)
except requests.exceptions.RequestException as e:
print(f"Error fetching data: {e}")
Understanding the Response
The API returns a JSON object containing metadata and a body array of trade objects. Below is the structure you can expect:
{
"meta": {
"version": "v1.0",
"status": 200,
"copywrite": "https://steadyapi.com",
"count": 20,
"total": 11984,
"page": "1"
},
"body": [
{
"symbol": "AMD|20240621|150.00C",
"baseSymbol": "AMD",
"symbolType": "Call",
"strikePrice": "150.00",
"expiration": "06/21/24",
"tradePrice": "41.50",
"tradeSize": "10,000",
"side": "ask",
"premium": "$41,500,000",
"tradeCondition": "SLCN",
"tradeTime": "02/22/24 12:23:58"
}
]
}
Key Fields
To build an effective analysis tool, you must interpret these specific fields correctly:
- premium: The total notional value of the trade. High premiums indicate high conviction from the institutional trader.
- tradeSize: The number of contracts exchanged in a single transaction.
- side: Indicates whether the trade occurred at the ask (buying pressure), bid (selling pressure), or mid (neutral). Trades executed at the Ask are generally considered aggressive bullish bets for Calls or bearish bets for Puts.
- tradeCondition: Codes such as SLCN (Sold Last Sale) or SLFT (Sold Last Form T) provide context on how the trade was reported to the exchange.
- expiration: Helps determine the time horizon of the sentiment. Short-term expirations suggest an immediate expected move, while LEAPS (long-term expirations) suggest a structural position.
Practical Use Cases
Whale Watching Algorithms
By setting a high threshold for the premium field (e.g., $1M+), developers can create alerts for massive capital inflows, allowing retail traders to see where "smart money" is positioning.
Sentiment Analysis based on Put/Call Flow
You can aggregate the total premium of Calls versus Puts over a rolling time window. If the Call Premium on the "Ask" side significantly outweighs the Put Premium, it generates a bullish flow signal for that specific ticker.
Learn more or explore other endpoints:
SteadyAPI Stock and Options Data API