| Overall Statistics |
|
Total Trades 2332 Average Win 0.18% Average Loss -0.20% Compounding Annual Return -9.110% Drawdown 40.100% Expectancy -0.208 Net Profit -38.004% Sharpe Ratio -2.08 Probabilistic Sharpe Ratio 0.000% Loss Rate 59% Win Rate 41% Profit-Loss Ratio 0.94 Alpha -0.075 Beta 0.051 Annual Standard Deviation 0.036 Annual Variance 0.001 Information Ratio -1.246 Tracking Error 0.072 Treynor Ratio -1.453 Total Fees $6519.60 Estimated Strategy Capacity $12000000.00 Lowest Capacity Asset EURUSD 5O |
class BootCampTask(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2016, 6, 1)
self.SetEndDate(2021, 6, 1)
self.SetCash(100000)
self.lowBeforeOpen = None
self.highBeforeOpen = None
self.AddEquity("SPY", Resolution.Minute)
self.AddForex("EURUSD", Resolution.Minute, Market.FXCM)
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY", 0), Action(self.MarketOpen));
self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.BeforeMarketClose("SPY", 5), Action(self.ClosePosition));
self.SetTimeZone(TimeZones.NewYork);
self.SetBrokerageModel(BrokerageName.FxcmBrokerage);
def OnData(self, data):
if self.lowBeforeOpen == None or self.highBeforeOpen == None:
return
if self.Time.hour >= 10 or self.Time.minute < 31:
return
if data.ContainsKey("EURUSD") and self.Portfolio.Invested == False:
currentPrice = data["EURUSD"].Close
if currentPrice > self.highBeforeOpen.Current.Value:
self.SetHoldings("EURUSD", 1)
elif (currentPrice < self.lowBeforeOpen.Current.Value):
self.SetHoldings("EURUSD", -1)
def MarketOpen(self):
self.lowBeforeOpen = Minimum(15)
self.highBeforeOpen = Maximum(15)
history = self.History(["EURUSD"], 15, Resolution.Minute)
if "EURUSD" in history.index:
for index, row in history.loc["EURUSD"].iterrows():
self.lowBeforeOpen.Update(index, row["low"])
self.highBeforeOpen.Update(index, row["high"])
def ClosePosition(self):
self.Liquidate("EURUSD")
self.lowBeforeOpen = None
self.highBeforeOpen = None