For anyone with a programming background interested in carrying out API stock trades. I decided to compile several “Hello World” snippets on how to setup and execute trades on 4 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 = ''
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 = ''
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 = ''
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', '')
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']
Leave a Reply