| Overall Statistics |
|
Total Trades 3 Average Win 3.97% Average Loss 0% Compounding Annual Return 29.680% Drawdown 2.700% Expectancy 0 Net Profit 4.365% Sharpe Ratio 2.321 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha -0.023 Beta 0.729 Annual Standard Deviation 0.093 Annual Variance 0.009 Information Ratio -1.966 Tracking Error 0.057 Treynor Ratio 0.295 Total Fees $11.27 |
from System.Collections.Generic import List
from QuantConnect.Data.UniverseSelection import *
import numpy as np
class BasicTemplateAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetCash(100000)
self.SetStartDate(2013,1,1)
self.SetEndDate(2013,3,1)
self.coarse_number = 2
self.reb = 1
self.first_month = 0
self.spy = self.AddEquity("SPY", Resolution.Daily).Symbol
self.UniverseSettings.Resolution = Resolution.Daily
self.AddUniverse(self.CoarseSelectionFunction)
self.Schedule.On(self.DateRules.MonthStart(self.spy),
self.TimeRules.AfterMarketOpen(self.spy,5), Action(self.rebalance))
def CoarseSelectionFunction(self, coarse):
if self.reb != 1:
return (List[Symbol]())
self.reb = 0
sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
top = sortedByDollarVolume[:self.coarse_number]
self.symbols = [x.Symbol for x in top]
list = List[Symbol]()
for x in top:
list.Add(x.Symbol)
return list
def OnData(self, slice):
pass
def rebalance(self):
if self.first_month == 0:
self.first_month += 1
return
history = self.History(252,Resolution.Daily)
for i in self.symbols:
bar = map(lambda x: x[i], history)
i.prices = [float(x.Close) for x in bar]
i.mom_20 = i.prices[-1]/i.prices[-20]
self.symbols = [x for x in self.symbols if hasattr(x,'mom_20')]
factor1 = sorted(self.symbols, key = lambda x: x.mom_20, reverse = True)
self.long = factor1[0]
self.Liquidate()
self.SetHoldings(self.long,1)
self.reb = 1