Overall Statistics |
Total Trades 1589 Average Win 0.00% Average Loss 0.00% Compounding Annual Return 0.181% Drawdown 0.100% Expectancy 0.944 Net Profit 0.365% Sharpe Ratio 1.166 Probabilistic Sharpe Ratio 61.226% Loss Rate 31% Win Rate 69% Profit-Loss Ratio 1.83 Alpha 0.001 Beta -0.003 Annual Standard Deviation 0.001 Annual Variance 0 Information Ratio -0.357 Tracking Error 0.152 Treynor Ratio -0.452 Total Fees $3416.35 Estimated Strategy Capacity $450000000000.00 Lowest Capacity Asset ES XKGCMV4QK9VL |
#region imports from datetime import datetime, timedelta import datetime from AlgorithmImports import * import pandas as pd from io import StringIO from QuantConnect.Python import * from QuantConnect.Indicators import RollingWindow # #endregion class RetrospectiveTanButterfly(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 9, 17) #self.SetEndDate(2022, 9, 24) self.SetEndDate(2022, 9, 23) self.SetCash(1000000000) self.symbolData = {} self.contract = self.AddFuture(Futures.Indices.SP500EMini , Resolution.Second, extendedMarketHours = False, dataNormalizationMode = DataNormalizationMode.BackwardsRatio, dataMappingMode = DataMappingMode.OpenInterest , contractDepthOffset = 0) symbol = self.contract.Symbol self.test1 = True self.list = [[self.Time,1]] self.trades_df = pd.DataFrame(self.list,columns=['entry','direction']) self.symbolData[symbol] = SymbolData() self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(6, 30), self.start) #self.symbolData[symbol].bidPrice = self.Securities[symbol].BidPrice def start(self): symbol = self.contract.Symbol for symbol, symbolData in self.symbolData.items(): if self.test1 == True: self.test1 = False data = self.Download("https://docs.google.com/spreadsheets/d/1NIbICr3S13U1zavi5AxOO9s_4GAg1RRXICn48j17498/export?format=csv") rows = [] for row in data.split('\n'): rows.append(row.split(',')) self.trades_df = pd.DataFrame(np.array(rows[1:]),columns=['entry','direction']) self.trades_df['direction'] = self.trades_df['direction'].str.strip('\r') #self.trades_df = self.trades_df.head(100) self.trades_df['entry'] = pd.to_datetime(self.trades_df['entry'], yearfirst=True) symbolData.trades_df = self.trades_df self.Log(f'df len symboldata after init {len(symbolData.trades_df)}') symbolData = self.symbolData[symbol] today = self.Time oneday = self.Time+timedelta(days=1) self.trades_df = symbolData.trades_df #convert pandas to timedelta/datetime self.trades_df = self.trades_df.loc[(self.trades_df['entry']>=today) & (self.trades_df['entry']<oneday)] self.Log(f'df len for next day {len(self.trades_df)}') def OnData(self, data): #loop through entries in google sheet to place them when self.Time matches if len(self.trades_df)>0: for trade in self.trades_df.itertuples(): if self.Time == trade.entry: self.MarketOrder(self.contract.Mapped, trade.direction) class SymbolData: def __init__(self): self.trades_df = 0