| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Sortino Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -0.58 Tracking Error 0.346 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset Portfolio Turnover 0% |
# region imports
from AlgorithmImports import *
# endregion
class DonchianChannelBreakoutAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 1, 1)
self.SetEndDate(2022, 8, 1)
self.SetCash(100000)
self.symbol = self.AddEquity("XOM", Resolution.Daily).Symbol
self.EnableAutomaticIndicatorWarmUp = True
self.indicator = self.DCH(self.symbol, 20, 20)
self.SetBenchmark(self.symbol)
self.can_short = False
def OnData(self, data: Slice):
if self.symbol not in data.Bars:
return
bar = data.Bars[self.symbol]
if bar.Close > self.indicator.UpperBand.Current.Value and not self.Portfolio[self.symbol].IsLong:
self.SetHoldings(self.symbol, 1)
elif bar.Close < self.indicator.LowerBand.Current.Value:
if self.can_short and not self.Portfolio[self.symbol].IsShort:
self.SetHoldings(self.symbol, -1)
if not self.can_short and self.Portfolio[self.symbol].IsLong:
self.SetHoldings(self.symbol, 0)
# Plot indicator and prices
self.Plot("Custom", "Donchian Channel High", self.indicator.UpperBand.Current.Value)
self.Plot("Custom", "High Price", bar.High)
self.Plot("Custom", "Close Price", bar.Close)
self.Plot("Custom", "Low Price", bar.Low)
self.Plot("Custom", "Donchian Channel Low", self.indicator.LowerBand.Current.Value)