| Overall Statistics |
|
Total Trades 46 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe 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 Tracking Error 0 Treynor Ratio 0 Total Fees $46.13 Estimated Strategy Capacity $30000000.00 Lowest Capacity Asset AC R735QTJ8XC9X Portfolio Turnover 48.77% |
from AlgorithmImports import *
class ObjsectStoreUniverseSelectionAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2023, 12, 5)
self.SetEndDate(2023, 12, 7)
# Upload files to ObjectStore programmatically
if not self.ObjectStore.ContainsKey("trades_2023_12_06.csv"):
content = self.Download("https://www.dropbox.com/scl/fi/v7hbemm1haa9xuz9o9bto/trades_2023_12_06.csv?rlkey=ia2sbot56q9962s5oxwot7xi5&dl=1")
self.ObjectStore.Save("trades_2023_12_06.csv", content)
self.symbols = []
self.universe = self.AddUniverse(StockDataSource, "my-stock-data-source", Resolution.Daily, self.Filter)
benchmark = self.AddEquity("SPY", Resolution.Minute).Symbol
self.Schedule.On(self.DateRules.EveryDay(benchmark), self.TimeRules.BeforeMarketClose(benchmark, 30), self.Trade)
self.Settings.MinimumOrderMarginPortfolioPercentage = 0.01
def Filter(self, data):
'''The filter returns all symbols'''
self.symbols = [x.Symbol for x in data if x.Value > 0]
return self.symbols
def Trade(self):
if not self.symbols:
return
weight = 1/len(self.symbols)
for symbol in self.symbols:
quantity = self.CalculateOrderQuantity(symbol, weight)
if quantity != 0:
self.MarketOnCloseOrder(symbol, quantity)
class StockDataSource(PythonData):
'''
This data source looks for data in the ObjectStore
https://www.quantconnect.com/docs/v2/cloud-platform/organizations/object-store
trades_2023_12_06.csv contains data in the format:
,symbol,date,fiscal_date_ending,predictions,spx_return_coef
0,PNC US,2023-12-06,2023-12-31,1,1.1914152093473287
1,USB US,2023-12-06,2023-12-31,1,1.5266932633773835
'''
market_hours_data_base = MarketHoursDatabase.FromDataFolder()
hours = market_hours_data_base.GetExchangeHours(Market.USA, "[*]", SecurityType.Equity)
symbols = []
def GetSource(self, config, date, isLiveMode):
key = 'trades_2023_12_06.csv'
return SubscriptionDataSource(key, SubscriptionTransportMedium.ObjectStore)
def Reader(self, config, line, date, isLiveMode):
csv = line.split(',')
if not csv[0]:
return None
localDateTime = datetime.strptime(csv[2], "%Y-%m-%d") - timedelta(0)
while not self.hours.IsDateOpen(localDateTime):
localDateTime = localDateTime - timedelta(1)
ticker = csv[1].split(' ')[0]
sid = SecurityIdentifier.GenerateEquity(ticker, Market.USA, mappingResolveDate=date)
data = StockDataSource()
data.Symbol = Symbol(sid, ticker)
data.EndTime = localDateTime
data.Value = float(csv[4])
return data