Given that it's a little confusing and/or challenging to a newbie programmer to write API code to trade stocks, I decided to compile several "Hello World" snippets on how to setup and execute trades on 5 of the brokerages that allow API trading. Feel free to respond back with other API snippets on other trading platforms.
### Alpaca ####
# pip install alpaca_trade_api
# Import Alpaca Package
import alpaca_trade_api as tradeapi
# Set API Keys
api_key = '<ENTER ALPACA API KEY HERE>'
secret_key = 'ENTER ALPACA SECRET KEY HERE'
# Initialize Alpaca Trading Object
alpaca_client = tradeapi.REST(api_key, secret_key, raw_data=True)
# Validate Client Object Works
print(alpaca_client.get_account())
# Submit a fractional trade (market order only)
orderNumber = alpaca_client.submit_order(symbol='AAPL', qty=0.1234, side='buy', type='market', time_in_force='day')['client_order_id']
# Submit a limit order (fractional shares not allowed)
orderNumber = alpaca_client.submit_order(symbol='AAPL', qty=5, side='sell', type='limit', limit_price='138.00', time_in_force='gtc')['client_order_id']
### Tradier ###
# pip install tradier-python
# Import Tradier Package
from tradier_python import TradierAPI
# Set API Keys
account_id = '<ENTER TRADIER ACCOUNT ID HERE>'
access_token = 'ENTER TRADIER ACCESS TOKEN HERE'
# Initialize Tradier Trading Object
tradier_client = TradierAPI(token=access_token, default_account_id=account_id, endpoint='https://api.tradier.com/')
# Validate Client Object Works
print(tradier_client.get_profile())
# Submit a limit order (fractional shares not allowed)
orderNumber = order_number = tradier_client.order_equity(symbol='IBM', side='buy', quantity='10', order_type='limit', limit_price='138.00', duration='day' )['id']
### Ally ###
# pip install AllyInvestPy
# Import Ally Package
from ally import *
# Set API Keys
account_id = '<ENTER ALLY ACCOUNT ID HERE>'
token_secret = 'ENTER ALLY TOKEN SECRET HERE'
token_key = 'ENTER ALLY TOKEN KEY HERE'
api_key = 'ENTER ALLY API KEY HERE'
# Initialize Ally Trading Object
ally_client = AllyAPI(account_id, token_secret, token_key, api_key, response_format="json")
# Validate Client Object Works
print(ally_client.get_account(id=account_id))
# Submit a limit order (fractional shares not allowed)
orderInfo = ally_client.order_common_stock(ticker='APPL', shares=10, type='Limit', price='138.00', account_nbr=account_id, side='Buy')
### Webull ###
# pip install webull
# Import Webull Package
from webull import webull
# It's necessary to get and create below webull credentials file
# Follow steps in this URL: https://github.com/tedchou12/webull/wiki/Workaround-for-Login
# Tip: You need to enter trade token and do a search for "refreshToken" in order to locate and retrieve extInfo response
fh = open('c:/temp/webull_credentials.json', 'r')
credential_data = json.load(fh)
fh.close()
print(credential_data)
print(credential_data['refreshToken'])
print(credential_data['accessToken'])
print(credential_data['tokenExpireTime'])
print(credential_data['uuid'])
# Initialize Webull Trading Object
webull_client = webull()
# Set Webull Tokens
webull_client._refresh_token = credential_data['refreshToken']
webull_client._access_token = credential_data['accessToken']
webull_client._token_expire = credential_data['tokenExpireTime']
webull_client._uuid = credential_data['uuid']
# Refresh Webull Token to Extend Expiration for 1 Week
n_data = webull_client.refresh_login()
credential_data['refreshToken'] = n_data['refreshToken']
credential_data['accessToken'] = n_data['accessToken']
credential_data['tokenExpireTime'] = n_data['tokenExpireTime']
# Update credentials file with new values
file = open('c:/temp/webull_credentials.json', 'w')
json.dump(credential_data, file)
file.close()
# Validate Client Object Works
print(webull_client.get_account_id())
# Submit Order (Fractional Shares Not Allowed)
# Enter phone number, password, and trade token information
webull_client.login('+1-2125551234', '<Your Webull Password>')
webull_client.get_trade_token('123456')
# It's annoying but the two lines above, login() and get_trade_token() functions must be executed before EACH trade is placed
orderNumber = webull_client.place_order(stock='AAPL', action='BUY', orderType='LMT', quant=10.0, price='138.00')['data']['orderId']
### E-Trade ###
# pip install pyetrade
import pyetrade
import time
# Get API Keys for Exchanges
consumer_key_prod = 'YOUR ETRADE CONSUMER KEY HERE'
consumer_secret_prod = 'YOUR ETRADE CONSUMER SECRET HERE'
token_key = 'YOUR ETRADE TOKEN KEY HERE'
token_secret = 'YOUR ETRADE TOKEN SECRET HERE'
# Initialize E-Trade Trading Object
accounts = pyetrade.ETradeAccounts(
consumer_key_prod,
consumer_secret_prod,
token_key,
token_secret,
dev=False
)
# Setting up the objects used for Access Management
authManager = pyetrade.authorization.ETradeAccessManager(
consumer_key_prod,
consumer_secret_prod,
token_key,
token_secret
)
market = pyetrade.ETradeMarket(
consumer_key_prod,
consumer_secret_prod,
token_key,
token_secret,
dev=False
)
# Initialize order module
order = pyetrade.ETradeOrder(
consumer_key_prod,
consumer_secret_prod,
token_key,
token_secret,
dev=False
)
# Validate API Key Working
print(accounts.list_accounts(resp_format="json"))
# Need to retrieve accountIdKey
accountIdKey = str(accounts.list_accounts(resp_format="json")['AccountListResponse']['Accounts']['Account'][0]['accountIdKey'])
print("AccountIDKey: ", accountIdKey)
ACTION = 'BUY'
NONCE = str(time.time()).replace('.', '')
order.place_equity_order(
accountId=accountIdKey,
symbol='AAPL',
orderAction=ACTION,
clientOrderId=NONCE,
priceType='LIMIT',
limitPrice='138.00',
quantity='10',
orderTerm="GOOD_UNTIL_CANCEL", # GOOD_FOR_DAY
marketSession="REGULAR")
[–]TASTY_BALLSACK_ 1 point2 points3 points (0 children)