Overall Statistics |
Total Trades 3 Average Win 0% Average Loss -1.88% Compounding Annual Return -46.286% Drawdown 4.400% Expectancy -1 Net Profit -2.853% Sharpe Ratio -5.778 Probabilistic Sharpe Ratio 0.740% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.437 Beta 0.111 Annual Standard Deviation 0.073 Annual Variance 0.005 Information Ratio -5.733 Tracking Error 0.095 Treynor Ratio -3.826 Total Fees $0.00 |
class QuantumTransdimensionalReplicator(QCAlgorithm): stopMarketTicket = None highestEURUSDPrice = 0 stop_price = None def Initialize(self): self.SetStartDate(2018,7, 30) # Set Start Date self.SetEndDate(2018,8, 15) #Set End Date self.SetCash(5000) # Set Strategy Cash # self.private Identity _prevClose; self.trailing_stop_distance = 0.98 self.AddForex("EURUSD", Resolution.Minute,Market.FXCM) self.Consolidate("EURUSD",timedelta(minutes=15), self.fifeteenminutebar) self.Rsi_in = self.RSI("EURUSD", 14, MovingAverageType.Simple) self.Window = RollingWindow[QuoteBar](2) self.SetWarmUp(timedelta(20)) def OnData(self, data): #Add security self.Window.Add(data["EURUSD"]) #self.Plot("Levels", "Asset Price", self.Securities["EURUSD"].Price) if not (self.Rsi_in.IsReady and self.Window.IsReady and not self.IsWarmingUp): return currBar = self.Window[0] pastBar = self.Window[1] #self.Log("Price: {0} -> {1} ... {2} -> {3}".format(pastBar.Time, pastBar.Close, currBar.Time, currBar.Close)) if self.Rsi_in.Current.Value < 20 and self.Portfolio["EURUSD"].Invested <= 0 and currBar.Value > pastBar.Value: #self.Debug("RSI is less then 20") self.MarketOrder("EURUSD", 5000) self.highestEURUSDPrice = self.Securities["EURUSD"].Close self.stop_price = self.trailing_stop_distance * self.highestEURUSDPrice self.stopMarketTicket = self.StopMarketOrder("EURUSD", -5000, self.stop_price) elif self.Portfolio["EURUSD"].Invested: #self.Plot("Levels", "Stop Price", self.Securities["EURUSD"].Price * 0.9) if self.Securities["EURUSD"].Close > self.highestEURUSDPrice: self.highestEURUSDPrice = self.Securities["EURUSD"].Close updateFields = UpdateOrderFields() updateFields.StopPrice = self.highestEURUSDPrice * self.trailing_stop_distance self.stop_price = self.highestEURUSDPrice * self.trailing_stop_distance self.stopMarketTicket.Update(updateFields) self.Plot("Custom", "Price", self.Securities["EURUSD"].Close) if self.stop_price is not None: self.Plot("Custom", "Stop", self.stop_price) 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 self.stopMarketTicket = None self.stop_price = None def fifeteenminutebar(self, bar): pass
from QuantConnect import * from Selection.ManualUniverseSelectionModel import ManualUniverseSelectionModel class G10CurrencySelectionModel(ManualUniverseSelectionModel): def __init__(self): super().__init__([Symbol.Create(x, SecurityType.Forex, Market.Oanda) for x in [ "EURUSD", "GBPUSD", "USDJPY", "AUDUSD", "NZDUSD","USDCAD", "USDCHF", "USDNOK", "USDSEK"]])