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
-0.382
Tracking Error
0.328
Treynor Ratio
0
Total Fees
$0.00
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
from datetime import datetime
from datetime import timedelta
import pandas as pd
import numpy as np

class TransdimensionalTachyonCompensator(QCAlgorithm):
    month = 0
    def Initialize(self):
        self.SetStartDate(2020, 1, 1)  # Set Start Date
        self.SetEndDate(2020, 10, 27)
        self.SetCash(100000)  # Set Strategy Cash
        self.trading_symbols = []
        self.UniverseSettings.Resolution = Resolution.Minute
        self.AddUniverse(self.CoarseSelectionFunction) 
        self.lookback_period = 60
        self.spy = self.AddEquity("SPY").Symbol
        # self.Train(self.DateRules.MonthStart(), self.TimeRules.AfterMarketOpen(self.spy, 0), self.train)
        self.Schedule.On(self.DateRules.MonthStart(), self.TimeRules.AfterMarketOpen(self.spy, 0), self.train)

    def CoarseSelectionFunction(self, coarse):
        if self.Time.month == self.month:
            return Universe.Unchanged
        self.month = self.Time.month
        sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
        self.trading_symbols = [ x.Symbol for x in sortedByDollarVolume if x.HasFundamentalData ][:5]
        return self.trading_symbols
        
    def train(self):
        if not self.trading_symbols: return
        
        emas_by_symbol = {}
        
        history = self.History(self.trading_symbols , self.lookback_period , Resolution.Daily)
        for symbol in self.trading_symbols:
            if history.empty or 'close' not in history.columns:
                return
            price_changes = history.close.unstack(0).diff().dropna()
            if symbol not in price_changes.columns:
                continue
            emas_by_symbol[symbol] = {'up': ExponentialMovingAverage(14), 'down': ExponentialMovingAverage(14)}
            for time, price_change in price_changes[symbol].iteritems():
                emas_by_symbol[symbol]['up'].Update(time, price_change if price_change > 0 else 0)
                emas_by_symbol[symbol]['down'].Update(time, abs(price_change) if price_change < 0 else 0)
            self.Plot("EMA-UP", str(symbol), emas_by_symbol[symbol]['up'].Current.Value)
            self.Plot("EMA-Down", str(symbol), emas_by_symbol[symbol]['down'].Current.Value)