Hello,

The boot camp for the trailing stop loss was helpful. Great bootcamp! I was also able to modify the code from the boot camp to buy with this type of code.

I am having difficulties combining a trailing stop buy with trailing stop sell. I basically want to place the trailing stop sell as soon as the trailing stop buy fills. Can anyone help rustle up some code for this?

Thanks!

class BootCampTask(QCAlgorithm):

# Order ticket for our stop order, Datetime when stop order was last hit
stopMarketTicket = None
stopMarketOrderFillTime = datetime.min
highestSPYPrice = -1
lowestSPYPrice = 9999999


def Initialize(self):
self.SetStartDate(2018, 12, 1)
self.SetEndDate(2018, 12, 10)
self.SetCash(100000)
spy = self.AddEquity("SPY", Resolution.Minute)
spy.SetDataNormalizationMode(DataNormalizationMode.Raw)

def OnData(self, data):

# 1. Plot the current SPY price to "Data Chart" on series "Asset Price"
self.Plot("Data Chart", "Asset Price", data["SPY"].Close)

if (self.Time - self.stopMarketOrderFillTime).days < 1:
return

if not self.Portfolio.Invested:
self.stopMarketTicket = self.StopMarketOrder("SPY", 500, 1.002 * self.Securities["SPY"].Close)
#2. Plot the moving stop price on "Data Chart" with "Stop Price" series name
self.Plot("Data Chart", "Stop Price", self.stopMarketTicket.Get(OrderField.StopPrice))

if self.Securities["SPY"].Close < self.lowestSPYPrice:

self.lowestSPYPrice = self.Securities["SPY"].Close
updateFields = UpdateOrderFields()
updateFields.StopPrice = self.lowestSPYPrice * 1.002
self.stopMarketTicket.Update(updateFields)

def OnOrderEvent(self, orderEvent):

if orderEvent.Status != OrderStatus.Filled:
return

if self.stopMarketTicket is not None and self.stopMarketTicket.OrderId == orderEvent.OrderId:
self.stopMarketOrderFillTime = self.Time

else:
self.stopMarketTicket = self.StopMarketOrder("SPY", -500, 0.998 * self.Securities["SPY"].Close)



#2. Plot the moving stop price on "Data Chart" with "Stop Price" series name
self.Plot("Data Chart", "Stop Price", self.stopMarketTicket.Get(OrderField.StopPrice))

if self.Securities["SPY"].Close > self.highestSPYPrice:

self.highestSPYPrice = self.Securities["SPY"].Close
updateFields = UpdateOrderFields()
updateFields.StopPrice = self.highestSPYPrice * 0.998
self.stopMarketTicket.Update(updateFields)

def OnOrderEvent(self, orderEvent):

if orderEvent.Status != OrderStatus.Filled:
return

if self.stopMarketTicket is not None and self.stopMarketTicket.OrderId == orderEvent.OrderId:
self.stopMarketOrderFillTime = self.Time