Overall Statistics
Total Orders
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Start Equity
100000
End Equity
100000
Net Profit
0%
Sharpe Ratio
0
Sortino 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.447
Tracking Error
0.149
Treynor Ratio
0
Total Fees
$0.00
Estimated Strategy Capacity
$0
Lowest Capacity Asset
Portfolio Turnover
0%
# region imports
from AlgorithmImports import *
import pandas as pd
# end region

class FeaturesDataframeExample(QCAlgorithm):

    def initialize(self):
        self.set_start_date(2022, 1, 1)
        self.set_cash(100000)
        #self.settings.daily_precise_end_time = True
        self.lookback = 252

        self.spy = self.add_equity("SPY", Resolution.DAILY).symbol
        
        self.spy_window = RollingWindow[TradeBar](self.lookback)
        self.consolidate(self.spy, Resolution.DAILY, lambda bar: self.spy_window.add(bar))
        
        self.spy_rsi = self.rsi(self.spy, 15, resolution=Resolution.DAILY)
        self.spy_rsi.window.size = self.lookback

        self.spy_bb = self.bb(self.spy, 30, 2, resolution=Resolution.DAILY)
        self.spy_bb.window.size = self.lookback

        self.schedule.on(
            self.date_rules.every_day(self.spy), 
            self.time_rules.after_market_open(self.spy,-30), 
            self.gen_features)

        self.set_warm_up(self.lookback, Resolution.DAILY)
 
    def gen_features(self):
        if self.is_warming_up:
            return

        df = pd.concat(
            [
                # OHLC
                self.pandas_converter.get_data_frame[TradeBar](self.spy_window).loc[self.spy],
                # Indicators
                self.pandas_converter.get_indicator_data_frame(
                {
                    'rsi': list(self.spy_rsi.window),
                    'bb': list(self.spy_bb.window),
                })
            ], axis=1).dropna()
        return df