Supported Indicators

Alpha

Introduction

In financial analysis, the Alpha indicator is used to measure the performance of an investment (such as a stock or ETF) relative to a benchmark index, often representing the broader market. Alpha indicates the excess return of the investment compared to the return of the benchmark index. The S P 500 index is frequently used as a benchmark in Alpha calculations to represent the overall market performance. Alpha is an essential tool for investors to understand the idiosyncratic returns of their investment that aren't caused by movement in the underlying benchmark.

To view the implementation of this indicator, see the LEAN GitHub repository.

Using A Indicator

To create an automatic indicators for Alpha, call the A helper method from the QCAlgorithm class. The A method creates a Alpha object, hooks it up for automatic updates, and returns it so you can used it in your algorithm. In most cases, you should call the helper method in the Initialize method.

public class AlphaAlgorithm : QCAlgorithm
{
    private Symbol _symbol;
    private Symbol _reference;
    private Alpha _a;

    public override void Initialize()
    {
        _symbol = AddEquity("SPY", Resolution.Daily).Symbol;
        _reference = AddEquity("QQQ", Resolution.Daily).Symbol;
        _a = A(_symbol, reference, 20);
    }

    public override void OnData(Slice data)
    {
        if (_a.IsReady)
        {
            // The current value of _a is represented by itself (_a)
            // or _a.Current.Value
            Plot("Alpha", "a", _a);
            
        }
    }
}
class AlphaAlgorithm(QCAlgorithm):
    def Initialize(self) -> None:
        self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.reference = self.AddEquity("QQQ", Resolution.Daily).Symbol
        self.a = self.A(self.symbol, reference, 20)

    def OnData(self, slice: Slice) -> None:
        if self.a.IsReady:
            # The current value of self.a is represented by self.a.Current.Value
            self.Plot("Alpha", "a", self.a.Current.Value)
            

The following reference table describes the A method:

A()1/1

            Alpha QuantConnect.Algorithm.QCAlgorithm.A (
    Symbol                                target,
    Symbol                                reference,
    *Int32                                alphaPeriod,
    *Int32                                betaPeriod,
    *Nullable<Resolution>           resolution,
    *Nullable<Decimal>              riskFreeRate,
    *Func<IBaseData, IBaseDataBar>  selector
   )
        

Creates a Alpha indicator for the given target symbol in relation with the reference used. The indicator will be automatically updated on the given resolution.

If you don't provide a resolution, it defaults to the security resolution. If you provide a resolution, it must be greater than or equal to the resolution of the security. For instance, if you subscribe to hourly data for a security, you should update its indicator with data that spans 1 hour or longer.

For more information about the selector argument, see Alternative Price Fields.

For more information about plotting indicators, see Plotting Indicators.

You can manually create a Alpha indicator, so it doesn't automatically update. Manual indicators let you update their values with any data you choose.

Updating your indicator manually enables you to control when the indicator is updated and what data you use to update it. To manually update the indicator, call the Update method with a TradeBar or QuoteBar. The indicator will only be ready after you prime it with enough data.

public class AlphaAlgorithm : QCAlgorithm
{
    private Symbol _symbol;
    private Symbol _reference;
    private Alpha _a;

    public override void Initialize()
    {
        _symbol = AddEquity("SPY", Resolution.Daily).Symbol;
        _reference = AddEquity("QQQ", Resolution.Daily).Symbol;
        _a = new Alpha("", _symbol, reference, 20);
    }

    public override void OnData(Slice data)
    {
        if (data.Bars.TryGetValue(_symbol, out var bar))
        {      
            _a.Update(bar);
        }
        if (data.Bars.TryGetValue(_reference, out bar))
        {      
            _a.Update(bar);
        }    
    
        if (_a.IsReady)
        {
            // The current value of _a is represented by itself (_a)
            // or _a.Current.Value
            Plot("Alpha", "a", _a);
            
        }
    }
}
class AlphaAlgorithm(QCAlgorithm):
    def Initialize(self) -> None:
        self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.reference = self.AddEquity("QQQ", Resolution.Daily).Symbol
        self.a = Alpha("", self.symbol, reference, 20)

    def OnData(self, slice: Slice) -> None:
        bar = slice.Bars.get(self.symbol)
        if bar:
            self.a.Update(bar)
        bar = slice.Bars.get(self.referece)
        if bar:
            self.a.Update(bar)
                
        if self.a.IsReady:
            # The current value of self.a is represented by self.a.Current.Value
            self.Plot("Alpha", "a", self.a.Current.Value)
            

To register a manual indicator for automatic updates with the security data, call the RegisterIndicator method.

public class AlphaAlgorithm : QCAlgorithm
{
    private Symbol _symbol;
    private Symbol _reference;
    private Alpha _a;

    public override void Initialize()
    {
        _symbol = AddEquity("SPY", Resolution.Daily).Symbol;
        _reference = AddEquity("QQQ", Resolution.Daily).Symbol;~
        _a = new Alpha("", _symbol, reference, 20);
        RegisterIndicator(_symbol, _a, Resolution.Daily);
        RegisterIndicator(reference, _a, Resolution.Daily);
    }

    public override void OnData(Slice data)
    {
        if (_a.IsReady)
        {
            // The current value of _a is represented by itself (_a)
            // or _a.Current.Value
            Plot("Alpha", "a", _a);
            
        }
    }
}
class AlphaAlgorithm(QCAlgorithm):
    def Initialize(self) -> None:
        self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.reference = self.AddEquity("QQQ", Resolution.Daily).Symbol
        self.a = Alpha("", self.symbol, reference, 20)
        self.RegisterIndicator(self.symbol, self.a, Resolution.Daily)
        self.RegisterIndicator(reference, self.a, Resolution.Daily)

    def OnData(self, slice: Slice) -> None:
        if self.a.IsReady:
            # The current value of self.a is represented by self.a.Current.Value
            self.Plot("Alpha", "a", self.a.Current.Value)
            

The following reference table describes the Alpha constructor:

Alpha()1/12

            Alpha QuantConnect.Indicators.Alpha (
    string                      name,
    Symbol                      targetSymbol,
    Symbol                      referenceSymbol,
    int                         alphaPeriod,
    int                         betaPeriod,
    IRiskFreeInterestRateModel  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified name, target, reference, and period values.

Alpha()2/12

            Alpha QuantConnect.Indicators.Alpha (
    string     name,
    Symbol     targetSymbol,
    Symbol     referenceSymbol,
    int        alphaPeriod,
    int        betaPeriod,
    *decimal?  riskFreeRate
   )
        

Creates a new Alpha indicator with the specified name, target, reference, and period values.

Alpha()3/12

            Alpha QuantConnect.Indicators.Alpha (
    Symbol     targetSymbol,
    Symbol     referenceSymbol,
    int        alphaPeriod,
    int        betaPeriod,
    *decimal?  riskFreeRate
   )
        

Creates a new Alpha indicator with the specified target, reference, and period values.

Alpha()4/12

            Alpha QuantConnect.Indicators.Alpha (
    Symbol     targetSymbol,
    Symbol     referenceSymbol,
    int        period,
    *decimal?  riskFreeRate
   )
        

Creates a new Alpha indicator with the specified target, reference, and period value.

Alpha()5/12

            Alpha QuantConnect.Indicators.Alpha (
    string     name,
    Symbol     targetSymbol,
    Symbol     referenceSymbol,
    int        period,
    *decimal?  riskFreeRate
   )
        

Creates a new Alpha indicator with the specified name, target, reference, and period value.

Alpha()6/12

            Alpha QuantConnect.Indicators.Alpha (
    Symbol                      targetSymbol,
    Symbol                      referenceSymbol,
    int                         alphaPeriod,
    int                         betaPeriod,
    IRiskFreeInterestRateModel  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified target, reference, and period values.

Alpha()7/12

            Alpha QuantConnect.Indicators.Alpha (
    Symbol                      targetSymbol,
    Symbol                      referenceSymbol,
    int                         period,
    IRiskFreeInterestRateModel  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified target, reference, and period value.

Alpha()8/12

            Alpha QuantConnect.Indicators.Alpha (
    string                      name,
    Symbol                      targetSymbol,
    Symbol                      referenceSymbol,
    int                         period,
    IRiskFreeInterestRateModel  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified name, target, reference, and period value.

Alpha()9/12

            Alpha QuantConnect.Indicators.Alpha (
    string    name,
    Symbol    targetSymbol,
    Symbol    referenceSymbol,
    int       alphaPeriod,
    int       betaPeriod,
    PyObject  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified name, target, reference, and period values.

Alpha()10/12

            Alpha QuantConnect.Indicators.Alpha (
    Symbol    targetSymbol,
    Symbol    referenceSymbol,
    int       alphaPeriod,
    int       betaPeriod,
    PyObject  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified target, reference, and period values.

Alpha()11/12

            Alpha QuantConnect.Indicators.Alpha (
    Symbol    targetSymbol,
    Symbol    referenceSymbol,
    int       period,
    PyObject  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified target, reference, and period value.

Alpha()12/12

            Alpha QuantConnect.Indicators.Alpha (
    string    name,
    Symbol    targetSymbol,
    Symbol    referenceSymbol,
    int       period,
    PyObject  riskFreeRateModel
   )
        

Creates a new Alpha indicator with the specified name, target, reference, and period value.

Visualization

The following image shows plot values of selected properties of Alpha using the plotly library.

Alpha line plot.

You can also see our Videos. You can also get in touch with us via Discord.

Did you find this page helpful?

Contribute to the documentation: