book
Checkout our new book! Hands on AI Trading with Python, QuantConnect, and AWS Learn More arrow

Risk Free Interest Rate

Key Concepts

Introduction

The risk free interest rate is the hurdle rate for investments. If investors can get a rate of return with virtually no risk, an investment needs to offer the potential for a greater return to attract capital from rational investors. The risk free interest rate also impacts some performance statistics, like Sharpe and Sortino ratios. Risk free interest rate models provide the interest rate data to your algorithms to enable these calculations.

Set Models

To set the risk free interest rate model, in the Initialize method, call the set_risk_free_interest_rate_model method.

Select Language:
def initialize(self) -> None:
    # Set the interest rate model for accurate option IV/greeks and result metrics like Sharpe Ratio
    # You should set it according to the main currency of your trading Securities
    self.set_risk_free_interest_rate_model(ConstantRiskFreeRateInterestRateModel(0.02))

To view all the pre-built risk free interest rate models, see Supported Models.

Default Behavior

The default risk free interest rate model is the InterestRateProvider, which provides the primary credit rate from the Federal Open Market Committee (FOMC).

Model Structure

Risk free interest rate models must extend the IRiskFreeInterestRateModel interface. Extensions of the IRiskFreeInterestRateModel interface must implement a get_interest_rate method. The get_interest_rate method returns the risk free interest rate for a given date.

Select Language:
class CustomRiskFreeInterestRateModelExampleAlgorithm(QCAlgorithm):
    def initialize(self) -> None:
        # Set the interest rate model for accurate option IV/greeks and result metrics like Sharpe Ratio
        # You should set it according to the main currency of your trading Securities
        self.set_risk_free_interest_rate_model(MyRiskFreeInterestRateModel())
    
# Define the custom risk free interest rate model
class MyRiskFreeInterestRateModel:
    def get_interest_rate(self, date: datetime) -> float:
        return 0.02

For a full example algorithm, see this backtest.

Disable Interest Rates

To disable the risk free interest rate, set the model to the ConstantRiskFreeRateInterestRateModel and set the risk free rate to zero.

Select Language:
self.set_risk_free_interest_rate_model(ConstantRiskFreeRateInterestRateModel(0))

Get Interest Rate

To get the risk free interest rate for a specific time, call the get_interest_rate method with the time.

Select Language:
def on_data(self, slice: Slice) -> None:
	risk_free_interest_rate = self.risk_free_interest_rate_model.get_interest_rate(slice.time)

To get the average risk free interest rate for a window of time, call the RiskFreeInterestRateModelExtensions.get_risk_free_rate method with the model, the start date, and end date.

Select Language:
def on_data(self, slice: Slice) -> None:
	avg_risk_free_interest_rate = RiskFreeInterestRateModelExtensions.get_risk_free_rate(
		self.risk_free_interest_rate_model, 
		self.time-timedelta(7), self.time
	)

To get the average risk free interest rate for a set of dates, call the RiskFreeInterestRateModelExtensions.get_average_risk_free_rate method with the model and list of dates.

Select Language:
def on_data(self, slice: Slice) -> None:
	avg_risk_free_interest_rate = RiskFreeInterestRateModelExtensions.get_average_risk_free_rate(
		self.risk_free_interest_rate_model, 
		[self.time, self.time-timedelta(180), self.time-timedelta(365)]
	)

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: