Overall Statistics |
Total Trades 705 Average Win 1.40% Average Loss -2.32% Compounding Annual Return 152.960% Drawdown 33.800% Expectancy 0.102 Net Profit 326.600% Sharpe Ratio 2.699 Probabilistic Sharpe Ratio 83.832% Loss Rate 31% Win Rate 69% Profit-Loss Ratio 0.60 Alpha 1.453 Beta -0.134 Annual Standard Deviation 0.529 Annual Variance 0.28 Information Ratio 2.066 Tracking Error 0.599 Treynor Ratio -10.651 Total Fees $0.00 |
class DynamicUncoupledPrism(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) # Set Start Date self.SetCash(1000) # Set Strategy Cash self.symbol = "EURUSD" # Add forex and set brokerage model self.AddForex(self.symbol, Resolution.Minute, Market.Oanda, True, 50) self.SetBrokerageModel(BrokerageName.OandaBrokerage) # Setup indicators self.rsi = RelativeStrengthIndex(self.symbol, 6) # Setup bar consolidator thirtyMinuteConsolidator = QuoteBarConsolidator(timedelta(minutes=30)) self.SubscriptionManager.AddConsolidator(self.symbol, thirtyMinuteConsolidator) self.RegisterIndicator(self.symbol, self.rsi, thirtyMinuteConsolidator) # Setup window self.rsiWindow = RollingWindow[float](5) def OnData(self, data): self.rsiWindow.Add(self.rsi.Current.Value) # Wait for rsi if not self.rsi.IsReady: return # Define the signals should_buy = self.rsi.Current.Value < 30 and self.rsiWindow[1] > 30 should_short = self.rsi.Current.Value > 70 and self.rsiWindow[1] < 70 is_long = self.Portfolio[self.symbol].IsShort == False is_short = self.Portfolio[self.symbol].IsShort is_invested = self.Portfolio[self.symbol].Invested number_to_invest = 40000 # self.Portfolio.TotalPortfolioValue * 30 if is_invested == False: if should_buy: self.MarketOrder(self.symbol, number_to_invest / 2) if should_short: self.MarketOrder(self.symbol, -number_to_invest / 2) else: if should_buy and is_short: self.MarketOrder(self.symbol, number_to_invest) if should_short and is_long: self.MarketOrder(self.symbol, -number_to_invest) # self.Debug("IS_INVESTED: " + str(is_invested)) # self.Debug("IS_LONG: " + str(is_long)) # self.Debug("IS_SHORT: " + str(is_short)) # self.Debug("SHOULD LONG: " + str(should_buy)) # self.Debug("SHOULD EXIT LONG: " + str(should_exit_buy)) # self.Debug("SHOULD SHORT: " + str(should_sell)) # self.Debug("SHOULD EXIT SHORT: " + str(should_exit_sell)) # self.Debug(data.Bars[self.symbol].EndTime) # self.Debug("OPEN: " + str(data.Bars[self.symbol].Open)) # self.Debug("HIGH: " + str(data.Bars[self.symbol].High)) # self.Debug("LOW: " + str(data.Bars[self.symbol].Low)) # self.Debug("CLOSE: " + str(data.Bars[self.symbol].Close))