20250314修改:增加dingdanliu_nb_mflow
This commit is contained in:
228
999.账户相关/test/akshare_find_option.ipynb
Normal file
228
999.账户相关/test/akshare_find_option.ipynb
Normal file
@@ -0,0 +1,228 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
Reference in New Issue
Block a user