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
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
-2.63
Tracking Error
0.056
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
#region imports
from AlgorithmImports import *
#endregion
# https://quantpedia.com/Screener/Details/7
# The investment universe consists of global large cap stocks (or US large cap stocks). 
# At the end of the each month, the investor constructs equally weighted decile portfolios 
# by ranking the stocks on the past one year volatility of daily price. The investor 
# goes long stocks with the lowest volatility.
from QuantConnect.Data.UniverseSelection import *
import math
import numpy as np
import pandas as pd




class ShortTermReversalAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2017,1,1) 
        self.SetEndDate(2017,12,31)         
        self.SetCash(100000)                    


        self.UniverseSettings.Resolution = Resolution.Daily
        self.universe_etf = self.Universe.ETF('SPY', Market.USA, self.UniverseSettings, self.ETFConstituentsFilter)
        self.universe_fine = self.AddUniverse(self.universe_etf, self.FineSelection)

        self.symbolDataDict = {}
        
        self.daycount=0
        self.Nbalance=50 
        

    
    def ETFConstituentsFilter(self, constituents: List[ETFConstituentData]) -> List[Symbol]:
        
        #self.Log(f"Universe, {self.daycount},{self.Time}")
        if self.daycount % self.Nbalance != 0:
            return Universe.Unchanged   
        else:
            self.Log(f"***** Universe Undate, {self.daycount}, {self.Time} *****") 
            U=[c.Symbol for c in constituents]
            #self.Log(U[100].Value)
            return U
    
    def FineSelection(self, fine: List[FineFundamental]) -> List[Symbol]:    
        self.Log(f"FineSelection, {self.daycount}, {self.Time}")
        self.universe_fine  = [f.Symbol for f in fine]
        return self.universe_fine
        
          
    def OnSecuritiesChanged(self, changes):
        pass           
    
    def OnData(self, data): 
        self.daycount = self.daycount + 1
        
        if (self.daycount-1) % self.Nbalance != 0:
            return 
        else:    
            self.Log(f"@@@@@ OnData Rebalance, {self.daycount-1}, {self.Time} @@@@@")