Hide navigation sidebar
Hide table of contents sidebar
Toggle table of contents sidebar

# self.create_order

lumibot.strategies.strategy.Strategy.create_order(self, asset, quantity, side, limit_price=None, stop_price=None, time_in_force='day', good_till_date=None, take_profit_price=None, stop_loss_price=None, stop_loss_limit_price=None, trail_price=None, trail_percent=None, position_filled=False, exchange='SMART', quote=None, pair=None)

  Creates a new order for this specific strategy. Once created, an order must still be submitted.

  Some notes on Crypto markets: Crypto markets required both a base currency and a quote currency to create an order. These may be entered in one of two ways.

  > 1. tuple of Assets.
  >      self.create_order(

  >        (Asset(symbol=’BTC’, asset_type=’crypto’), Asset(symbol=’USDT’, asset_type=’crypto’)), .50, buy,

  >      )

  > 2. Use the quote parameter.
  >      self.create_order(

  >        Asset(symbol=’BTC’, asset_type=’crypto’), .50, buy, quote=Asset(symbol=’USDT’, asset_type=’crypto’),

  >      )

  Orders for crypto markets are restriced to: market, limit, stop_limit.

  Crypto markets’ orders are simple. There are no compound orders such oco or bracket. Also, duration of orders are all GTC.

  Parameters

    - asset (str or Asset) – The asset that will be traded. If this is just a stock, then str is sufficient. However, all assets other than stocks must use Asset.

    - quantity (int string Decimal (float will deprecate)) – The number of shares or units to trade. One may enter an int, a string number eg: “3.213”, or a Decimal obect, eg: Decimal(“3.213”). Internally all will convert to Decimal.

    - side (str) – Whether the order is buy or sell.

    - limit_price (float) – A Limit order is an order to buy or sell at a specified price or better. The Limit order ensures that if the order fills, it will not fill at a price less favorable than your limit price, but it does not guarantee a fill.

    - stop_price (float) – A Stop order is an instruction to submit a buy or sell market order if and when the user-specified stop trigger price is attained or penetrated.

    - time_in_force (str) –

      Amount of time the order is in force. Order types include:

        - ’day’ Orders valid for the remainder of the day.

        - ’gtc’ Good until cancelled.

        - ’gtd’ Good until date.

      (Default: ‘day’)

    - good_till_date (datetime.datetime) – This is the time order is valid for Good Though Date orders.

    - take_profit_price (float) – Limit price used for bracket orders and one cancels other orders.

    - stop_loss_price (float) – Stop price used for bracket orders and one cancels other orders.

    - stop_loss_limit_price (float) – Stop loss with limit price used for bracket orders and one cancels other orders.

    - trail_price (float) – Trailing stop orders allow you to continuously and automatically keep updating the stop price threshold based on the stock price movement. trail_price sets the trailing price in dollars.

    - trail_percent (float) – Trailing stop orders allow you to continuously and automatically keep updating the stop price threshold based on the stock price movement. trail_price sets the trailing price in percent.

    - position_filled (bool) – The order has been filled.

    - exchange (str) – The exchange where the order will be placed. Default = SMART

    - quote (Asset) – This is the currency that the main coin being bought or sold will exchange in. For example, if trading BTC/ETH this parameter will be ‘ETH’ (as an Asset object).

  Returns

    Order object ready to be submitted for trading.

  Return type

    Order

  Example

      >>> # For a market buy order
      >>> order = self.create_order("SPY", 100, "buy")
      >>> self.submit_order(order)

      >>> # For a limit order where limit price = 100
      >>> limit_order = self.create_order("SPY", 1, "buy", limit_price=100)
      >>> self.submit_order(limit_order)

      >>> # Sell 100 shares of TLT
      >>> order = self.create_order("TLT", 100, "sell")
      >>> 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 a limit sell order
      >>> order = self.create_order("SPY", 100, "sell", limit_price=100.00)
      >>> self.submit_order(order)

      >>> # For an order with a trailing stop
      >>> order = self.create_order("SPY", 100, "buy", trail_price=100.00)
      >>> self.submit_order(order)

      >>> # For an OCO order
      >>> order = self.create_order(
      >>>                "SPY",
      >>>                100,
      >>>                "sell",
      >>>                take_profit_price=limit,
      >>>                stop_loss_price=stop_loss,
      >>>                position_filled=True,
      >>>            )

      >>> # For a bracket order
      >>> order = self.create_order(
      >>>                "SPY",
      >>>                100,
      >>>                "sell",
      >>>                take_profit_price=limit,
      >>>                stop_loss_price=stop_loss,
      >>>                stop_loss_limit_price=stop_loss_limit,
      >>>            )

      >>> # For a bracket order with a trailing stop
      >>> order = self.create_order(
      >>>                "SPY",
      >>>                100,
      >>>                "sell",
      >>>                trail_percent=trail_percent,
      >>>                take_profit_price=limit,
      >>>                stop_loss_price=stop_loss,
      >>>                stop_loss_limit_price=stop_loss_limit,
      >>>            )

      >>> # For an OTO order
      >>> order = self.create_order(
      >>>                "SPY",
      >>>                100,
      >>>                "sell",
      >>>                take_profit_price=limit,
      >>>                stop_loss_price=stop_loss,
      >>>            )

      >>> # For a futures order
      >>> asset = Asset("ES", asset_type="future", expiration="2019-01-01")
      >>> order = self.create_order(asset, 100, "buy", limit_price=100.00)
      >>> self.submit_order(order)

      >>> # For a futures order with a trailing stop
      >>> asset = Asset("ES", asset_type="future", expiration="2019-01-01")
      >>> order = self.create_order(
      >>>                asset,
      >>>                100,
      >>>                "buy",
      >>>                trail_percent=trail_percent,
      >>>                limit_price=limit,
      >>>                stop_price=stop_loss,
      >>>            )
      >>> self.submit_order(order)

      >>> # For an option order
      >>> asset = Asset("SPY", asset_type="option", expiration="2019-01-01", strike=100.00)
      >>> order = self.create_order(asset, 100, "buy", limit_price=100.00)
      >>> self.submit_order(order)

      >>> # For an option order with a trailing stop
      >>> asset = Asset("SPY", asset_type="option", expiration="2019-01-01", strike=100.00)
      >>> order = self.create_order(
      >>>                asset,
      >>>                100,
      >>>                "buy",
      >>>                trail_percent=trail_percent,
      >>>                limit_price=limit,
      >>>                stop_price=stop_loss,
      >>>            )
      >>> self.submit_order(order)

      >>> # For a FOREX order
      >>> asset = Asset(
      >>>    symbol="CHF",
      >>>    currency="EUR",
      >>>    asset_type="forex",
      >>>  )
      >>> order = self.create_order(asset, 100, "buy", limit_price=100.00)
      >>> self.submit_order(order)

      >>> # For a options order with a limit price
      >>> asset = Asset("SPY", asset_type="option", expiration="2019-01-01", strike=100.00)
      >>> order = self.create_order(asset, 100, "buy", limit_price=100.00)
      >>> self.submit_order(order)

      >>> # For a options order with a trailing stop
      >>> asset = Asset("SPY", asset_type="option", expiration="2019-01-01", strike=100.00)
      >>> order = self.create_order(
      >>>                asset,
      >>>                100,
      >>>                "buy",
      >>>                trail_percent=trail_percent,
      >>>                limit_price=limit,
      >>>                stop_price=stop_loss,
      >>>            )
      >>> self.submit_order(order)

      >>> # For a cryptocurrency order with a market price
      >>> base = Asset("BTC", asset_type="crypto")
      >>> quote = Asset("USD", asset_type="crypto")
      >>> order = self.create_order(base, 0.05, "buy", quote=quote)
      >>> self.submit_order(order)

      >>> # For a cryptocurrency the base and the quote may be
      >>> # combined as a tuple for all order types.
      >>> base = Asset("BTC", asset_type="crypto")
      >>> quote = Asset("USD", asset_type="crypto")
      >>> order = self.create_order((base, quote), 0.05, "buy")
      >>> self.submit_order(order)

      >>> # Placing a limit order with a quote asset for cryptocurrencies
      >>> base = Asset("BTC", asset_type="crypto")
      >>> quote = Asset("USD", asset_type="crypto")
      >>> order = self.create_order(base, 0.05, "buy", limit_price=41000,  quote=quote)
      >>> self.submit_order(order)