Overall Statistics |
Total Trades 583 Average Win 5.30% Average Loss -1.92% Compounding Annual Return 116.767% Drawdown 65.400% Expectancy 0.671 Net Profit 4942.781% Sharpe Ratio 1.857 Probabilistic Sharpe Ratio 81.465% Loss Rate 56% Win Rate 44% Profit-Loss Ratio 2.76 Alpha 0.639 Beta 1.538 Annual Standard Deviation 0.499 Annual Variance 0.249 Information Ratio 1.757 Tracking Error 0.421 Treynor Ratio 0.602 Total Fees $111787.81 Estimated Strategy Capacity $12000000.00 Lowest Capacity Asset TQQQ UK280CGTCB51 |
class PriceActionTQQQ(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 1, 1) self.SetCash(100000) self.TQQQ = self.AddEquity("TQQQ", Resolution.Minute).Symbol self.SetBenchmark("QQQ") self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage) self.SetExecution(ImmediateExecutionModel()) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel()) symbol = [Symbol.Create(self.TQQQ, SecurityType.Equity, Market.USA)] self.AddUniverseSelection(ManualUniverseSelectionModel(symbol)) self.AddAlpha(PriceActionTQQQAlphaModel(self, self.TQQQ)) self.SetRiskManagement(MaximumDrawdownPercentPortfolio(0.045)) class PriceActionTQQQAlphaModel(AlphaModel): def __init__(self, algorithm, tkr): self.period = timedelta(days=1) self.symbol = tkr self.symbolData = SymbolData(algorithm) def Update(self, algorithm, data): insights = [] HO = 0.0 OL = 0.0 if self.symbolData.Updated: Open = self.symbolData.open High = self.symbolData.high Low = self.symbolData.low Close = self.symbolData.close HO = High - Open OL = Open - Low HC = High - Close CL = Close - Low if Close > Open: if HO > OL: insights.append(Insight(self.symbol, self.period, InsightType.Price, InsightDirection.Up, 1, None)) if Close < Open: if HO < OL: insights.append(Insight(self.symbol, self.period, InsightType.Price, InsightDirection.Up, 1, None)) if HO > OL: insights.append(Insight(self.symbol, self.period, InsightType.Price, InsightDirection.Down, 1, None)) if HO == OL: insights.append(Insight(self.symbol, self.period, InsightType.Price, InsightDirection.Up, 1, None)) if Close == Open: if HO < OL: insights.append(Insight(self.symbol, self.period, InsightType.Price, InsightDirection.Up, 1, None)) if HO > OL: insights.append(Insight(self.symbol, self.period, InsightType.Price, InsightDirection.Down, 1, None)) if HO == OL: insights.append(Insight(self.symbol, self.period, InsightType.Price, InsightDirection.Flat, 1, None)) self.symbolData.Updated = False return insights def OnSecuritiesChanged(self, algorithm, changes): self.changes = changes class SymbolData: def __init__(self, algorithm): algorithm.Consolidate("TQQQ", Resolution.Daily, self.DailyBarHandler) self.open = 0 self.close = 0 self.high = 0 self.low = 0 self.Updated = False def DailyBarHandler(self, consolidated): self.open = consolidated.Open self.close = consolidated.Close self.high = consolidated.High self.low = consolidated.Low self.Updated = True