Hi all,

If I run my code, I only get response/orders for the first day.

I fail in running the code every day and get errors if I try something with: self.Schedule.On(self.DateRules.EveryDay()

Any idea how I can return my code to start every day? I only want to do 1 trade per day.

  1. from AlgorithmImports import *
  2. class BreakoutCallBuy(QCAlgorithm):
  3. openingBar = None
  4. def Initialize(self):
  5. self.SetStartDate(2022, 7, 1)
  6. self.SetEndDate(2022, 7, 17)
  7. self.SetCash(1000)
  8. self.LastTime = None
  9. self.SetBenchmark("SPY")
  10. equitySPY= self.AddEquity("SPY", Resolution.Minute)
  11. equitySPY.SetDataNormalizationMode(DataNormalizationMode.Raw)
  12. self.equitySPY = equitySPY.Symbol
  13. self.Consolidate("SPY", timedelta(minutes=30), self.OnDataConsolidated)
  14. self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(9, 30),self.SetFilter)
  15. self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(15, 15), self.Liquidate)
  16. def SetFilter(self):
  17. optionSPY = self.AddOption("SPY", Resolution.Minute)
  18. optionSPY.SetFilter(10, 20, timedelta(14), timedelta(21))
  19. def OnDataConsolidated(self, bar):
  20. if bar.Time.hour == 9 and bar.Time.minute == 30:
  21. self.openingBar = bar
  22. def OnData(self, data):
  23. if self.openingBar is None:
  24. return
  25. # Maximaal één trade per dag
  26. if self.LastTime == self.Time.day:
  27. return
  28. # Trade openen als er breakout is: prijs is hoger dan hoogste prijs in eerste half uur
  29. if data["SPY"].Close > self.openingBar.High:
  30. for i in data.OptionChains:
  31. chains = i.Value
  32. self.BuyCall(chains)
  33. self.LastTime = self.Time.day
  34. # Bepalen welke contracten er worden gekocht
  35. def BuyCall(self,chains):
  36. expiry = sorted(chains,key = lambda x: x.Expiry, reverse=True)[0].Expiry
  37. calls = [i for i in chains if i.Expiry == expiry and i.Right == OptionRight.Call]
  38. call_contracts = sorted(sorted(calls,
  39. key = lambda x: abs(x.Strike - x.UnderlyingLastPrice)),\
  40. key = lambda x: x.AskPrice, reverse=False)
  41. if len(call_contracts) == 0:
  42. return
  43. self.call = call_contracts[0]
  44. # Aantal contracten
  45. quantity = int(300 / (self.call.AskPrice*100))
  46. self.Buy(self.call.Symbol, quantity)
  47. self.LimitOrder(self.call.Symbol, -quantity, round((self.call.AskPrice*1.25),2))
  48. self.StopMarketOrder(self.call.Symbol, -quantity, round((self.call.AskPrice*0.80),2))
  49. # Orders in logboek
  50. def OnOrderEvent(self, orderEvent):
  51. self.Log(str(orderEvent))
+ Expand

Author

Alex Veraart

July 2022