Supported Indicators

Value At Risk

Introduction

This indicator computes 1-day VaR for a specified confidence level and lookback period

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

Using ValueAtRisk Indicator

To create an automatic indicators for ValueAtRisk, call the ValueAtRisk helper method from the QCAlgorithm class. The ValueAtRisk method creates a ValueAtRisk 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 ValueAtRiskAlgorithm : QCAlgorithm
{
    private Symbol _symbol;
    private ValueAtRisk _valueatrisk;

    public override void Initialize()
    {
        _symbol = AddEquity("SPY", Resolution.Daily).Symbol;
        _valueatrisk = ValueAtRisk(_symbol);
    }

    public override void OnData(Slice data)
    {
        if (_valueatrisk.IsReady)
        {
            // The current value of _valueatrisk is represented by itself (_valueatrisk)
            // or _valueatrisk.Current.Value
            Plot("ValueAtRisk", "valueatrisk", _valueatrisk);
            
        }
    }
}
class ValueAtRiskAlgorithm(QCAlgorithm):
    def Initialize(self) -> None:
        self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.valueatrisk = self.ValueAtRisk(self.symbol)

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

The following reference table describes the ValueAtRisk method:

Warning: include(/tmp/docs/67111aa65481e814e4af4641e58d9df93e2d4f2f/Resources/qcalgorithm-api/valueatrisk.html): Failed to open stream: No such file or directory in /tmp/docs/67111aa65481e814e4af4641e58d9df93e2d4f2f/Resources/indicators/using-indicator.php on line 73 Warning: include(): Failed opening '/tmp/docs/67111aa65481e814e4af4641e58d9df93e2d4f2f/Resources/qcalgorithm-api/valueatrisk.html' for inclusion (include_path='/var/www/beta/core/libraries/Google:/var/www/beta:.:/usr/share/php') in /tmp/docs/67111aa65481e814e4af4641e58d9df93e2d4f2f/Resources/indicators/using-indicator.php on line 73

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 ValueAtRisk 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 time/number pair or an IndicatorDataPoint. The indicator will only be ready after you prime it with enough data.

public class ValueAtRiskAlgorithm : QCAlgorithm
{
    private Symbol _symbol;
    private ValueAtRisk _valueatrisk;

    public override void Initialize()
    {
        _symbol = AddEquity("SPY", Resolution.Daily).Symbol;
        _valueatrisk = new ValueAtRisk();
    }

    public override void OnData(Slice data)
    {
        if (data.Bars.TryGetValue(_symbol, out var bar))
        {      
            _valueatrisk.Update(bar.EndTime, bar.Close);
        }
   
        if (_valueatrisk.IsReady)
        {
            // The current value of _valueatrisk is represented by itself (_valueatrisk)
            // or _valueatrisk.Current.Value
            Plot("ValueAtRisk", "valueatrisk", _valueatrisk);
            
        }
    }
}
class ValueAtRiskAlgorithm(QCAlgorithm):
    def Initialize(self) -> None:
        self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.valueatrisk = ValueAtRisk()

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

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

public class ValueAtRiskAlgorithm : QCAlgorithm
{
    private Symbol _symbol;
    private ValueAtRisk _valueatrisk;

    public override void Initialize()
    {
        _symbol = AddEquity("SPY", Resolution.Daily).Symbol;
        _valueatrisk = new ValueAtRisk();
        RegisterIndicator(_symbol, _valueatrisk, Resolution.Daily);
    }

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

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

The following reference table describes the ValueAtRisk constructor:

ValueAtRisk()1/2

            ValueAtRisk QuantConnect.Indicators.ValueAtRisk (
    string  name,
    int     period,
    double  confidenceLevel
   )
        

Creates a new ValueAtRisk indicator with a specified period and confidence level.

ValueAtRisk()2/2

            ValueAtRisk QuantConnect.Indicators.ValueAtRisk (
    int     period,
    double  confidenceLevel
   )
        

Creates a new ValueAtRisk indicator with a specified period and confidence level.

Visualization

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

ValueAtRisk 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: