| Overall Statistics |
|
Total Trades 6 Average Win 2.05% Average Loss -0.13% Compounding Annual Return 2374.021% Drawdown 0.500% Expectancy 4.442 Net Profit 1.774% Sharpe Ratio -9.703 Probabilistic Sharpe Ratio 0% Loss Rate 67% Win Rate 33% Profit-Loss Ratio 15.32 Alpha 0.021 Beta 2.151 Annual Standard Deviation 0.027 Annual Variance 0.001 Information Ratio -9.028 Tracking Error 0.014 Treynor Ratio -0.121 Total Fees $51.66 |
import datetime
class MyCoarseUniverseAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2019, 11, 4) # Set Start Date
self.SetEndDate(2019, 11, 5) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.AddUniverse(self.PaulCoarseFilterFunction)
self._asset_per_day = {
datetime.date(2019, 11, 4): ['AAPL', 'GE'],
datetime.date(2019, 11, 5): ['AMZN', ],
}
self._spy = self.AddEquity('SPY', Resolution.Minute)
self.Schedule.On(
self.DateRules.EveryDay(self._spy.Symbol),
self.TimeRules.AfterMarketOpen(self._spy.Symbol, 1),
Action(self._before_market_open_),
)
self.Schedule.On(
self.DateRules.EveryDay(self._spy.Symbol),
self.TimeRules.BeforeMarketClose(self._spy.Symbol, 1),
Action(self._before_market_close),
)
self._daily_assets = []
def PaulCoarseFilterFunction(self, coarse):
try:
today_asset_list = self._asset_per_day[self.Time.date()]
except:
today_asset_list = []
filtered = [
item.Symbol
for item in coarse
if item.Symbol.Value.upper().strip() in today_asset_list
]
self._daily_assets = filtered.copy()
return filtered
def OnData(self, data):
pass
# if not self.Portfolio.Invested:
# self.SetHoldings("SPY", 1)
def _before_market_open_(self):
pct_invest = 1 / len(self._daily_assets)
for asset in self._daily_assets:
self.SetHoldings(asset, pct_invest)
def _before_market_close(self):
for asset in self.ActiveSecurities:
current_symbol = asset.Value.Symbol
current_quantity = self.Portfolio[asset.Value.Symbol].Quantity
if current_quantity:
self.MarketOrder(current_symbol, -1 * current_quantity)