Retrieve Thinkorswim Quotes with TOS.RTD
Overview
The RTD database includes predefined tables for retrieving real-time data from thinkorswim desktop.
Quote tables are designed to fetch data for stocks, futures, and currency pairs. Use the option tables for options data.
RTD or DDE formulas can be utilized, with RTD being the preferred method. Note that thinkorswim desktop may crash if more than 200,000 topics are requested.
RTD formulas can be converted to DDE using the patches from the database template folders.
Disable unnecessary columns to minimize server overhead.
The RTD server does not provide an actual data timestamp.
The datetime
, date
, and time
fields are updated using local system time adjusted to the table's configured time zone (Eastern Standard Time).
Real-Time Data Tables
Table Configurations
table_schema | table_name | load_code | is_history |
---|---|---|---|
rtd | tos_stock_list | ||
rtd | tos_last_stock_quotes | SELECT symbol FROM rtd.tos_stock_list | |
rtd | tos_historical_prices | SELECT symbol FROM rtd.tos_stock_list | |
rtd | tos_stock_quotes_ticks | SELECT symbol FROM rtd.tos_stock_list | 1 |
Task Table Examples
tos_stock_list:
code |
---|
AAPL |
GOOGL |
Primary Key Columns
TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | RTD_FORMULA | COMMENT |
---|---|---|---|---|
rtd | tos_last_stock_quotes | symbol | PK | |
rtd | tos_historical_prices | symbol | PK | |
rtd | tos_historical_prices | date | =Date() | PK |
rtd | tos_stock_quotes_ticks | id | PK, IDENTITY |
Real-Time Formulas
tos_last_stock_quotes
This table contains the latest data values for stocks, futures, and currency pairs from thinkorswim desktop.
column_name | rtd_formula | comment |
---|---|---|
symbol | PK | |
datetime | =DateTime() | |
date | =Date() | |
time | =Time() | |
description | =RTD("tos.rtd",,"DESCRIPTION",[symbol]) | |
last | =RTD("tos.rtd",,"LAST",[symbol]) | |
change | =RTD("tos.rtd",,"NET_CHANGE",[symbol]) | |
percent_change | =RTD("tos.rtd",,"PERCENT_CHANGE",[symbol]) | |
last_size | =RTD("tos.rtd",,"LAST_SIZE",[symbol]) | |
last_x | =RTD("tos.rtd",,"LX",[symbol]) | |
mark | =RTD("tos.rtd",,"MARK",[symbol]) | |
mark_change | =RTD("tos.rtd",,"MARK_CHANGE",[symbol]) | |
mark_percent_change | =RTD("tos.rtd",,"MARK_PERCENT_CHANGE",[symbol]) | |
bid | =RTD("tos.rtd",,"BID",[symbol]) | |
ask | =RTD("tos.rtd",,"ASK",[symbol]) | |
bid_size | =RTD("tos.rtd",,"BID_SIZE",[symbol]) | |
ask_size | =RTD("tos.rtd",,"ASK_SIZE",[symbol]) | |
bid_ask_size | =RTD("tos.rtd",,"BA_SIZE",[symbol]) | |
bid_x | =RTD("tos.rtd",,"BX",[symbol]) | |
ask_x | =RTD("tos.rtd",,"AX",[symbol]) | |
strength_meter | =RTD("tos.rtd",,"STRENGTH_METER",[symbol]) | |
open | =RTD("tos.rtd",,"OPEN",[symbol]) | |
high | =RTD("tos.rtd",,"HIGH",[symbol]) | |
low | =RTD("tos.rtd",,"LOW",[symbol]) | |
close | =RTD("tos.rtd",,"CLOSE",[symbol]) | |
volume | =RTD("tos.rtd",,"VOLUME",[symbol]) | |
open_int | =RTD("tos.rtd",,"OPEN_INT",[symbol]) | |
implied_vol | =RTD("tos.rtd",,"IMPL_VOL",[symbol]) | |
vol_index | =RTD("tos.rtd",,"VOL_INDEX",[symbol]) | |
front_vol | =RTD("tos.rtd",,"FRONT_VOL",[symbol]) | |
back_vol | =RTD("tos.rtd",,"BACK_VOL",[symbol]) | |
weighted_back_vol | =RTD("tos.rtd",,"WEIGHTED_BACK_VOL",[symbol]) | |
vol_diff | =RTD("tos.rtd",,"VOL_DIFF",[symbol]) | |
put_call_ratio | =RTD("tos.rtd",,"PUT_CALL_RATIO",[symbol]) | |
call_volume_index | =RTD("tos.rtd",,"CALL_VOLUME_INDEX",[symbol]) | |
put_volume_index | =RTD("tos.rtd",,"PUT_VOLUME_INDEX",[symbol]) | |
option_volume_index | =RTD("tos.rtd",,"OPTION_VOLUME_INDEX",[symbol]) | |
front_expected_move | =RTD("tos.rtd",,"FRONT_EX_MOVE",[symbol]) | |
back_expected_move | =RTD("tos.rtd",,"BACK_EX_MOVE",[symbol]) | |
expected_move_diff | =RTD("tos.rtd",,"EX_MOVE_DIFF",[symbol]) | |
beta | =RTD("tos.rtd",,"BETA",[symbol]) | |
high52 | =RTD("tos.rtd",,"52HIGH",[symbol]) | |
low52 | =RTD("tos.rtd",,"52LOW",[symbol]) | |
pe | =RTD("tos.rtd",,"PE",[symbol]) | |
eps | =RTD("tos.rtd",,"EPS",[symbol]) | |
market_cap | =RTD("tos.rtd",,"MARKET_CAP",[symbol]) | |
shares | =RTD("tos.rtd",,"SHARES",[symbol]) | |
dividend_yield | =RTD("tos.rtd",,"YIELD",[symbol]) | |
dividend_share | =RTD("tos.rtd",,"DIV",[symbol]) | |
last_update_timestamp |
tos_historical_prices
This table stores daily historical records for stocks, futures, and currency pairs from thinkorswim desktop.
column_name | rtd_formula | comment |
---|---|---|
symbol | PK | |
date | =Date() | PK |
time | =Time() | |
description | =RTD("tos.rtd",,"DESCRIPTION",[symbol]) | |
last | =RTD("tos.rtd",,"LAST",[symbol]) | |
change | =RTD("tos.rtd",,"NET_CHANGE",[symbol]) | |
percent_change | =RTD("tos.rtd",,"PERCENT_CHANGE",[symbol]) | |
last_size | =RTD("tos.rtd",,"LAST_SIZE",[symbol]) | |
last_x | =RTD("tos.rtd",,"LX",[symbol]) | |
mark | =RTD("tos.rtd",,"MARK",[symbol]) | |
mark_change | =RTD("tos.rtd",,"MARK_CHANGE",[symbol]) | |
mark_percent_change | =RTD("tos.rtd",,"MARK_PERCENT_CHANGE",[symbol]) | |
bid | =RTD("tos.rtd",,"BID",[symbol]) | |
ask | =RTD("tos.rtd",,"ASK",[symbol]) | |
bid_size | =RTD("tos.rtd",,"BID_SIZE",[symbol]) | |
ask_size | =RTD("tos.rtd",,"ASK_SIZE",[symbol]) | |
bid_ask_size | =RTD("tos.rtd",,"BA_SIZE",[symbol]) | |
bid_x | =RTD("tos.rtd",,"BX",[symbol]) | |
ask_x | =RTD("tos.rtd",,"AX",[symbol]) | |
strength_meter | =RTD("tos.rtd",,"STRENGTH_METER",[symbol]) | |
open | =RTD("tos.rtd",,"OPEN",[symbol]) | |
high | =RTD("tos.rtd",,"HIGH",[symbol]) | |
low | =RTD("tos.rtd",,"LOW",[symbol]) | |
close | =RTD("tos.rtd",,"CLOSE",[symbol]) | |
volume | =RTD("tos.rtd",,"VOLUME",[symbol]) | |
open_int | =RTD("tos.rtd",,"OPEN_INT",[symbol]) | |
implied_vol | =RTD("tos.rtd",,"IMPL_VOL",[symbol]) | |
vol_index | =RTD("tos.rtd",,"VOL_INDEX",[symbol]) | |
front_vol | =RTD("tos.rtd",,"FRONT_VOL",[symbol]) | |
back_vol | =RTD("tos.rtd",,"BACK_VOL",[symbol]) | |
weighted_back_vol | =RTD("tos.rtd",,"WEIGHTED_BACK_VOL",[symbol]) | |
vol_diff | =RTD("tos.rtd",,"VOL_DIFF",[symbol]) | |
put_call_ratio | =RTD("tos.rtd",,"PUT_CALL_RATIO",[symbol]) | |
call_volume_index | =RTD("tos.rtd",,"CALL_VOLUME_INDEX",[symbol]) | |
put_volume_index | =RTD("tos.rtd",,"PUT_VOLUME_INDEX",[symbol]) | |
option_volume_index | =RTD("tos.rtd",,"OPTION_VOLUME_INDEX",[symbol]) | |
front_expected_move | =RTD("tos.rtd",,"FRONT_EX_MOVE",[symbol]) | |
back_expected_move | =RTD("tos.rtd",,"BACK_EX_MOVE",[symbol]) | |
expected_move_diff | =RTD("tos.rtd",,"EX_MOVE_DIFF",[symbol]) | |
beta | =RTD("tos.rtd",,"BETA",[symbol]) | |
high52 | =RTD("tos.rtd",,"52HIGH",[symbol]) | |
low52 | =RTD("tos.rtd",,"52LOW",[symbol]) | |
pe | =RTD("tos.rtd",,"PE",[symbol]) | |
eps | =RTD("tos.rtd",,"EPS",[symbol]) | |
market_cap | =RTD("tos.rtd",,"MARKET_CAP",[symbol]) | |
shares | =RTD("tos.rtd",,"SHARES",[symbol]) | |
dividend_yield | =RTD("tos.rtd",,"YIELD",[symbol]) | |
dividend_share | =RTD("tos.rtd",,"DIV",[symbol]) | |
last_update_timestamp |
tos_stock_quotes_ticks
This table stores tick-level historical data for stocks, futures, and currency pairs from thinkorswim desktop.
column_name | rtd_formula | comment |
---|---|---|
id | PK, IDENTITY | |
symbol | ||
datetime | =DateTime() | |
date | =Date() | |
time | =Time() | |
description | =RTD("tos.rtd",,"DESCRIPTION",[symbol]) | |
last | =RTD("tos.rtd",,"LAST",[symbol]) | |
change | =RTD("tos.rtd",,"NET_CHANGE",[symbol]) | |
percent_change | =RTD("tos.rtd",,"PERCENT_CHANGE",[symbol]) | |
last_size | =RTD("tos.rtd",,"LAST_SIZE",[symbol]) | |
last_x | =RTD("tos.rtd",,"LX",[symbol]) | |
mark | =RTD("tos.rtd",,"MARK",[symbol]) | |
mark_change | =RTD("tos.rtd",,"MARK_CHANGE",[symbol]) | |
mark_percent_change | =RTD("tos.rtd",,"MARK_PERCENT_CHANGE",[symbol]) | |
bid | =RTD("tos.rtd",,"BID",[symbol]) | |
ask | =RTD("tos.rtd",,"ASK",[symbol]) | |
bid_size | =RTD("tos.rtd",,"BID_SIZE",[symbol]) | |
ask_size | =RTD("tos.rtd",,"ASK_SIZE",[symbol]) | |
bid_ask_size | =RTD("tos.rtd",,"BA_SIZE",[symbol]) | |
bid_x | =RTD("tos.rtd",,"BX",[symbol]) | |
ask_x | =RTD("tos.rtd",,"AX",[symbol]) | |
strength_meter | =RTD("tos.rtd",,"STRENGTH_METER",[symbol]) | |
open | =RTD("tos.rtd",,"OPEN",[symbol]) | |
high | =RTD("tos.rtd",,"HIGH",[symbol]) | |
low | =RTD("tos.rtd",,"LOW",[symbol]) | |
close | =RTD("tos.rtd",,"CLOSE",[symbol]) | |
volume | =RTD("tos.rtd",,"VOLUME",[symbol]) | |
open_int | =RTD("tos.rtd",,"OPEN_INT",[symbol]) | |
implied_vol | =RTD("tos.rtd",,"IMPL_VOL",[symbol]) | |
vol_index | =RTD("tos.rtd",,"VOL_INDEX",[symbol]) | |
front_vol | =RTD("tos.rtd",,"FRONT_VOL",[symbol]) | |
back_vol | =RTD("tos.rtd",,"BACK_VOL",[symbol]) | |
weighted_back_vol | =RTD("tos.rtd",,"WEIGHTED_BACK_VOL",[symbol]) | |
vol_diff | =RTD("tos.rtd",,"VOL_DIFF",[symbol]) | |
put_call_ratio | =RTD("tos.rtd",,"PUT_CALL_RATIO",[symbol]) | |
call_volume_index | =RTD("tos.rtd",,"CALL_VOLUME_INDEX",[symbol]) | |
put_volume_index | =RTD("tos.rtd",,"PUT_VOLUME_INDEX",[symbol]) | |
option_volume_index | =RTD("tos.rtd",,"OPTION_VOLUME_INDEX",[symbol]) | |
front_expected_move | =RTD("tos.rtd",,"FRONT_EX_MOVE",[symbol]) | |
back_expected_move | =RTD("tos.rtd",,"BACK_EX_MOVE",[symbol]) | |
expected_move_diff | =RTD("tos.rtd",,"EX_MOVE_DIFF",[symbol]) | |
beta | =RTD("tos.rtd",,"BETA",[symbol]) | |
high52 | =RTD("tos.rtd",,"52HIGH",[symbol]) | |
low52 | =RTD("tos.rtd",,"52LOW",[symbol]) | |
pe | =RTD("tos.rtd",,"PE",[symbol]) | |
eps | =RTD("tos.rtd",,"EPS",[symbol]) | |
market_cap | =RTD("tos.rtd",,"MARKET_CAP",[symbol]) | |
shares | =RTD("tos.rtd",,"SHARES",[symbol]) | |
dividend_yield | =RTD("tos.rtd",,"YIELD",[symbol]) | |
dividend_share | =RTD("tos.rtd",,"DIV",[symbol]) |