trophy

Long Only, ETF Alpha Streams Competition with $27,500 Prize Pool      T-17

Back

Complex order with limit, stop loss and profit target

Depending on certain conditions in a strategy, I want to place a long order with a limit, a stop loss and a profit target such that

  • A long position is opened once the equity price reaches the limit 
  • The long position is closed once the equity price either reaches the stop loss (lower boundary) or the profit target (upper boundary)
How can I realise that with LEAN?
Update Backtest







0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Hi Filib,
You can realize that in three steps:

  1. Place the limit order (save its OrderTicket object or Id)
  2. In OnOrderEvent method, verify whether the order event refers to a filled order with the limit order Id;
    2a. If our limit order was filled, place a take profit (TP) limit order and a stop loss (SL) order (save their OrderTicket or Id)
  3. In OnOrderEvent method, verify whether the order event refers to a filled order with the TP or SL order.
    3a. If our TP or SL was filled, cancel the other.

For further information, please check out the docs, under Trading and Orders section.

1

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Thanks for your answer, but I have a few follow-up questions:

  • The documentation of the LimitOrder function says "Fill order for the limit price or better." What if the current security price is below the limitPrice and I want to open a long position if and only if the security price cllimbs above the limit price?
  • With what order methods can I realize a take profit and a stop loss order?
  • Did you confuse OnSecurityChanges with OnOrderEvent  ? According to the documentation, OnOrderEvent seems to be the correct method, but you keep referring to OnSecurityChanges.
0

Hi Filib,

Yes, sorry, I confused OnSecurityChanges with OnOrderEvent (I edited my previous comment).

  • Yes. If the price is below the limit price, it will be filled at the limit price. In backtesting mode, the model checks whether the limit price is below the last bar low and sets the fill price as the minimum of the limit price and the last bar high.
    Note that if the algorithm uses a market order, it can place the three orders in a sequence of statements.
  • If you don't want to use market orders (self.Order, self,MarketOrder, self.Liquidate methods) to close the position, the take profit order is a limit order (self.LimitOrder method) and the stop loss is a stop market order (self.StopMarketOrder method).
1

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Thanks again. You mentioned

Note that if the algorithm uses a market order, it can place the three orders in a sequence of statements.

How would I do that? 

0

Filib, 

If you use a MarketOrder then in your code, you dont have submit the orders inside the event "OnOrderEvent" since you can wait the MarketOrder be filled before placing the subsequent orders. Just call MarketOrder with synchronous flag, and in sequence, submit the orders for SL and TP. Before submiting the SL and TP, check the MarketOrder was filled

 

1

If I place a market order for the actual long position, followed by a SL and a TP as Erik Bengtson suggested, dont I have to cancel either the SL or the TP once one of them is filled, i.e. don't I have to use OnOrderEvent for this? 

0

Update Backtest





0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Loading...

This discussion is closed