Files
MoFin/venv/lib/python3.12/site-packages/akshare/index/index_option_qvix.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
  Privoxy对node122:18003返回500,直连正常
2026-06-30 02:56:35 +08:00

442 lines
14 KiB
Python

# -*- coding:utf-8 -*-
# !/usr/bin/env python
"""
Date: 2026/3/22 21:00
Desc: 50 ETF 期权波动率指数 QVIX
300 ETF 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?50ETF
http://1.optbbs.com/s/vix.shtml?300ETF
"""
import pandas as pd
from functools import lru_cache
@lru_cache
def __get_optbbs_daily() -> pd.DataFrame:
"""
读取原始数据
http://1.optbbs.com/d/csv/d/k.csv
:return: 原始数据
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/k.csv"
temp_df = pd.read_csv(url, encoding="gbk")
return temp_df
def index_option_50etf_qvix() -> pd.DataFrame:
"""
50ETF 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?50ETF
:return: 50ETF 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, :5]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_50etf_min_qvix() -> pd.DataFrame:
"""
50 ETF 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?50ETF
:return: 50 ETF 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vix50.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df.loc[:, "qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_300etf_qvix() -> pd.DataFrame:
"""
300 ETF 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?300ETF
:return: 300 ETF 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 9, 10, 11, 12]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_300etf_min_qvix() -> pd.DataFrame:
"""
300 ETF 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?300ETF
:return: 300 ETF 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vix300.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df.loc[:, "qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_500etf_qvix() -> pd.DataFrame:
"""
500 ETF 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?500ETF
:return: 500 ETF 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 67, 68, 69, 70]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_500etf_min_qvix() -> pd.DataFrame:
"""
500 ETF 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?500ETF
:return: 500 ETF 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vix500.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df.loc[:, "qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_cyb_qvix() -> pd.DataFrame:
"""
创业板 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?CYB
:return: 创业板 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 71, 72, 73, 74]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_cyb_min_qvix() -> pd.DataFrame:
"""
创业板 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?CYB
:return: 创业板 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vixcyb.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df.loc[:, "qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_kcb_qvix() -> pd.DataFrame:
"""
科创板 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?KCB
:return: 科创板 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 83, 84, 85, 86]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_kcb_min_qvix() -> pd.DataFrame:
"""
科创板 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?KCB
:return: 科创板 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vixkcb.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df.loc[:, "qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_100etf_qvix() -> pd.DataFrame:
"""
深证100ETF 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?100ETF
:return: 深证100ETF 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 75, 76, 77, 78]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_100etf_min_qvix() -> pd.DataFrame:
"""
深证100ETF 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?100ETF
:return: 深证100ETF 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vix100.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df.loc[:, "qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_300index_qvix() -> pd.DataFrame:
"""
中证300股指 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?Index
:return: 中证300股指 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 17, 18, 19, 20]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_300index_min_qvix() -> pd.DataFrame:
"""
中证300股指 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?Index
:return: 中证300股指 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vixindex.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df["qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_1000index_qvix() -> pd.DataFrame:
"""
中证1000股指 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?Index1000
:return: 中证1000股指 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 25, 26, 27, 28]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_1000index_min_qvix() -> pd.DataFrame:
"""
中证1000股指 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?Index1000
:return: 中证1000股指 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vixindex1000.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df["qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
def index_option_50index_qvix() -> pd.DataFrame:
"""
上证50股指 期权波动率指数 QVIX
http://1.optbbs.com/s/vix.shtml?50index
:return: 上证50股指 期权波动率指数 QVIX
:rtype: pandas.DataFrame
"""
temp_df = __get_optbbs_daily().iloc[:, [0, 79, 80, 81, 82]]
temp_df.columns = [
"date",
"open",
"high",
"low",
"close",
]
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
return temp_df
def index_option_50index_min_qvix() -> pd.DataFrame:
"""
上证50股指 期权波动率指数 QVIX-分时
http://1.optbbs.com/s/vix.shtml?50index
:return: 上证50股指 期权波动率指数 QVIX-分时
:rtype: pandas.DataFrame
"""
url = "http://1.optbbs.com/d/csv/d/vix50index.csv"
temp_df = pd.read_csv(url).iloc[:, :2]
temp_df.columns = [
"time",
"qvix",
]
temp_df["qvix"] = pd.to_numeric(temp_df["qvix"], errors="coerce")
return temp_df
if __name__ == "__main__":
index_option_50etf_qvix_df = index_option_50etf_qvix()
print(index_option_50etf_qvix_df)
index_option_50etf_min_qvix_df = index_option_50etf_min_qvix()
print(index_option_50etf_min_qvix_df)
index_option_300etf_qvix_df = index_option_300etf_qvix()
print(index_option_300etf_qvix_df)
index_option_300etf_min_qvix_df = index_option_300etf_min_qvix()
print(index_option_300etf_min_qvix_df)
index_option_500etf_qvix_df = index_option_500etf_qvix()
print(index_option_500etf_qvix_df)
index_option_500etf_min_qvix_df = index_option_500etf_min_qvix()
print(index_option_500etf_min_qvix_df)
index_option_cyb_qvix_df = index_option_cyb_qvix()
print(index_option_cyb_qvix_df)
index_option_cyb_min_qvix_df = index_option_cyb_min_qvix()
print(index_option_cyb_min_qvix_df)
index_option_kcb_qvix_df = index_option_kcb_qvix()
print(index_option_kcb_qvix_df)
index_option_kcb_min_qvix_df = index_option_kcb_min_qvix()
print(index_option_kcb_min_qvix_df)
index_option_100etf_qvix_df = index_option_100etf_qvix()
print(index_option_100etf_qvix_df)
index_option_100etf_min_qvix_df = index_option_100etf_min_qvix()
print(index_option_100etf_min_qvix_df)
index_option_300index_qvix_df = index_option_300index_qvix()
print(index_option_300index_qvix_df)
index_option_300index_min_qvix_df = index_option_300index_min_qvix()
print(index_option_300index_min_qvix_df)
index_option_1000index_qvix_df = index_option_1000index_qvix()
print(index_option_1000index_qvix_df)
index_option_1000index_min_qvix_df = index_option_1000index_min_qvix()
print(index_option_1000index_min_qvix_df)
index_option_50index_qvix_df = index_option_50index_qvix()
print(index_option_50index_qvix_df)
index_option_50index_min_qvix_df = index_option_50index_min_qvix()
print(index_option_50index_min_qvix_df)