| 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 -2.479 Tracking Error 0.095 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset Portfolio Turnover 0% |
from AlgorithmImports import *
class MSFTOptionPricing(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2024, 1, 1)
self.SetEndDate(2024, 1, 19)
self.SetCash(100000)
self.ticker = "MSFT"
self.target_timestamp = "2024-01-18 15:00:00"
# Define target strike prices and expiry date
self.call_strike = 360
self.put_strike = 320
self.expiry_date = datetime(2024, 3, 15)
# Add underlying asset
self.underlying = self.AddEquity(self.ticker, Resolution.Hour).Symbol
# Add options
option = self.AddOption(self.ticker, Resolution.Hour)
option.SetFilter(-50, 50, 0, 90) # Strike range and expiration within 90 days
self.option_symbol = option.Symbol
option.PriceModel = OptionPriceModels.CrankNicolsonFD()
def OnData(self, slice: Slice):
# Ensure we run this at the specified timestamp
if self.Time.strftime("%Y-%m-%d %H:%M:%S") != self.target_timestamp:
return
self.Debug(f"Fetching option chain data at {self.Time}")
chain = slice.OptionChains.get(self.option_symbol)
if not chain:
return
# Find the target call and put options
target_call = next((contract for contract in chain
if contract.Right == OptionRight.Call and
contract.Strike == self.call_strike and
contract.Expiry == self.expiry_date), None)
target_put = next((contract for contract in chain
if contract.Right == OptionRight.Put and
contract.Strike == self.put_strike and
contract.Expiry == self.expiry_date), None)
# Print results
if target_call:
call_price = self.Securities[target_call.Symbol].Price
self.Debug(f"CALL | Time: {self.Time}, Strike: {self.call_strike}, Price: {call_price}, IV: {target_call.ImpliedVolatility}")
if target_put:
put_price = self.Securities[target_put.Symbol].Price
self.Debug(f"PUT | Time: {self.Time}, Strike: {self.put_strike}, Price: {put_price}, IV: {target_put.ImpliedVolatility}")