J-Quants API Client Derivatives Library
Project description
jquants-derivatives
個人投資家向けデータ API 配信サービス「 J-Quants API 」の Python クライアントライブラリ のデリバティブ用ラッパーです。
jquants-derivatives ではオプションのデータを利用するため、J-Quants APIのスタンダード以上のプランが必要です。
J-Quants や API 仕様についての詳細を知りたい方は 公式ウェブサイト をご参照ください。 現在、J-Quants API は有償版サービスとして提供されています。
インストール方法
pip
コマンドでインストールします。
pip install jquants-derivatives
J-Quants API の利用
To use J-Quants API, you need to "Applications for J-Quants API" from J-Quants API Web site and 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 サイトより取得してください。
認証設定
コードを実行する前に認証設定をしておきます。設定方法は jquants-api-clientの設定 を参照してください。
Google Colab を利用する場合は jquants-api-clientのサンプルノートブック を参考にしてください。
使用方法
Clientクラス
jquants_derivatives.Client
クラスは jquantsapi.Client
クラスを継承しています。
jquants-api-client-python の Client
クラスと同じ方法で pandas.DataFrame
を取得します。
import jquants_derivatives
cli = jquants_derivatives.Client()
df_20230605 = cli.get_option_index_option("2023-06-05")
df_20230605.iloc[:3, :6]
Date | Code | WholeDayOpen | WholeDayHigh | WholeDayLow | WholeDayClose | |
---|---|---|---|---|---|---|
0 | 2023-06-05 00:00:00 | 130060018 | 0 | 0 | 0 | 0 |
1 | 2023-06-05 00:00:00 | 130060218 | 0 | 0 | 0 | 0 |
2 | 2023-06-05 00:00:00 | 130060518 | 0 | 0 | 0 | 0 |
型変換機能
DataFrameの各列データ型は jquants_derivatives.models で定義したデータ型にしたがって、自動的に型変換されます。
jquants_derivatives.models.IndexOption??
Init signature:
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(")", "")
return cls.__annotations__[key]
File: ~/repo/jquants-derivatives/jquants_derivatives/models.py
Type: ABCMeta
Subclasses:
df_20230605.dtypes
Date 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 を返します。
%%time
df_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 をインストールし、ロードします。
pip install ipython-sql
%load_ext sql
キャッシュの保存先を確認します。
print(jquants_derivatives.database.db)
/your_home_dir/.jquants-api/jquantsapi.db
DBに接続し、SQLを実行します。
%sql sqlite:////your_home_dir/.jquants-api/jquantsapi.db
%sql SELECT name FROM sqlite_master WHERE type='table';
name | |
---|---|
0 | FINS_ANNOUNCEMENT |
1 | FINS_DIVIDEND |
2 | FINS_STATEMENTS |
3 | INDICES_TOPIX |
4 | LISTED_INFO |
5 | MARKETS_BREAKDOWN |
6 | MARKET_SEGMENT |
7 | MARKET_SHORT_SELLING |
8 | OPTION_INDEX_OPTION |
9 | PRICES_DAILY_QUOTES |
10 | PRICES_DAILY_QUOTES_PREMIUM |
11 | PRICES_PRICES_AM |
12 | SECTOR_17 |
13 | SECTOR_33 |
%sql SELECT UnderlyingPrice from OPTION_INDEX_OPTION LIMIT 3;
UnderlyingPrice | |
---|---|
0 | 29520.1 |
1 | 29520.1 |
2 | 29520.1 |
pandasの read_sql
関数から DataFrameに読み込めます。
import sqlite3
with sqlite3.connect(jquants_derivatives.database.db) as con:
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)。
from jquants_derivatives import Option
op_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]
Date | Code | WholeDayOpen | WholeDayHigh | WholeDayLow | |
---|---|---|---|---|---|
0 | 2023-06-05 00:00:00 | 138067618 | 3 | 3 | 1 |
1 | 2023-06-05 00:00:00 | 188067718 | 3 | 4 | 1 |
2 | 2023-06-05 00:00:00 | 138067818 | 3 | 4 | 2 |
op_20230605.contracts_dfs["2023-07"].iloc[:3, :5]
Date | Code | WholeDayOpen | WholeDayHigh | WholeDayLow | WholeDayClose | NightSessionOpen | |
---|---|---|---|---|---|---|---|
0 | 2023-06-05 00:00:00 | 138067618 | 3 | 3 | 1 | 1 | 3 |
1 | 2023-06-05 00:00:00 | 188067718 | 3 | 4 | 1 | 2 | 3 |
2 | 2023-06-05 00:00:00 | 138067818 | 3 | 4 | 2 | 2 | 3 |
バージョン0.2.0から、 DataFrame には Greeks (Delta, Gamma, Vega, Theta)が含まれます。バージョン0.3.0から、 DataFrame には限月ごとの SQ値 (FinalSettlementPrice)列が含まれます。
op_20230605.contracts_dfs["2023-06"].iloc[:3, -5:]
FinalSettlementPrice | Delta | Gamma | Vega | Theta | |
---|---|---|---|---|---|
0 | 32018.4 | -0.00202858 | 3.70614e-06 | 21.6606 | -507.822 |
1 | 32018.4 | -0.00368365 | 6.09453e-06 | 37.112 | -906.529 |
2 | 32018.4 | -0.00378307 | 6.41669e-06 | 38.0091 | -903.146 |
- Greeksを算出しない場合は、
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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for jquants_derivatives-0.3.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7a6744e7ea9de47ed975aa29496b9c36559008fc38be013cabac289d183143b |
|
MD5 | 1c8671eced3c4addead0d57a629c288c |
|
BLAKE2b-256 | adedd48ac163a7bb619dbf9b410ba7f1893a6e3b371c452cbee13b9de24184f8 |
Hashes for jquants_derivatives-0.3.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49c1a844b957f23447f8ec3947bd6d198a46b8b713cdfa1a0b369e611a0f1fda |
|
MD5 | bd69c21f15a418366e4e0691360d8385 |
|
BLAKE2b-256 | 51e8c2a18b852d1543ccf7c184790bf2002ca739310b52440426ed5a2d11ee79 |