Package: jquants-derivatives
jquants-derivatives個人投資家向けデータ API 配信サービス「J-Quants API」のPython クライアントライブラリのデリバティブ用ラッパーです。jquants-derivatives ではオプションのデータを利用するため、J-Quants APIのスタンダード以上のプランが必要です。J-Quants や API 仕様についての詳細を知りたい方は公式ウェブサイトをご参照ください。
現在、J-Quants API は有償版サービスとして提供されています。インストール方法pipコマンドでインストールします。pipinstalljquants-derivativesJ-Quants API の利用To use J-Quants API, you need to "Applications for J-Quants API" fromJ-Quants API Web siteand to select a plan.J-Quants API を利用するためにはJ-Quants API の Web サイトから「J-Quants API 申し込み」及び利用プランの選択が必要になります。jquants-api-client-python を使用するためには「J-Quants API ログインページで使用するメールアドレスおよびパスワード」または「J-Quants API メニューページから取得したリフレッシュトークン」が必要になります。必要に応じて下記の Web サイトより取得してください。J-Quants API ログインページ認証設定コードを実行する前に認証設定をしておきます。設定方法はjquants-api-clientの設定を参照してください。Google Colabを利用する場合はjquants-api-clientのサンプルノートブックを参考にしてください。使用方法Clientクラスjquants_derivatives.Clientクラスはjquantsapi.Clientクラスを継承しています。jquants-api-client-pythonのClientクラスと同じ方法でpandas.DataFrameを取得します。importjquants_derivativescli=jquants_derivatives.Client()df_20230605=cli.get_option_index_option("2023-06-05")df_20230605.iloc[:3,:6]DateCodeWholeDayOpenWholeDayHighWholeDayLowWholeDayClose02023-06-05 00:00:00130060018000012023-06-05 00:00:00130060218000022023-06-05 00:00:001300605180000型変換機能DataFrameの各列データ型はjquants_derivatives.modelsで定義したデータ型にしたがって、自動的に型変換されます。jquants_derivatives.models.IndexOption??Initsignature:jquants_derivatives.models.IndexOption(Date:dtype('<M8[ns]'),Code:str,WholeDayOpen:float,WholeDayHigh:float,WholeDayLow:float,WholeDayClose:float,NightSessionOpen:float,NightSessionHigh:float,NightSessionLow:float,NightSessionClose:float,DaySessionOpen:float,DaySessionHigh:float,DaySessionLow:float,DaySessionClose:float,Volume:float,OpenInterest:float,TurnoverValue:float,ContractMonth:str,StrikePrice:float,VolumeOnlyAuction:float,EmergencyMarginTriggerDivision:str,PutCallDivision:int,LastTradingDay:dtype('<M8[ns]'),...key=field.replace("(","").replace(")","")returncls.__annotations__[key]File:~/repo/jquants-derivatives/jquants_derivatives/models.pyType:ABCMetaSubclasses:df_20230605.dtypesDate                              datetime64[ns]
Code                                      object
WholeDayOpen                             float64
WholeDayHigh                             float64
WholeDayLow                              float64
WholeDayClose                            float64
NightSessionOpen                         float64
NightSessionHigh                         float64
NightSessionLow                          float64
NightSessionClose                        float64
DaySessionOpen                           float64
DaySessionHigh                           float64
DaySessionLow                            float64
DaySessionClose                          float64
Volume                                   float64
OpenInterest                             float64
TurnoverValue                            float64
ContractMonth                             object
StrikePrice                              float64
Volume(OnlyAuction)                      float64
EmergencyMarginTriggerDivision            object
PutCallDivision                            int64
LastTradingDay                    datetime64[ns]
SpecialQuotationDay               datetime64[ns]
SettlementPrice                          float64
...
BaseVolatility                           float64
UnderlyingPrice                          float64
ImpliedVolatility                        float64
InterestRate                             float64
dtype: objectキャッシュ機能同じデータを取得した場合、データはsqlite3のデータベースにキャッシュされるため、2回目以降の実行ではキャッシュされたデータをもとに DataFrame を返します。%%timedf_20230605=cli.get_option_index_option("2023-06-05")CPU times: user 289 ms, sys: 194 ms, total: 483 ms
Wall time: 482 msキャッシュされたデータは${HOME}/.jquants-api/jquantsapi.dbに格納されます。次のようにSQLを使ってデータを取得できます。
IPythonまたはノートブック（Jupyter/Colabなど）からSQLを実行する場合はipython-sqlをインストールし、ロードします。pipinstallipython-sql%load_ext sqlキャッシュの保存先を確認します。print(jquants_derivatives.database.db)/your_home_dir/.jquants-api/jquantsapi.dbDBに接続し、SQLを実行します。%sql sqlite:////your_home_dir/.jquants-api/jquantsapi.db%sql SELECT name FROM sqlite_master WHERE type='table';name0FINS_ANNOUNCEMENT1FINS_DIVIDEND2FINS_STATEMENTS3INDICES_TOPIX4LISTED_INFO5MARKETS_BREAKDOWN6MARKET_SEGMENT7MARKET_SHORT_SELLING8OPTION_INDEX_OPTION9PRICES_DAILY_QUOTES10PRICES_DAILY_QUOTES_PREMIUM11PRICES_PRICES_AM12SECTOR_1713SECTOR_33%sql SELECT UnderlyingPrice from OPTION_INDEX_OPTION LIMIT 3;UnderlyingPrice029520.1129520.1229520.1pandasのread_sql関数から DataFrameに読み込めます。importsqlite3withsqlite3.connect(jquants_derivatives.database.db)ascon:query_df=pd.read_sql("SELECT UnderlyingPrice FROM OPTION_INDEX_OPTION LIMIT 3",con)Optionクラスjquants_derivatives.OptionクラスはAPIから得られたオプションのデータを整形し、実務上扱いやすい形式に変換するクラスです。引数にはget_option_index_optionメソッドで取得した DataFrme を渡します。引数contractsには対象とする限月数を渡します（デフォルトは2）。fromjquants_derivativesimportOptionop_20230605=Option(df_20230605,contracts=2)contract_month属性は限月（ContractMonth）のリストを返します。op_20230605.contract_month['2023-06','2023-07']underlying_price属性は限月ごとの原資産価格（UnderlyingPrice）の辞書を返します。op_20230605.underlying_price{'2023-06':32217.43,'2023-07':32217.43}base_volatility属性は限月ごとの基準ボラティリティ（BaseVolatility）の辞書を返します。op_20230605.base_volatility{'2023-06':0.1951205,'2023-07':0.1951205}interest_rate属性は限月ごとの理論価格計算用金利（InterestRate）の辞書を返します。op_20230605.interest_rate{'2023-06':-0.000664,'2023-07':0.000455}バージョン0.3.0から、final_settlement_price属性は限月ごとのSQ値の辞書を返します。op_20230605.final_settlement_price{'2023-06':32018.4,'2023-07':32484.2}contracts_dfs属性は限月ごとの次の処理をした DataFrame を返します。取引高（Volume）が0のデータを除外ITMのデータを除外し、OTMのデータを抽出プレミアム（WholeDayClose）の最小値（デフォルトは1）までとし、最小値よりアウト型のデータを除外op_20230605.contracts_dfs["2023-06"].iloc[:3,:5]DateCodeWholeDayOpenWholeDayHighWholeDayLow02023-06-05 00:00:0013806761833112023-06-05 00:00:0018806771834122023-06-05 00:00:00138067818342op_20230605.contracts_dfs["2023-07"].iloc[:3,:5]DateCodeWholeDayOpenWholeDayHighWholeDayLowWholeDayCloseNightSessionOpen02023-06-05 00:00:001380676183311312023-06-05 00:00:001880677183412322023-06-05 00:00:0013806781834223バージョン0.2.0から、 DataFrame にはGreeks（Delta, Gamma, Vega, Theta）が含まれます。バージョン0.3.0から、 DataFrame には限月ごとのSQ値（FinalSettlementPrice）列が含まれます。op_20230605.contracts_dfs["2023-06"].iloc[:3,-5:]FinalSettlementPriceDeltaGammaVegaTheta032018.4-0.002028583.70614e-0621.6606-507.822132018.4-0.003683656.09453e-0637.112-906.529232018.4-0.003783076.41669e-0638.0091-903.146Greeksを算出しない場合は、Optionクラスの引数greeksをFalseにします。SQ値を含めない場合は、Optionクラスの引数sqをFalseにします。ボラティリティの可視化plot_volatility関数はボラティリティスマイルを可視化します。引数にはOptionクラスのインスタンスを渡します。jquants_derivatives.plot_volatility(op_20230605)op_2023060=Option(df_20230605,contracts=2)複数の時間帯を比較して可視化するには、plot_volatility関数の第2引数に比較対象のOptionインスタンスを渡します。df_20230602=cli.get_option_index_option("2023-06-02")op_20230602=Option(df_20230602)jquants_derivatives.plot_volatility(op_20230605,op_20230602)