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
10.584
Tracking Error
0.011
Treynor Ratio
0
Total Fees
$0.00
import numpy as np   
import pandas as pd
import math

class DataConsolidationAlgorithm(QCAlgorithm):
    def Initialize(self):
        self.UniverseSettings.Resolution = Resolution.Daily
        self.SetCash(100000)
        self.SetStartDate(2015, 6, 1)
        self.SetEndDate(2015, 6, 2)
        self.AddUniverse(self.MyCoarseFilterFunction)
        #self.AddEquity("AAPL", Resolution.Minute).SetFeeModel(CustomFeeModel())


    def OnData(self, data):
        self.df1 = pd.DataFrame(columns=['Symbol', 'Previous', 'Current', 'Return'])
        
        for elem in self.symbols:
            self.df = self.History(self.Symbol(elem), timedelta(2))
            try:
                pr = self.df.iloc[1]['close']
                cu = self.df.iloc[0]['close']
                ret = cu/pr-1
            except:
                pr = 0
                cu = 0
                ret = 0
                
            self.df1 = self.df1.append({'Symbol': elem, 'Previous': pr, 'Current': cu, 'Return': ret}, ignore_index=True)
       
        self.df1['Return'] = pd.to_numeric(self.df1['Return'])
        self.df1 = self.df1.nsmallest(20, 'Return')
        #self.Debug(self.df1.to_string())
        #self.Debug(str(self.Time))

        self.Liquidate()
        
        for i in range(0,19):
            if self.df1.iloc[i]['Current'] != 0:
                alloc = math.floor((self.Portfolio.TotalPortfolioValue / 20) / self.df1.iloc[i]['Current'])
                #self.MarketOnCloseOrder(self.df1.iloc[i]['Symbol'], alloc)
                self.MarketOrder(self.df1.iloc[i]['Symbol'], alloc)
            
        pass
    
    def MyCoarseFilterFunction(self, coarse):
             sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
             filtered = [ x.Symbol for x in sortedByDollarVolume 
                          if x.Price > 10 and x.DollarVolume > 10000000 ]
             self.symbols = filtered[:500]
             return filtered[:500]

#Create DeGiro Fee Model
class CustomFeeModel(FeeModel):
    def GetOrderFee(self, parameters):
        # custom fee math
        fee = parameters.Security.Price * parameters.Order.AbsoluteQuantity * 0.0004
        return OrderFee(CashAmount(fee, "USD"))
        

     
# self.Liquidate()