Overall Statistics |
Total Trades 72 Average Win 0.13% Average Loss -0.05% Compounding Annual Return 114.145% Drawdown 1.100% Expectancy 1.198 Net Profit 2.250% Sharpe Ratio 12.806 Probabilistic Sharpe Ratio 93.637% Loss Rate 36% Win Rate 64% Profit-Loss Ratio 2.44 Alpha 0.765 Beta 0.119 Annual Standard Deviation 0.078 Annual Variance 0.006 Information Ratio -8.02 Tracking Error 0.115 Treynor Ratio 8.329 Total Fees $0.00 |
from Execution.ImmediateExecutionModel import ImmediateExecutionModel from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Data import * from datetime import timedelta import pandas as pd from io import StringIO import datetime class main(QCAlgorithm): def Initialize(self): self.SetStartDate(2020,7,27) # Set Start Date self.SetEndDate(2020,12,31)# Set End Date self.SetCash(100000) # Set Strategy Cash # If using dropbox remember to add the &dl=1 to trigger a download csv = self.Download("https://www.dropbox.com/s/2hlxb85lo7y10i3/test.csv?dl=1") # read file (which needs to be a csv) to a pandas DataFrame. include following imports above self.df = pd.read_csv(StringIO(csv)) self.SetExecution(ImmediateExecutionModel()) self.AveragePrice = None for i in range(len(self.df)) : self.security=str(self.df.iloc[i,0]).replace(" ", "") #self.quantity=self.df.iloc[i,1] self.AddEquity(self.security,Resolution.Minute).SetDataNormalizationMode(DataNormalizationMode.Raw) ############## SLIPPAGE & FEE MODEL#################################################################### self.Securities[self.security].FeeModel = ConstantFeeModel(0) self.Securities[self.security].SlippageModel = ConstantSlippageModel(0) def OnData(self, slice): for i in range(len(self.df)): if slice.Time.hour==self.df.iloc[i,4] and slice.Time.minute==self.df.iloc[i,5]: self.MarketOrder(str(self.df.iloc[i,0]).replace(" ", ""),self.df.iloc[i,1]) self.df.iloc[i, 8] = self.Portfolio[str(self.df.iloc[i,0]).replace(" ", "")].AveragePrice for i in range(len(self.df)): if not slice.Bars.ContainsKey(str(self.df.iloc[i,0]).replace(" ", "")): return if self.df.iloc[i,8] != None : if (slice[str(self.df.iloc[i,0]).replace(" ", "")].Price > self.df.iloc[i,8] * self.df.iloc[i,3]): self.Liquidate(str(self.df.iloc[i,0]).replace(" ", "")," TAKE PROFIT @ " + str(slice[str(self.df.iloc[i,0]).replace(" ", "")].Price) +" AverageFillPrice " +str(self.df.iloc[i,8])) if (slice[str(self.df.iloc[i,0]).replace(" ", "")].Price < self.df.iloc[i,8] * self.df.iloc[i,2]): self.Liquidate(str(self.df.iloc[i,0]).replace(" ", "")," STOP LOSS @ " + str(slice[str(self.df.iloc[i,0]).replace(" ", "")].Price) +" AverageFillPrice " +str(self.df.iloc[i,8])) for i in range(len(self.df)): if slice.Time.hour==self.df.iloc[i,6] and slice.Time.minute==self.df.iloc[i,7]: self.Liquidate(str(self.df.iloc[i,0]).replace(" ", ""))