I struggled to find adequate documentation on bracket orders with the new and updated alpaca-py library, so I figured I’d post the below example for someone struggling to find an example in the future.
Imports
from alpaca.trading.client import TradingClient
from alpaca.trading.requests import MarketOrderRequest, TakeProfitRequest, StopLossRequest
from alpaca.trading.enums import OrderSide, TimeInForce, QueryOrderStatus, OrderClass
Keys
API_KEY = "<YOUR KEY>"
SECRET_KEY = "<YOUR SECRET>"
Variables
trading_client = TradingClient(API_KEY, SECRET_KEY, paper=True)
Functions
def main():
Request a Bracket market order (calling Bracket market order function)
market_order_data = bracket_order(
"AAPL", 1, 100, 200, OrderSide.BUY, TimeInForce.GTC
)
Submit market order
submit_order(market_order_data)
Bracket market order function
def bracket_order(ticker, size, stop, take_profit, order_side, tif):
stop_loss_request = StopLossRequest(
stop_price=stop
)
take_profit_request = TakeProfitRequest(
limit_price=take_profit
)
market_order_data = MarketOrderRequest(
symbol=ticker,
qty=size,
side=order_side,
time_in_force=tif,
order_class = OrderClass.BRACKET,
stop_loss=stop_loss_request,
take_profit=take_profit_request
)
return market_order_data
Submit an order and print the returned object function
def submit_order(order_data):
order = trading_client.submit_order(order_data)
for property_name, value in order:
print(f'"{property_name}": {value}')
Calling main() when running script directly
if __name__ == "__main__":
main()
Happy trading!
P