| Overall Statistics |
|
Total Orders 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 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 -4.873 Tracking Error 0.116 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset Portfolio Turnover 0% |
# region imports
from AlgorithmImports import *
# endregion
class CustomDividendYieldModelAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2024, 2, 5)
self.SetEndDate(2024, 2, 22)
self.SetCash(100000)
option = self.AddOption("MSFT")
option.SetFilter(0, 1, 0, 31)
self.symbol = option.Symbol
self.deltas = {}
self.dividendYieldModel = {self.symbol.Underlying : MyDividendYieldModel()}
def OnData(self, data: Slice):
chain = data.OptionChains.get(self.symbol)
if not chain:
return
expiry = min([x.Expiry for x in chain])
symbols = [x.Symbol for x in chain if x.Expiry == expiry and x.Right == OptionRight.Call and x.Symbol not in self.deltas]
for symbol in symbols:
self.deltas[symbol] = self.deltas.get(symbol, self.CreateDeltaIndicator(symbol))
def CreateDeltaIndicator(self, symbol: Symbol) -> Delta:
dividendYieldModel = self.dividendYieldModel.get(symbol.Underlying)
delta = Delta(symbol.Value, symbol, self.RiskFreeInterestRateModel, dividendYieldModel)
self.RegisterIndicator(symbol, delta)
self.RegisterIndicator(symbol.Underlying, delta)
return delta
def OnEndOfDay(self, symbol):
delta = self.deltas.get(symbol)
if delta:
self.Plot('Delta', symbol.Value, delta.Current.Value)
class MyDividendYieldModel:
def GetDividendYield(self, date: datetime) -> float:
return 0.02