| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% 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 $0.00 |
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Algorithm.Framework")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Orders import *
from QuantConnect.Algorithm import *
from QuantConnect.Algorithm.Framework import *
from QuantConnect.Algorithm.Framework.Alphas import *
from QuantConnect.Algorithm.Framework.Portfolio import *
from QuantConnect.Algorithm.Framework.Selection import *
from QuantConnect.Data.UniverseSelection import *
from QuantConnect.Indicators import ExponentialMovingAverage
from Portfolio.EqualWeightingPortfolioConstructionModel import EqualWeightingPortfolioConstructionModel
from Alphas.ConstantAlphaModel import ConstantAlphaModel
from Execution.ImmediateExecutionModel import ImmediateExecutionModel
from Risk.MaximumSectorExposureRiskManagementModel import MaximumSectorExposureRiskManagementModel
from itertools import chain
from math import ceil
from datetime import timedelta
import numpy as np
import pandas as pd
from scipy import stats
import math
class BasicTemplateFrameworkAlgorithm(QCAlgorithm):
def Initialize(self):
self.UniverseSettings.Resolution = Resolution.Daily
self.AddEquity("SPY")
self.SetStartDate(2017,2,1) #Set Start Date
self.SetEndDate(2017,3,1) #Set End Date
self.SetCash(100000) #Set Strategy Cash
self.lastMonth = -1
self.AddUniverse(self.SelectCoarse, self.SelectFine)
self.NumberOfSymbolsCoarse = 10
self.dollarVolumeBySymbol = {}
self.symbols = []
self.Schedule.On(self.DateRules.WeekStart("SPY"), self.TimeRules.AfterMarketOpen("SPY", 1), self.ViewUniverse)
def ViewUniverse(self):
editted_symbol_list = []
universe = self.UniverseManager.Values[0]
self.symbol_list = []
symbols = universe.Members.Keys
for symbol in symbols:
self.symbol_list.append(symbol.Value)
self.AddEquity(symbol.Value)
if len(self.symbol_list) == 0:
self.Log("empty")
else:
historical_data = self.History(self.symbol_list,30, Resolution.Daily)
for j in range (0,len(self.symbol_list)):
self.score = 0
try:
stock_data = historical_data.loc[self.symbol_list[j]]["close"]
self.Log(self.symbol_list[j])
self.Log(stock_data)
except:
self.Log("No data for stock")
def SelectCoarse(self, coarse):
coarse = list(coarse)
if len(coarse) == 0:
return self.symbols
month = coarse[0].EndTime.month
if month == self.lastMonth:
return self.symbols
self.lastMonth = month
filtered = [x for x in coarse if x.HasFundamentalData
and x.Volume > 0
and x.Price > 0]
# sort the stocks by dollar volume and take the top 1500
top = sorted(filtered, key=lambda x: x.DollarVolume, reverse=True)[:self.NumberOfSymbolsCoarse]
self.dollarVolumeBySymbol = { i.Symbol: i.DollarVolume for i in top }
self.symbols = list(self.dollarVolumeBySymbol.keys())
return self.symbols
def SelectFine(self, fine):
filteredFine = [x for x in fine if x.CompanyReference.CountryId == "USA"
and (x.CompanyReference.PrimaryExchangeID == "NYS" or x.CompanyReference.PrimaryExchangeID == "NAS")
and x.EarningReports.BasicAverageShares.ThreeMonths * x.EarningReports.BasicEPS.TwelveMonths * x.ValuationRatios.PERatio > 5e8]
count = len(filteredFine)
if count == 0: return []
self.symbols = [f.Symbol for f in filteredFine]
return self.symbols