Files
Quant_Code/999.账户相关/test/akshare_find_option.ipynb

229 lines
6.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import akshare as ak\n",
"import pandas as pd\n",
"import numpy as np\n",
"import os\n",
"import time"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"# option_df = ak.option_finance_board(symbol=\"中证1000股指期权\", end_month=\"2503\")\n",
"# option_df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# option_cffex_df = ak.option_cffex_zz1000_spot_sina(symbol='ag2504')\n",
"option_commodity_contract_table_sina_df = ak.option_commodity_contract_table_sina(symbol=\"白银期权\", contract=\"ag2504\")\n",
"option_commodity_contract_table_sina_df"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"#根据中证l000指数获取点位\n",
"\n",
"def get_format_option_gap(value:float, deviation:int=0):\n",
" \"\"\"\n",
" 根据标准的行权价,生成不同档位的期权列表,适合中金所\n",
" :param value:当前行权价\n",
" :param deviation:相较于行权价向哪个方向偏移,>0表示较行权价向上调整<-表示较行权价向下调整\n",
" return:\n",
" \"\"\"\n",
" def _gap_value(_mark_value):\n",
" if _mark_value < 500:\n",
" return 25\n",
" elif _mark_value < 5000:\n",
" return 50\n",
" elif _mark_value < 10000:\n",
" return 100\n",
" elif _mark_value >10000:\n",
" return 200\n",
" \n",
" for i in range(abs(deviation)):\n",
" _gap =_gap_value(value)\n",
" #option a ex price=int(value/gap)*gap#买入看跌期权\n",
" if deviation >=0:\n",
" value +=_gap\n",
" elif deviation<0:\n",
" value -=_gap\n",
" return value\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"def future_to_option_code(symbol):\n",
" \"\"\"\n",
" 转换期权代码格式\n",
" \n",
" Args:\n",
" symbol (str): 原始期权代码\n",
" \n",
" Returns:\n",
" str: 转换后的期权代码\n",
" \"\"\"\n",
" symbol_upper = symbol.upper()\n",
" \n",
" if 'IM' in symbol_upper:\n",
" # 将IM替换为MO\n",
" return symbol_upper.replace('IM', 'mo')\n",
" elif 'IF' in symbol_upper:\n",
" # 将IF替换为IO\n",
" return symbol_upper.replace('IF', 'io')\n",
" elif 'IH' in symbol_upper:\n",
" # 将IH替换为HO\n",
" return symbol_upper.replace('IH', 'ho')\n",
" else:\n",
" raise ValueError(f\"不支持的期权代码格式: {symbol}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"future_to_option_code('im2503')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"\n",
"def get_atm_option_code(symbol:str, current_price:float, call_level:int, put_level:int):\n",
" symbol_upper = symbol.upper()\n",
"\n",
" # if 'IM' in symbol_upper:\n",
" # # 将IM替换为MO\n",
" # return symbol_upper.replace('IM', 'mo')\n",
" # # print(symbol_upper)\n",
" # elif 'IF' in symbol_upper:\n",
" # # 将IF替换为IO\n",
" # return symbol_upper.replace('IF', 'io')\n",
" # elif 'IH' in symbol_upper:\n",
" # # 将IH替换为HO\n",
" # return symbol_upper.replace('IH', 'ho')\n",
" # else:\n",
" # raise ValueError(f\"不支持的期权代码格式: {symbol}\")\n",
"\n",
" # # symbol_upper = symbol_upper.lower()\n",
" # print(symbol_upper)\n",
" if 'MO' in symbol_upper:\n",
" option_cffex_df = ak.option_cffex_zz1000_spot_sina(symbol=symbol)\n",
" elif 'IO' in symbol_upper:\n",
" option_cffex_df = ak.option_cffex_hs300_spot_sina(symbol=symbol)\n",
" elif 'HO' in symbol_upper:\n",
" option_cffex_df = ak.option_cffex_sz50_spot_sina(symbol=symbol)\n",
" else:\n",
" raise ValueError(f\"不支持的期权代码格式: {symbol_upper}\")\n",
" # 提取所有行权价并转换为数值\n",
" strike_prices = option_cffex_df['行权价'].astype(float).unique()\n",
" find_call_prices = get_format_option_gap(current_price,call_level)\n",
" find_put_prices = get_format_option_gap(current_price,-put_level)\n",
" closest_call_strike = min(strike_prices, key=lambda x: abs(x - find_call_prices))\n",
" closest_put_strike = min(strike_prices, key=lambda x: abs(x - find_put_prices))\n",
" # 生成平值期权代码如MO2503-C-6250\n",
" call_atm_option_code = f\"{symbol_upper}-C-{int(closest_call_strike)}\"\n",
" put_atm_option_code = f\"{symbol_upper}-P-{int(closest_put_strike)}\"\n",
" # print(f\"平值看涨期权:{call_atm_option_code}\")\n",
" # print(f\"平值看跌期权:{put_atm_option_code}\")\n",
" return call_atm_option_code, put_atm_option_code\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"get_atm_option_code(future_to_option_code('im2503'),6273,0,0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"get_atm_option_code(future_to_option_code('ih2503'),2628,0,0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"get_atm_option_code(future_to_option_code('if2503'),3386,0,0)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"option_cffex_df = ak.option_cffex_zz1000_spot_sina(symbol='mo2503')"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"# stock_individual_spot_xq_df = ak.stock_individual_spot_xq(symbol='000852')\n",
"# print(stock_individual_spot_xq_df.dtypes)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}