I think users would like to know their chance of getting exercised at all points within each epoch.
This project is part of a larger goal of a portfolio page.
It will help users get a better understanding of how their portfolio is performing.
What we need:
-
Systematically scrape spot prices + calculate historical realized volatility
-
Scrape options data from CEX options exchange (deribit directly or via gvol for BTC/ETH, delta.exchange for SOL)
-
Map altcoin vol from BTC/ETH/VOL (will work with you on this)
-
Create a function given current time, expiry, current spot, and strike, return an estimate for % ending in expiry. (can use naive black scholes, will work with you on this)
-
Use this estimate to show users their “danger level” at all times on the personal portfolio page. (optional)
This is a Data collection/automation task that will be helpful for the protocol’s users.
The most important part is creating a production-level reliable process that will serve the front-end
Proposed Grant size:
5 Lightning OGs
1 Like
As discussed on Discord, here are some helpful materials:
- Realized Volatility Scraping code:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import requests
import json
import ccxt
import datetime
cftx = ccxt.ftx(
{
"apiKey":"mvnd3WRG56rAP-6MpxFyZ5sN2WnjEO8UsQB6u-6s",
"secret":"m_m926E36IMlrhCv6bGkLdSdaVegbm5PggpCrFCM"
}
)
markets = cftx.load_markets()
binance = ccxt.binance()
# 10 days
time_since = datetime.datetime.timestamp(datetime.datetime.now())*1000-10*24*60*60*1000
symbols = [
"BTC/USD",
"ETH/USD",
"SOL/USD",
"MSOL/USD",
"LUNA/USD:USD",
"FTT/USD",
"SRM/USD",
"MNGO/USD",
"RAY/USD",
"STEP/USD",
"AVAX/USD"
]
data_dict = {}
for symbol in symbols:
data = cftx.fetchOHLCV(symbol, '1d', since=time_since, limit=10)
df = pd.DataFrame(data, columns=["time", "open", "high", "low", "close", "volume"])
data_dict[symbol] = df
df["vol"] = np.log(df.high/df.low)**2
sample = pd.DataFrame(data, columns=["time", "open", "high", "low", "close", "volume"])
print("{} 10-day Realized Vol: {}".format(symbol, np.sqrt(df.vol.sum()*1/(4*10*np.log(2)))*np.sqrt(365)*100))
print("{}: {:.6f}".format(symbol, sample.close.mean()))
print("="*40)
- Volatility Data:
Switchboard or Deribit
Switchboard
GitHub - switchboard-xyz/switchboardv2-py-api
https://docs.deribit.com/
I’ve gotten most of this one done here: GitHub - Sharpieman20/task-bounties
Still working on getting it integrated into the frontend, but hopefully we can get it closed out soon!