self.submit_order

lumibot.strategies.strategy.Strategy.submit_order(self, order: Order, **kwargs)

Submit an order or a list of orders for assets

Submits an order or a list of orders for processing by the active broker.

Parameters:
  • order (Order object or list of Order objects) – Order object or a list of order objects containing the asset and instructions for executing the order.

  • is_multileg (bool) – Tradier only. A boolean value to indicate if the orders are part of one multileg order. Currently, this is only available for Tradier.

  • order_type (str) – Tradier only. The order type for the multileg order. Possible values are: (‘market’, ‘debit’, ‘credit’, ‘even’). Default is ‘market’.

  • duration (str) – Tradier only. The duration for the multileg order. Possible values are: (‘day’, ‘gtc’, ‘pre’, ‘post’). Default is ‘day’.

  • price (float) – Tradier only. The limit price for the multileg order. Required for ‘debit’ and ‘credit’ order types.

  • tag (str) – Tradier only. A tag for the multileg order.

Returns:

Processed order object(s).

Return type:

Order object or list of Order objects

Examples

Submitting a single order:

>>> # For a market buy order
>>> order = self.create_order("SPY", 100, "buy")
>>> self.submit_order(order)
>>> # For a limit buy order
>>> order = self.create_order("SPY", 100, "buy", limit_price=100.00)
>>> self.submit_order(order)
>>> # For a stop loss order
>>> order = self.create_order("SPY", 100, "buy", stop_price=100.00)
>>> self.submit_order(order)
>>> # For a stop limit order
>>> order = self.create_order("SPY", 100, "buy", limit_price=100.00, stop_price=100.00)
>>> self.submit_order(order)
>>> # For a market sell order
>>> order = self.create_order("SPY", 100, "sell")
>>> self.submit_order(order)
>>> # For buying a crypto with a market price
>>> from lumibot.entities import Asset
>>>
>>> asset_base = Asset(
>>>    "BTC",
>>>    asset_type=Asset.AssetType.CRYPTO,
>>> )
>>> asset_quote = Asset(
>>>    "USD",
>>>    asset_type=Asset.AssetType.CRYPTO,
>>> )
>>> order = self.create_order(asset_base, 0.1, "buy", quote=asset_quote)
>>> self.submit_order(order)
>>> # or...
>>> order = self.create_order((asset_base, asset_quote), 0.1, "buy")
>>> self.submit_order(order)

Submitting multiple orders:

>>> # For 2 market buy orders
>>> order1 = self.create_order("SPY", 100, "buy")
>>> order2 = self.create_order("TLT", 200, "buy")
>>> self.submit_order([order1, order2])
>>> # For 2 limit buy orders
>>> order1 = self.create_order("SPY", 100, "buy", limit_price=100.00)
>>> order2 = self.create_order("TLT", 200, "buy", limit_price=100.00)
>>> self.submit_order([order1, order2])
>>> # For 2 CRYPTO buy orders
>>> from lumibot.entities import Asset
>>>
>>> asset_BTC = Asset(
>>>    "BTC",
>>>    asset_type=Asset.AssetType.CRYPTO,
>>> )
>>> asset_ETH = Asset(
>>>    "ETH",
>>>    asset_type=Asset.AssetType.CRYPTO,
>>> )
>>> asset_quote = Asset(
>>>    "USD",
>>>    asset_type=Asset.AssetType.FOREX,
>>> )
>>> order1 = self.create_order(asset_BTC, 0.1, "buy", quote=asset_quote)
>>> order2 = self.create_order(asset_ETH, 10, "buy", quote=asset_quote)
>>> self.submit_order([order1, order2])
>>> # or...
>>> order1 = self.create_order((asset_BTC, asset_quote), 0.1, "buy")
>>> order2 = self.create_order((asset_ETH, asset_quote), 10, "buy")
>>> self.submit_order([order1, order2])