| Overall Statistics |
|
Total Trades 1401 Average Win 0.35% Average Loss -0.20% Compounding Annual Return -18.476% Drawdown 36.600% Expectancy -0.250 Net Profit -18.580% Sharpe Ratio -0.657 Probabilistic Sharpe Ratio 2.490% Loss Rate 72% Win Rate 28% Profit-Loss Ratio 1.72 Alpha -0.173 Beta 0.196 Annual Standard Deviation 0.203 Annual Variance 0.041 Information Ratio -1.086 Tracking Error 0.31 Treynor Ratio -0.68 Total Fees $0.00 Estimated Strategy Capacity $39000.00 Lowest Capacity Asset XAUUSD 8I |
class EMAandSMACrossover1_5(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 2, 1)
self.SetEndDate(2021, 2, 1)
self.SetCash(100000)
self.symbol = self.AddCfd("XAUUSD", Resolution.Minute, Market.Oanda).Symbol
# Indicators
self.sma = self.SMA(self.symbol, 100, Resolution.Hour)
self.emaFast = self.EMA(self.symbol, 10, Resolution.Hour)
self.emaNorm = self.EMA(self.symbol, 25, Resolution.Hour)
self.emaSlow = self.EMA(self.symbol, 45, Resolution.Hour)
# Market Tickets
self.order = None
self.sl = None
self.tp = None
# Financial Variables
self.slPips = 2.5
self.tpPips = 6.0
self.slPrice = None
self.tpPrice = None
self.SetWarmUp(6000)
def OnData(self, data):
if not self.sma.IsReady:
return
price = self.Securities[self.symbol].Close
quantity = self.CalculateOrderQuantity(self.symbol, 1.0)
if not self.Portfolio.Invested:
if self.sma.Current.Value < price:
if self.emaFast.Current.Value > self.emaNorm.Current.Value and self.emaNorm.Current.Value > self.emaSlow.Current.Value:
self.slPrice = price - self.slPips
self.tpPrice = price + self.tpPips
# Market Order
self.order = self.MarketOrder(self.symbol, quantity)
# SL and TP Orders
self.sl = self.StopMarketOrder(self.symbol, -quantity, self.slPrice)
self.tp = self.LimitOrder(self.symbol, -quantity, self.tpPrice)
# Plot SL and TP
self.Plot("Data Chart", "Asset Price", price)
self.Plot("Data Chart", "Stop Loss", self.slPrice)
self.Plot("Data Chart", "Take Profit", self.tpPrice)
elif self.sma.Current.Value > price:
if self.emaSlow.Current.Value > self.emaNorm.Current.Value and self.emaNorm.Current.Value > self.emaFast.Current.Value:
self.slPrice = price + self.slPips
self.tpPrice = price - self.tpPips
# Market Order
self.order = self.MarketOrder(self.symbol, -quantity)
# SL and TP Orders
self.sl = self.StopMarketOrder(self.symbol, quantity, self.slPrice)
self.tp = self.LimitOrder(self.symbol, quantity, self.tpPrice)
# Plot SL and TP
self.Plot("Data Chart", "Asset Price", price)
self.Plot("Data Chart", "Stop Loss", self.slPrice)
self.Plot("Data Chart", "Take Profit", self.tpPrice)
def OnOrderEvent(self, orderEvent):
self.Log(orderEvent)
if not (orderEvent.Status == OrderStatus.Filled):
return
if (self.tp is None) or (self.sl is None):
return
if self.tp.OrderId == orderEvent.OrderId:
self.sl.Cancel()
# Plot SL and TP
self.Plot("Data Chart", "Stop Loss", self.slPrice)
self.Plot("Data Chart", "Take Profit", self.tpPrice)
return
if self.sl.OrderId == orderEvent.OrderId:
self.tp.Cancel()
# Plot SL and TP
self.Plot("Data Chart", "Stop Loss", self.slPrice)
self.Plot("Data Chart", "Take Profit", self.tpPrice)
return