# オプションスクリーニング
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_option_screen(request)
説明
オプションスクリーニング。原資産属性(underlying)とオプション属性(option)を組み合わせてフィルタリングします。同一グループ内で原資産属性(underlying)とオプション属性(option)を同時にフィルタリングすることはできないため、SDK は必要に応じて自動的に新しいフィルタグループを開きます。デフォルトでは各フィルタ条件が AND で連結(新グループを開く)され、同じ indicator_type で
or_with_previous=Trueを明示的に指定した場合のみ前条件と OR(同一グループ)になります。パラメータ
パラメータ タイプ 説明 request OptionScreenRequest オプションスクリーニングリクエストオブジェクト、構築時に market_categories 必須 OptionScreenRequest フィールド:
フィールド タイプ 説明 market_categories list[int] オプション市場カテゴリリスト 要素は OptMarketCategory から取得:US_STOCK=0、US_INDEX=1、US_FUTURE=2、HK_STOCK=3、HK_INDEX=4、JP_STOCK=5、JP_INDEX=6。US_FUTURE / JP_STOCK / JP_INDEX は今後サポート予定、現在は結果が空となるpage_from int ページング開始位置 デフォルトは 0page_count int 1 ページあたりの最大返却件数 デフォルトは 200フィルタ条件 builder メソッド(デフォルトで呼び出すごとに新しいフィルタグループが自動的に開かれ、前条件と AND;同じ indicator_type かつ
or_with_previous=Trueの場合のみ前条件と OR で同一グループに追加。同一グループ内で原資産属性(underlying)とオプション属性(option)を同時にフィルタリングすることはできません):メソッド 説明 add_underlying_filter(indicator_type, values=None, lower=None, upper=None, plate_list=None, parent_plate_id=None, or_with_previous=False) 原資産属性フィルタ indicator_type は OptUnderlyingIndicator から取得。STOCK_LIST は原資産の stock_id(int、スナップショット/購読 API などから取得)を受け取り、証券コード文字列はそのまま渡せない。IV / HV / IV_RANK / IV_PERCENTILE 等のパーセンテージ系指標は小数で渡す(30% は 0.3)。PLATE(103) を渡すとエラーが発生する、当面使用しないことadd_option_filter(indicator_type, values=None, lower=None, upper=None, or_with_previous=False) オプション属性フィルタ indicator_type は OptIndicator から取得。DELTA / GAMMA / VEGA / THETA / RHO や確率系指標(ITM_PROBABILITY 等)は 0~1 の小数で渡す。PREMIUM(2021) は sort / retrieve のみサポート、filter として使用するとエラーが発生する;BUY_BREAK_EVEN_POINT(3023) は廃止済み、新しいコードでは BUY_TO_BEP(3011) を使用new_filter_group() 手動で新しいフィルタグループを開始 グループ間 AND、グループ内 ORadd_sort(indicator_type, desc=False) ソート desc=True で降順、デフォルト昇順add_option_retrieve(indicator_type) 追加で返すオプションフィールドを宣言 呼び出さない場合はデフォルトの基本フィールドを返すadd_underlying_retrieve(indicator_type) 返す原資産フィールドを宣言 呼び出した場合のみ結果中の underlying dict が埋まる
戻り値
パラメータ タイプ 説明 ret RET_CODE API 呼び出し結果 data tuple ret == RET_OK のとき、(last_page, all_count, DataFrame) を返す str ret != RET_OK のとき、エラー記述を返す 戻り値 DataFrame フィールド:
フィールド タイプ 説明 code str オプションコード option_name str オプション名称 strike_price float 権利行使価格 strike_date str 権利行使日 option_type int コール/プット 1=CALL、2=PUTexercise_type int 権利行使方式 1=アメリカン、2=ヨーロピアンexpiration_type int 満期タイプ 1=週、2=月、3=四半期in_the_money bool イン・ザ・マネーか否か left_day int 残日数 price float オプション価格 mid_price float 仲値 bid_price float 買い気配値 ask_price float 売り気配値 bid_ask_spread float ビッド・アスクスプレッド bid_volume int 買い気配数量 ask_volume int 売り気配数量 bid_ask_volume_ratio float 買い/売り数量比 change_ratio float 変化率 volume int 出来高 turnover float 売買代金 open_interest int 未決済建玉数(建玉) open_interest_market_cap float 建玉時価総額 vol_oi_ratio float 出来高/建玉 premium float プレミアム implied_volatility float インプライド・ボラティリティ history_volatility float ヒストリカル・ボラティリティ iv_hv_ratio float IV/HV delta float ギリシャ文字 Delta gamma float ギリシャ文字 Gamma vega float ギリシャ文字 Vega theta float ギリシャ文字 Theta rho float ギリシャ文字 Rho leverage_ratio float レバレッジ比率 effective_gearing float 実効レバレッジ itm_probability float イン・ザ・マネー確率 buy_to_bep float 買いから損益分岐点までの比率 sell_to_bep float 売りから損益分岐点までの比率 buy_profit_probability float 買い利益確率 sell_profit_probability float 売り利益確率 intrinsic_value_per float 本質的価値割合 time_value_per float 時間的価値割合 itm_degree float イン・ザ・マネー度合い otm_degree float アウト・オブ・ザ・マネー度合い otm_probability float アウト・オブ・ザ・マネー確率 sell_annualized_return float 売り年率収益率 interval_return float 売り区間収益率 underlying dict 原資産情報(add_underlying_retrieve を呼び出した場合のみ返却) dict には stock_id / iv / hv / iv_rank / iv_percentile / market_cap / price / change_ratio が含まれる
Example
from futu import (
OpenQuoteContext, RET_OK, OptionScreenRequest,
OptMarketCategory, OptIndicator, OptUnderlyingIndicator,
)
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
# 例 1:米国株原資産 IV>30% + アット・ザ・マネー付近の CALL
req = OptionScreenRequest(market_categories=[OptMarketCategory.US_STOCK])
req.add_underlying_filter(OptUnderlyingIndicator.IV, lower=0.3) # 原資産 IV ≥ 30%(小数)
req.add_option_filter(OptIndicator.OPTION_TYPE, values=[1]) # CALL
req.add_option_filter(OptIndicator.DELTA, lower=0.3, upper=0.7) # Delta 0.3~0.7
req.add_option_filter(OptIndicator.LEFT_DAY, lower=7, upper=60) # 残り 7~60 日
req.add_sort(OptIndicator.VOLUME, desc=True) # 出来高降順
req.add_option_retrieve(OptIndicator.DELTA)
req.add_option_retrieve(OptIndicator.VOLUME)
req.page_count = 30
ret, data = quote_ctx.get_option_screen(req)
if ret == RET_OK:
last_page, all_count, df = data
print(df[['code', 'option_name', 'delta', 'volume']].head(10))
else:
print('error: ', data)
# 例 2:香港株で指定原資産のオプションをフィルタ + 原資産情報も取得
# 注:STOCK_LIST が受け取るのは内部 stock_id。get_market_snapshot / get_static_info などで
# 事前に取得する必要がある。下記の 54047868453564 は香港テンセント(00700)の stock_id。
req = OptionScreenRequest(market_categories=[OptMarketCategory.HK_STOCK])
req.add_underlying_filter(OptUnderlyingIndicator.STOCK_LIST,
values=[54047868453564]) # 原資産=テンセント
req.add_option_filter(OptIndicator.OPTION_TYPE, values=[1]) # CALL
req.add_option_filter(OptIndicator.OPTION_TYPE, values=[2],
or_with_previous=True) # 前条件と OR:CALL + PUT
req.add_underlying_retrieve(OptUnderlyingIndicator.IV)
req.add_underlying_retrieve(OptUnderlyingIndicator.MARKET_CAP)
req.add_sort(OptIndicator.OPEN_INTEREST, desc=True) # 建玉降順
req.page_count = 50
ret, data = quote_ctx.get_option_screen(req)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
- Output
code option_name delta volume
0 US.SLV260529C70000 SLV 260529 70.00C 0.52937 45838
1 US.TZA260612C5500 TZA 260612 5.50C 0.37815 40777
2 US.HIVE260717C5000 HIVE 260717 5.00C 0.36626 31104
3 US.NKE260618C45000 NKE 260618 45.00C 0.32579 24046
4 US.SG260618C9500 SG 260618 9.50C 0.39444 19020
2
3
4
5
6
# Qot_OptionScreen.proto
説明
オプションスクリーニング
パラメータ
message Boundary
{
required double value = 1;
optional bool includes = 2; // 閉区間か否か、デフォルト true
}
message ValueInterval
{
optional Boundary filterMin = 1;
optional Boundary filterMax = 2;
}
message OptionIndicatorValue
{
repeated int32 valueList = 1; // 確定値リスト (OPTION_TYPE などに使用)
optional ValueInterval valueInterval = 2; // 区間フィルタ
}
message PlateInfo
{
repeated string plateIdList = 1;
optional string parentPlateId = 2;
}
// 原資産属性フィルタ条件
message UnderlyingFilter
{
required int32 indicatorType = 1; // OptUnderlyingIndicator
optional OptionIndicatorValue indicatorValue = 2;
repeated PlateInfo plateList = 3; // PLATE(103) 時のみ使用
}
// オプション属性フィルタ条件
message OptionFilter
{
required int32 indicatorType = 1; // OptIndicator
optional OptionIndicatorValue indicatorValue = 2;
}
// フィルタ条件のグループ:グループ内 OR、グループ間 AND;同一グループ内で原資産属性(underlying)とオプション属性(option)を同時にフィルタリングすることはできません
message FilterGroup
{
repeated UnderlyingFilter underlyingList = 1;
repeated OptionFilter optionList = 2;
}
message Sort
{
required int32 indicatorType = 1;
required int32 direction = 2; // 0=昇順, 1=降順
}
message C2S
{
repeated int32 marketCategoryList = 1; // OptMarketCategory:US_STOCK=0、US_INDEX=1、US_FUTURE=2、HK_STOCK=3、HK_INDEX=4、JP_STOCK=5、JP_INDEX=6
repeated FilterGroup filterList = 2;
repeated Sort sortList = 3;
optional int32 pageFrom = 4;
optional int32 pageCount = 5;
repeated int32 optionRetrieveList = 6; // 返すオプションフィールドを宣言、未指定の場合はデフォルトの基本フィールドを返す
repeated int32 underlyingRetrieveList = 7; // 返す原資産フィールドを宣言
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
- 戻り値
message Security
{
required int32 market = 1;
required string code = 2;
}
message UnderlyingInfo
{
optional int64 stockID = 1;
optional double iv = 2;
optional double hv = 3;
optional double ivRank = 4;
optional double ivPercentile = 5;
optional double marketCap = 6;
optional double price = 7;
optional double changeRatio = 8;
}
message OptionScreenItem
{
optional Security security = 1;
optional string optionName = 2;
optional double strikePrice = 3;
optional string strikeDate = 4;
optional int32 optionType = 5;
optional int32 exerciseType = 6;
optional int32 expirationType = 7;
optional bool inTheMoney = 8;
optional int32 leftDay = 9;
optional double price = 20;
optional double midPrice = 21;
optional double bidPrice = 22;
optional double askPrice = 23;
optional double bidAskSpread = 24;
optional int64 bidVolume = 25;
optional int64 askVolume = 26;
optional double bidAskVolumeRatio = 27;
optional double changeRatio = 28;
optional int64 volume = 29;
optional double turnover = 30;
optional int64 openInterest = 31;
optional double openInterestMarketCap = 32;
optional double volOIRatio = 33;
optional double premium = 34;
optional double impliedVolatility = 40;
optional double historyVolatility = 41;
optional double ivHvRatio = 42;
optional double delta = 43;
optional double gamma = 44;
optional double vega = 45;
optional double theta = 46;
optional double rho = 47;
optional double leverageRatio = 48;
optional double effectiveGearing = 49;
optional UnderlyingInfo underlyingInfo = 50;
optional double itmProbability = 51;
optional double buyToBep = 52;
optional double sellToBep = 53;
optional double buyProfitProbability = 54;
optional double sellProfitProbability = 55;
optional double intrinsicValuePer = 56;
optional double timeValuePer = 57;
optional double itmDegree = 58;
optional double otmDegree = 59;
optional double otmProbability = 60;
optional double sellAnnualizedReturn = 61;
optional double intervalReturn = 62;
}
message S2C
{
required bool lastPage = 1;
required int32 allCount = 2;
repeated OptionScreenItem dataList = 3;
}
message Response
{
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
- API 呼び出し結果、構造は RetType を参照
プロトコル ID
3253
uint OptionScreen(QotOptionScreen.Request req); virtual void OnReply_OptionScreen(FTAPI_Conn client, uint nSerialNo, QotOptionScreen.Response rsp);
説明
オプションスクリーニング
パラメータ
Proto タブの Qot_OptionScreen.proto のリクエスト構造を参照。
戻り値
Proto タブの Qot_OptionScreen.proto のレスポンス構造を参照。
プロトコル ID
3253
int optionScreen(QotOptionScreen.Request req) onReply_OptionScreen(FTAPI_Conn client, int nSerialNo, QotOptionScreen.Response rsp)
説明
オプションスクリーニング
パラメータ
Proto タブの Qot_OptionScreen.proto のリクエスト構造を参照。
戻り値
Proto タブの Qot_OptionScreen.proto のレスポンス構造を参照。
プロトコル ID
3253
bool OptionScreen(uint32_t & nSerialNo, const Qot_OptionScreen::Request & stReq); virtual void OnReply_OptionScreen(FTAPI_Conn* pConn, uint32_t nSerialNo, const Qot_OptionScreen::Response & stRsp)
説明
オプションスクリーニング
パラメータ
Proto タブの Qot_OptionScreen.proto のリクエスト構造を参照。
戻り値
Proto タブの Qot_OptionScreen.proto のレスポンス構造を参照。
プロトコル ID
3253
optionScreen(qotOptionScreen)
説明
オプションスクリーニング
パラメータ
Proto タブの Qot_OptionScreen.proto のリクエスト構造を参照。
戻り値
Proto タブの Qot_OptionScreen.proto のレスポンス構造を参照。
プロトコル ID
3253
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_option_screen(request)
説明
オプションスクリーニング、パラメータと戻り値フィールドは nn タブと同じ。
Example
from moomoo import (
OpenQuoteContext, RET_OK, OptionScreenRequest,
OptMarketCategory, OptIndicator, OptUnderlyingIndicator,
)
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
req = OptionScreenRequest(market_categories=[OptMarketCategory.US_STOCK])
req.add_underlying_filter(OptUnderlyingIndicator.IV, lower=0.3) # 30%(小数)
req.add_option_filter(OptIndicator.OPTION_TYPE, values=[1])
req.add_option_filter(OptIndicator.DELTA, lower=0.3, upper=0.7)
req.add_sort(OptIndicator.VOLUME, desc=True)
req.page_count = 30
ret, data = quote_ctx.get_option_screen(req)
if ret == RET_OK:
last_page, all_count, df = data
print(df[['code', 'option_name', 'delta', 'volume']].head(10))
else:
print('error: ', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Qot_OptionScreen.proto
nn タブの Proto 内容を参照、プロトコル ID 3253。
uint OptionScreen(QotOptionScreen.Request req); virtual void OnReply_OptionScreen(FTAPI_Conn client, uint nSerialNo, QotOptionScreen.Response rsp);
nn タブの Proto 内容を参照、プロトコル ID 3253。
int optionScreen(QotOptionScreen.Request req) onReply_OptionScreen(FTAPI_Conn client, int nSerialNo, QotOptionScreen.Response rsp)
nn タブの Proto 内容を参照、プロトコル ID 3253。
bool OptionScreen(uint32_t & nSerialNo, const Qot_OptionScreen::Request & stReq); virtual void OnReply_OptionScreen(FTAPI_Conn* pConn, uint32_t nSerialNo, const Qot_OptionScreen::Response & stRsp)
nn タブの Proto 内容を参照、プロトコル ID 3253。
optionScreen(qotOptionScreen)
nn タブの Proto 内容を参照、プロトコル ID 3253。