
Код выдает ошибку " время". Пробовал вводить где (х , '%m/%d/%Y') 01-24-2022 -- не помогло.
Ниже часть рабочего кода от первоисточника ,
и файл CNDR_History.csv с данными , где надо в строке: In [5] cndr = pd.read_csv('static/CNDR_Data.csv')
Tак-же , ссылка на оригинал : https://github.com/pangyuteng/aigonewrong/blob/main/finance/basics/cboe-cndr-replica.ipynb Заранее Спасибо за помощь!
Код:
CBOE CNDR Replica
Below is an attempt to replicate the CBOE's CNDR index
based on the implementation described in their white paper.
http://www.cboe.com/index/dashboard/cndr#cndr-overview
https://www.cboe.com/publish/micropdf/CBOE-SP500-Iron-Condor-CNDR-Methodology-Paper.pdf
https://cdn.cboe.com/api/global/us_indices/governance/CNDR_Methodology.pdf
deviations:
+ option prices are replaced with estimated price using BSM.
+ sigma in BSM is just average of realized and implied vol
+ underlying price is also estimated using open close price.
+ strike at .2 and .05 delta not used instead using 1sd and 2sd based on rolling 21-day price return sd.
+ no liquidation at 10% drawdown (can't find it anymore on the updated paper)
+ added constant to match cndr index. (don't really like this deviation)
import datetime
import numpy as np
import pandas as pd
import yfinance as yf
from py_vollib.ref_python.black_scholes_merton import black_scholes_merton
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import datetime as dt
from pandas.tseries.holiday import USFederalHolidayCalendar
cal = USFederalHolidayCalendar()
start_date = '1980-1-1'
future_date = datetime.datetime.now().date()+datetime.timedelta(days=45)
end_date = future_date.strftime('%Y-%m-%d')
print(start_date,end_date)
1980-1-1 2021-01-22
def get_business_day(date):
while date.isoweekday() != 5 or date in cal.holidays():
date += dt.timedelta(days=1)
return date.date()
last_friday_of_month = [get_business_day(d) for d in pd.date_range(start_date, end_date, freq='BM')]
# download and read CNDR index from CBOE website
cndr = pd.read_csv('static/CNDR_Data.csv')
cndr.index=[datetime.datetime.strptime(x,'%m/%d/%Y').date() for x in cndr.time]
cndr=cndr.drop(columns=['time','volume','open','high','low'])
cndr=cndr.rename(columns={'close':'cndr'})
cndr.cndr = cndr.cndr.ffill()
cndr['cndr_r'] = cndr.cndr.pct_change(1)
cndr.head()
cndr cndr_r
1986-06-20 100.0 NaN
1986-06-23 100.0 0.0
1986-06-24 100.0 0.0
1986-06-25 100.0 0.0
1986-06-26 100.0 0.0
Вложения
Последнее редактирование: