Overall Statistics |
Total Trades 2350 Average Win 0.04% Average Loss -0.02% Compounding Annual Return 103.383% Drawdown 6.800% Expectancy 0.248 Net Profit 7.671% Sharpe Ratio 3.029 Probabilistic Sharpe Ratio 66.999% Loss Rate 52% Win Rate 48% Profit-Loss Ratio 1.59 Alpha 0.749 Beta 1.436 Annual Standard Deviation 0.298 Annual Variance 0.089 Information Ratio 3.151 Tracking Error 0.252 Treynor Ratio 0.628 Total Fees $2368.10 Estimated Strategy Capacity $36000000.00 Lowest Capacity Asset BABA VU1EHIDJYJXH |
from QuantConnect import * from QuantConnect.Parameters import * from QuantConnect.Benchmarks import * from QuantConnect.Brokerages import * from QuantConnect.Util import * from QuantConnect.Interfaces import * from QuantConnect.Algorithm import * from QuantConnect.Algorithm.Framework import * from QuantConnect.Algorithm.Framework.Selection import * from QuantConnect.Algorithm.Framework.Alphas import * from QuantConnect.Algorithm.Framework.Portfolio import * from QuantConnect.Algorithm.Framework.Execution import * from QuantConnect.Algorithm.Framework.Risk import * from QuantConnect.Indicators import * from QuantConnect.Data import * from QuantConnect.Data.Consolidators import * from QuantConnect.Data.Custom import * from QuantConnect.Data.Fundamental import * from QuantConnect.Data.Market import * from QuantConnect.Data.UniverseSelection import * from QuantConnect.Notifications import * from QuantConnect.Orders import * from QuantConnect.Orders.Fees import * from QuantConnect.Orders.Fills import * from QuantConnect.Orders.Slippage import * from QuantConnect.Scheduling import * from QuantConnect.Securities import * from QuantConnect.Securities.Equity import * from QuantConnect.Securities.Forex import * from QuantConnect.Securities.Interfaces import * from datetime import date, datetime, timedelta from QuantConnect.Python import * from QuantConnect.Storage import * QCAlgorithmFramework = QCAlgorithm QCAlgorithmFrameworkBridge = QCAlgorithm from QuantConnect import Resolution from QuantConnect.Algorithm import QCAlgorithm import pandas as pd # # wilders moving average # class nvdia_rsi(QCAlgorithm): # def Initialize(self): # self.SetStartDate(2021, 3, 1) # Set Start Date # self.SetEndDate(2021, 3, 10) # Set End Date # self.SetCash(100000) # Set Strategy Cash # self.UniverseSettings.Resolution = Resolution.Daily # self.AddUniverse(self.SelectCoarse) # def SelectCoarse(self, coarse): # # select NVIDIA from coarse # nvda_ticker = "NVDA RHM8UTD8DT2D" # for c in coarse: # symbol = c.Symbol # if SymbolCache.GetTicker(symbol) == nvda_ticker: # nvda = symbol # # get nvidia history # history = self.History([nvda], 365, Resolution.Daily) # rsi = RelativeStrengthIndex(6, MovingAverageType.Wilders) # # update rsi for nvidia # for row in history.loc[nvda_ticker].itertuples(): # rsi.Update(row.Index, row.close) # # print time and rsi value # self.Debug(self.Time) # self.Debug(rsi.Current.Value) # return [] # force to liquidate on market open class buyBeforeMarketClose(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 5, 1) # Set Start Date self.SetCash(100000) # Set Strategy Cash self.UniverseSettings.Resolution = Resolution.Minute self.AddUniverseSelection( FineFundamentalUniverseSelectionModel(self.SelectCoarse, self.SelectFine) ) self.SetAlpha(buyBeforeMarketCloseAlphaModel()) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel(rebalance = None)) self.SetExecution(ImmediateExecutionModel()) def SelectCoarse(self, coarse): # select top 3 most liquid mostliquid = sorted(coarse, key=lambda c: c.DollarVolume, reverse=True)[:5] return [c.Symbol for c in mostliquid] def SelectFine(self, fine): # selected_new_day = [f.Symbol for f in fine] # selected = [s for s in selected_new_day if self.Portfolio.ContainsKey(s) and self.Portfolio[s].Invested and s not in selected_new_day] + selected_new_day return [f.Symbol for f in fine] class buyBeforeMarketCloseAlphaModel(AlphaModel): '''Buy 5 minutes before market close and hold for 3 days''' def __init__(self): self.securities = [] self.insightPeriod = timedelta(days=5) self.direction = InsightDirection.Up def Update(self, algorithm, data): insights = [] # buy 5 mins before market close if algorithm.Time.hour == 15 and algorithm.Time.minute == 55: for security in self.securities: insights.append(Insight.Price(security.Symbol, self.insightPeriod, self.direction)) return insights def OnSecuritiesChanged(self, algorithm, changes): for added in changes.AddedSecurities: self.securities.append(added)