From cb6cec64147b5fd315c628fc889630fd7e935c8c Mon Sep 17 00:00:00 2001 From: byblehua Date: Mon, 14 Dec 2020 16:33:06 +0800 Subject: [PATCH 01/36] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index a1b01fd..8e6b2f2 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -4.0.1299 +3.27.2 From 6f7e7c78d4cd517512893162bd5a4ac0d3824ccc Mon Sep 17 00:00:00 2001 From: byblehua Date: Mon, 14 Dec 2020 16:33:42 +0800 Subject: [PATCH 02/36] =?UTF-8?q?Revert=20"=E8=A7=A3=E5=86=B3=E5=86=B2?= =?UTF-8?q?=E7=AA=81"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cb6cec64147b5fd315c628fc889630fd7e935c8c. --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index 8e6b2f2..a1b01fd 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -3.27.2 +4.0.1299 From 97789d4e617a1c2a81137877dae2857836f546bc Mon Sep 17 00:00:00 2001 From: byblehua Date: Mon, 14 Dec 2020 16:33:54 +0800 Subject: [PATCH 03/36] =?UTF-8?q?Revert=20"=E4=BF=AE=E6=AD=A3=E5=8D=95?= =?UTF-8?q?=E8=AF=8D=E8=AF=AF=E5=86=99"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 44af63ad474361454893194afe3ccf50c6288dca. --- futu/quote/open_quote_context.py | 2 +- futu/quote/quote_query.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/futu/quote/open_quote_context.py b/futu/quote/open_quote_context.py index bc03767..be1e88f 100644 --- a/futu/quote/open_quote_context.py +++ b/futu/quote/open_quote_context.py @@ -639,7 +639,7 @@ def get_market_snapshot(self, code_list): 'wrt_price_recovery_ratio', 'wrt_score', 'wrt_upper_strike_price', - 'wrt_lower_strike_price', + 'wrt_lowe_strike_price', 'wrt_inline_price_status', 'wrt_issuer_code' ] diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index 921af30..6506c7f 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -590,7 +590,7 @@ def unpack_rsp(cls, rsp_pb): # 上限价,仅界内证支持该字段 type=double snapshot_tmp["wrt_upper_strike_price"] = record.warrantExData.upperStrikePrice # 下限价,仅界内证支持该字段 type=double - snapshot_tmp["wrt_lower_strike_price"] = record.warrantExData.lowerStrikePrice + snapshot_tmp["wrt_lowe_strike_price"] = record.warrantExData.lowerStrikePrice # 界内界外,仅界内证支持该字段 type=double snapshot_tmp["wrt_inline_price_status"] = PriceType.to_string2( record.warrantExData.inLinePriceStatus) From bc83c107f4c708acb77fcb74442dbed166afbbb6 Mon Sep 17 00:00:00 2001 From: pspeng Date: Thu, 17 Dec 2020 17:11:27 +0800 Subject: [PATCH 04/36] =?UTF-8?q?fix=20=E9=94=99=E5=88=AB=E5=AD=97?= =?UTF-8?q?=E6=8A=8A=E2=80=9C=E6=B6=A1=E8=BD=AE=E2=80=9D=E6=94=B9=E6=88=90?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E7=9A=84=E2=80=9C=E7=AA=9D=E8=BD=AE=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 14 +++++++------- futu/common/pb/Trd_Common.proto | 2 +- futu/common/utils.py | 2 +- futu/quote/open_quote_context.py | 12 ++++++------ futu/quote/quote_query.py | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 78622dd..e74acd2 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -87,7 +87,7 @@ class ProtoId(object): Qot_GetOrderDetail = 3016 # 获取委托明细 Qot_UpdateOrderDetail = 3017 # 推送委托明细 - Qot_GetWarrant = 3210 # 拉取涡轮信息 + Qot_GetWarrant = 3210 # 拉取窝轮信息 Qot_GetCapitalFlow = 3211 # 获取资金流向 Qot_GetCapitalDistribution = 3212 # 获取资金分布 @@ -393,7 +393,7 @@ class SecurityType(FtEnum): .. py:attribute:: ETF 交易所交易基金(Exchange Traded Funds) .. py:attribute:: WARRANT - 港股涡轮牛熊证 + 港股窝轮牛熊证 .. py:attribute:: BOND 债券 .. py:attribute:: DRVT @@ -1358,7 +1358,7 @@ def load_dic(self): '''-------------------------SortField----------------------------''' -# 涡轮排序 +# 窝轮排序 class SortField(FtEnum): NONE = "N/A" # 未知 CODE = "CODE" # 代码 @@ -1472,7 +1472,7 @@ def load_dic(self): '''-------------------------IpoPeriod----------------------------''' -# 涡轮上市日 +# 窝轮上市日 class IpoPeriod(FtEnum): NONE = "N/A" # 未知 TODAY = "TODAY" # 今日上市 @@ -1495,7 +1495,7 @@ def load_dic(self): '''-------------------------PriceType----------------------------''' -# 涡轮价外/内,界内证表示界内界外 +# 窝轮价外/内,界内证表示界内界外 class PriceType(FtEnum): NONE = "N/A" # 未知 OUTSIDE = "OUTSIDE" # 价外,界内证表示界外 @@ -1512,7 +1512,7 @@ def load_dic(self): '''-------------------------WarrantStatus----------------------------''' -# 涡轮状态 +# 窝轮状态 class WarrantStatus(FtEnum): NONE = "N/A" # 未知 NORMAL = "NORMAL" # 正常状态 @@ -1533,7 +1533,7 @@ def load_dic(self): '''-------------------------Issuer----------------------------''' -# 涡轮发行人 +# 窝轮发行人 class Issuer(FtEnum): NONE = "N/A" # 未知 SG = "SG" # 法兴 diff --git a/futu/common/pb/Trd_Common.proto b/futu/common/pb/Trd_Common.proto index 77a4f69..7dc7093 100644 --- a/futu/common/pb/Trd_Common.proto +++ b/futu/common/pb/Trd_Common.proto @@ -49,7 +49,7 @@ enum OrderType { OrderType_Unknown = 0; //未知类型 OrderType_Normal = 1; //普通订单(港股的增强限价单、港股期权的限价单,A股限价委托、美股的限价单,港股期货的限价单,CME期货的限价单)。目前港股期权只能指定此订单类型。 - OrderType_Market = 2; //市价订单(目前支持美股、港股正股、涡轮、牛熊、界内证) + OrderType_Market = 2; //市价订单(目前支持美股、港股正股、窝轮、牛熊、界内证) OrderType_AbsoluteLimit = 5; //绝对限价订单(目前仅港股),只有价格完全匹配才成交,否则下单失败,比如你下价格为5元的买单,卖单价格必须也要是5元才能成交,低于5元也不能成交,下单失败。卖出同理 OrderType_Auction = 6; //竞价订单(目前仅港股),仅港股早盘竞价和收盘竞价有效,A股的早盘竞价订单类型不变还是OrderType_Normal diff --git a/futu/common/utils.py b/futu/common/utils.py index 64d3e4a..50c18e1 100644 --- a/futu/common/utils.py +++ b/futu/common/utils.py @@ -455,7 +455,7 @@ def __init__(self): from futu.common.pb.Qot_UpdateOrderDetail_pb2 import Response ProtobufMap.created_protobuf_map[ProtoId.Qot_UpdateOrderDetail] = Response() - """ Qot_GetWarrantData = 3210 获取涡轮 """ + """ Qot_GetWarrantData = 3210 获取窝轮 """ from futu.common.pb.Qot_GetWarrant_pb2 import Response as GetWarrantPBResponse ProtobufMap.created_protobuf_map[ProtoId.Qot_GetWarrant] = GetWarrantPBResponse() diff --git a/futu/quote/open_quote_context.py b/futu/quote/open_quote_context.py index bc03767..ee36d8c 100644 --- a/futu/quote/open_quote_context.py +++ b/futu/quote/open_quote_context.py @@ -253,7 +253,7 @@ def get_stock_basicinfo(self, market, stock_type=SecurityType.STOCK, code_list=N name str 名字 lot_size int 每手数量 stock_type str 股票类型,参见SecurityType - stock_child_type str 涡轮子类型,参见WrtType + stock_child_type str 窝轮子类型,参见WrtType stock_owner str 所属正股的代码 option_type str 期权类型,Qot_Common.OptionType strike_time str 行权日 @@ -499,8 +499,8 @@ def get_market_snapshot(self, code_list): dividend_ratio_ttm float 股息率TTM(该字段为百分比字段,默认不展示%) dividend_lfy float 股息LFY,上一年度派息 dividend_lfy_ratio float 股息率LFY(该字段为百分比字段,默认不展示 - stock_owner str 涡轮所属正股的代码或期权的标的股代码 - wrt_valid bool 是否是窝轮(为true时以下涡轮相关的字段才有合法数据) + stock_owner str 窝轮所属正股的代码或期权的标的股代码 + wrt_valid bool 是否是窝轮(为true时以下窝轮相关的字段才有合法数据) wrt_conversion_ratio float 换股比率(该字段为比例字段,默认不展示%) wrt_type str 窝轮类型,参见WrtType wrt_strike_price float 行使价格 @@ -1502,7 +1502,7 @@ def get_referencestock_list(self, code, reference_type): """ 获取证券的关联数据 :param code: 证券id,str,例如HK.00700 - :param reference_type: 要获得的相关数据,参见SecurityReferenceType。例如WARRANT,表示获取正股相关的涡轮 + :param reference_type: 要获得的相关数据,参见SecurityReferenceType。例如WARRANT,表示获取正股相关的窝轮 :return: (ret, data) ret == RET_OK 返回pd dataframe数据,数据列格式如下 @@ -1516,8 +1516,8 @@ def get_referencestock_list(self, code, reference_type): stock_type str 证券类型,参见SecurityType stock_name str 证券名字 list_time str 上市时间(美股默认是美东时间,港股A股默认是北京时间) - wrt_valid bool 是否是涡轮,如果为True,下面wrt开头的字段有效 - wrt_type str 涡轮类型,参见WrtType + wrt_valid bool 是否是窝轮,如果为True,下面wrt开头的字段有效 + wrt_type str 窝轮类型,参见WrtType wrt_code str 所属正股 future_valid bool 是否是期货,如果为True,下面future开头的字段有效 future_main_contract bool 是否主连合约(期货特有字段) diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index 921af30..d56a737 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -2021,7 +2021,7 @@ def unpack_rsp(cls, rsp_pb): class QuoteWarrant: """ - 拉取涡轮 + 拉取窝轮 """ def __init__(self): From dfffdf59403d1b4c347bee42296c6479d85d5301 Mon Sep 17 00:00:00 2001 From: byblehua Date: Mon, 21 Dec 2020 20:38:31 +0800 Subject: [PATCH 05/36] =?UTF-8?q?Revert=20"Revert=20"=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E5=8D=95=E8=AF=8D=E8=AF=AF=E5=86=99""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 97789d4e617a1c2a81137877dae2857836f546bc. --- futu/quote/open_quote_context.py | 2 +- futu/quote/quote_query.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/futu/quote/open_quote_context.py b/futu/quote/open_quote_context.py index be1e88f..bc03767 100644 --- a/futu/quote/open_quote_context.py +++ b/futu/quote/open_quote_context.py @@ -639,7 +639,7 @@ def get_market_snapshot(self, code_list): 'wrt_price_recovery_ratio', 'wrt_score', 'wrt_upper_strike_price', - 'wrt_lowe_strike_price', + 'wrt_lower_strike_price', 'wrt_inline_price_status', 'wrt_issuer_code' ] diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index 6506c7f..921af30 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -590,7 +590,7 @@ def unpack_rsp(cls, rsp_pb): # 上限价,仅界内证支持该字段 type=double snapshot_tmp["wrt_upper_strike_price"] = record.warrantExData.upperStrikePrice # 下限价,仅界内证支持该字段 type=double - snapshot_tmp["wrt_lowe_strike_price"] = record.warrantExData.lowerStrikePrice + snapshot_tmp["wrt_lower_strike_price"] = record.warrantExData.lowerStrikePrice # 界内界外,仅界内证支持该字段 type=double snapshot_tmp["wrt_inline_price_status"] = PriceType.to_string2( record.warrantExData.inLinePriceStatus) From 52f950e527c01656f813c46367a7887a1819fe64 Mon Sep 17 00:00:00 2001 From: byblehua Date: Mon, 21 Dec 2020 20:42:00 +0800 Subject: [PATCH 06/36] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=81=B0=E5=BA=A6?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B74.0.1300?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index a1b01fd..bb3f7ac 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -4.0.1299 +4.0.1300 From 9f4302016abcff5044dcd9861fbb3a616073bbaf Mon Sep 17 00:00:00 2001 From: alexqli Date: Tue, 22 Dec 2020 11:42:23 +0800 Subject: [PATCH 07/36] =?UTF-8?q?=E4=BA=A4=E6=98=93=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0sim=5Facc=5Ftype=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 13 ++++ futu/common/pb/Common.proto | 8 ++ futu/common/pb/Common_pb2.py | 37 ++++++++- futu/common/pb/GetUserInfo.proto | 2 + futu/common/pb/GetUserInfo_pb2.py | 34 +++++--- futu/common/pb/InitConnect.proto | 1 + futu/common/pb/InitConnect_pb2.py | 21 +++-- futu/common/pb/Qot_Sub.proto | 2 +- futu/common/pb/Trd_Common.proto | 10 ++- futu/common/pb/Trd_Common_pb2.py | 124 +++++++++++++++++++----------- futu/trade/open_trade_context.py | 7 +- futu/trade/trade_query.py | 5 +- 12 files changed, 194 insertions(+), 70 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index e74acd2..8db4a43 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -2413,3 +2413,16 @@ def load_dic(self): self.FUTUSECURITIES: Trd_Common_pb2.SecurityFirm_FutuSecurities, self.FUTUINC: Trd_Common_pb2.SecurityFirm_FutuInc } + +# 模拟交易账号类型 +class SimAccType(FtEnum): + NONE = 'N/A' + STOCK = 'STOCK' + OPTION = 'OPTION' + + def load_dic(self): + return { + self.NONE: Trd_Common_pb2.SimAccType_Unknown, + self.STOCK: Trd_Common_pb2.SimAccType_Stock, + self.OPTION: Trd_Common_pb2.SimAccType_Option + } diff --git a/futu/common/pb/Common.proto b/futu/common/pb/Common.proto index b854828..cdb2181 100644 --- a/futu/common/pb/Common.proto +++ b/futu/common/pb/Common.proto @@ -38,6 +38,14 @@ enum ProtoFmt ProtoFmt_Json = 1; //Json格式 } +//用户类型 +enum UserAttribution +{ + UserAttribution_Unknown = 0; // + UserAttribution_NN = 1; //牛牛用户 + UserAttribution_MM = 2; //MooMoo用户 +} + enum ProgramStatusType { ProgramStatusType_None = 0; diff --git a/futu/common/pb/Common_pb2.py b/futu/common/pb/Common_pb2.py index 5c554eb..36269b4 100644 --- a/futu/common/pb/Common_pb2.py +++ b/futu/common/pb/Common_pb2.py @@ -20,7 +20,7 @@ name='Common.proto', package='Common', syntax='proto2', - serialized_pb=_b('\n\x0c\x43ommon.proto\x12\x06\x43ommon\",\n\x08PacketID\x12\x0e\n\x06\x63onnID\x18\x01 \x02(\x04\x12\x10\n\x08serialNo\x18\x02 \x02(\r\"L\n\rProgramStatus\x12\'\n\x04type\x18\x01 \x02(\x0e\x32\x19.Common.ProgramStatusType\x12\x12\n\nstrExtDesc\x18\x02 \x01(\t*\xb6\x01\n\x07RetType\x12\x13\n\x0fRetType_Succeed\x10\x00\x12\x1b\n\x0eRetType_Failed\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_TimeOut\x10\x9c\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1f\n\x12RetType_DisConnect\x10\xb8\xfe\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Unknown\x10\xf0\xfc\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Invalid\x10\x8c\xfc\xff\xff\xff\xff\xff\xff\xff\x01*\x83\x01\n\rPacketEncAlgo\x12\x1b\n\x17PacketEncAlgo_FTAES_ECB\x10\x00\x12\x1f\n\x12PacketEncAlgo_None\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x15PacketEncAlgo_AES_ECB\x10\x01\x12\x19\n\x15PacketEncAlgo_AES_CBC\x10\x02*4\n\x08ProtoFmt\x12\x15\n\x11ProtoFmt_Protobuf\x10\x00\x12\x11\n\rProtoFmt_Json\x10\x01*\xf0\x03\n\x11ProgramStatusType\x12\x1a\n\x16ProgramStatusType_None\x10\x00\x12\x1c\n\x18ProgramStatusType_Loaded\x10\x01\x12\x1c\n\x18ProgramStatusType_Loging\x10\x02\x12\'\n#ProgramStatusType_NeedPicVerifyCode\x10\x03\x12)\n%ProgramStatusType_NeedPhoneVerifyCode\x10\x04\x12!\n\x1dProgramStatusType_LoginFailed\x10\x05\x12!\n\x1dProgramStatusType_ForceUpdate\x10\x06\x12*\n&ProgramStatusType_NessaryDataPreparing\x10\x07\x12(\n$ProgramStatusType_NessaryDataMissing\x10\x08\x12\'\n#ProgramStatusType_UnAgreeDisclaimer\x10\t\x12\x1b\n\x17ProgramStatusType_Ready\x10\n\x12!\n\x1dProgramStatusType_ForceLogout\x10\x0b\x12*\n&ProgramStatusType_DisclaimerPullFailed\x10\x0c\x42=\n\x13\x63om.futu.openapi.pbZ&github.com/futuopen/ftapi4go/pb/common') + serialized_pb=_b('\n\x0c\x43ommon.proto\x12\x06\x43ommon\",\n\x08PacketID\x12\x0e\n\x06\x63onnID\x18\x01 \x02(\x04\x12\x10\n\x08serialNo\x18\x02 \x02(\r\"L\n\rProgramStatus\x12\'\n\x04type\x18\x01 \x02(\x0e\x32\x19.Common.ProgramStatusType\x12\x12\n\nstrExtDesc\x18\x02 \x01(\t*\xb6\x01\n\x07RetType\x12\x13\n\x0fRetType_Succeed\x10\x00\x12\x1b\n\x0eRetType_Failed\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_TimeOut\x10\x9c\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1f\n\x12RetType_DisConnect\x10\xb8\xfe\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Unknown\x10\xf0\xfc\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Invalid\x10\x8c\xfc\xff\xff\xff\xff\xff\xff\xff\x01*\x83\x01\n\rPacketEncAlgo\x12\x1b\n\x17PacketEncAlgo_FTAES_ECB\x10\x00\x12\x1f\n\x12PacketEncAlgo_None\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x15PacketEncAlgo_AES_ECB\x10\x01\x12\x19\n\x15PacketEncAlgo_AES_CBC\x10\x02*4\n\x08ProtoFmt\x12\x15\n\x11ProtoFmt_Protobuf\x10\x00\x12\x11\n\rProtoFmt_Json\x10\x01*^\n\x0fUserAttribution\x12\x1b\n\x17UserAttribution_Unknown\x10\x00\x12\x16\n\x12UserAttribution_NN\x10\x01\x12\x16\n\x12UserAttribution_MM\x10\x02*\xf0\x03\n\x11ProgramStatusType\x12\x1a\n\x16ProgramStatusType_None\x10\x00\x12\x1c\n\x18ProgramStatusType_Loaded\x10\x01\x12\x1c\n\x18ProgramStatusType_Loging\x10\x02\x12\'\n#ProgramStatusType_NeedPicVerifyCode\x10\x03\x12)\n%ProgramStatusType_NeedPhoneVerifyCode\x10\x04\x12!\n\x1dProgramStatusType_LoginFailed\x10\x05\x12!\n\x1dProgramStatusType_ForceUpdate\x10\x06\x12*\n&ProgramStatusType_NessaryDataPreparing\x10\x07\x12(\n$ProgramStatusType_NessaryDataMissing\x10\x08\x12\'\n#ProgramStatusType_UnAgreeDisclaimer\x10\t\x12\x1b\n\x17ProgramStatusType_Ready\x10\n\x12!\n\x1dProgramStatusType_ForceLogout\x10\x0b\x12*\n&ProgramStatusType_DisclaimerPullFailed\x10\x0c\x42=\n\x13\x63om.futu.openapi.pbZ&github.com/futuopen/ftapi4go/pb/common') ) _RETTYPE = _descriptor.EnumDescriptor( @@ -116,6 +116,33 @@ _sym_db.RegisterEnumDescriptor(_PROTOFMT) ProtoFmt = enum_type_wrapper.EnumTypeWrapper(_PROTOFMT) +_USERATTRIBUTION = _descriptor.EnumDescriptor( + name='UserAttribution', + full_name='Common.UserAttribution', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UserAttribution_Unknown', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UserAttribution_NN', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UserAttribution_MM', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=521, + serialized_end=615, +) +_sym_db.RegisterEnumDescriptor(_USERATTRIBUTION) + +UserAttribution = enum_type_wrapper.EnumTypeWrapper(_USERATTRIBUTION) _PROGRAMSTATUSTYPE = _descriptor.EnumDescriptor( name='ProgramStatusType', full_name='Common.ProgramStatusType', @@ -177,8 +204,8 @@ ], containing_type=None, options=None, - serialized_start=522, - serialized_end=1018, + serialized_start=618, + serialized_end=1114, ) _sym_db.RegisterEnumDescriptor(_PROGRAMSTATUSTYPE) @@ -195,6 +222,9 @@ PacketEncAlgo_AES_CBC = 2 ProtoFmt_Protobuf = 0 ProtoFmt_Json = 1 +UserAttribution_Unknown = 0 +UserAttribution_NN = 1 +UserAttribution_MM = 2 ProgramStatusType_None = 0 ProgramStatusType_Loaded = 1 ProgramStatusType_Loging = 2 @@ -292,6 +322,7 @@ DESCRIPTOR.enum_types_by_name['RetType'] = _RETTYPE DESCRIPTOR.enum_types_by_name['PacketEncAlgo'] = _PACKETENCALGO DESCRIPTOR.enum_types_by_name['ProtoFmt'] = _PROTOFMT +DESCRIPTOR.enum_types_by_name['UserAttribution'] = _USERATTRIBUTION DESCRIPTOR.enum_types_by_name['ProgramStatusType'] = _PROGRAMSTATUSTYPE _sym_db.RegisterFileDescriptor(DESCRIPTOR) diff --git a/futu/common/pb/GetUserInfo.proto b/futu/common/pb/GetUserInfo.proto index 54d2dae..689e6d8 100644 --- a/futu/common/pb/GetUserInfo.proto +++ b/futu/common/pb/GetUserInfo.proto @@ -48,6 +48,8 @@ message S2C optional int32 historyKLQuota = 15; //历史K线额度 optional int32 usFutureQotRight = 16; //美股期货行情权限, Qot_Common.QotRight optional int32 usOptionQotRight = 17; //美股期货行情权限, Qot_Common.QotRight + optional int32 userAttribution = 19; //用户类型,牛牛用户或MooMoo用户 + optional string updateWhatsNew = 20; //升级提示 } message Request diff --git a/futu/common/pb/GetUserInfo_pb2.py b/futu/common/pb/GetUserInfo_pb2.py index 84729a8..d0342d9 100644 --- a/futu/common/pb/GetUserInfo_pb2.py +++ b/futu/common/pb/GetUserInfo_pb2.py @@ -21,7 +21,7 @@ name='GetUserInfo.proto', package='GetUserInfo', syntax='proto2', - serialized_pb=_b('\n\x11GetUserInfo.proto\x12\x0bGetUserInfo\x1a\x0c\x43ommon.proto\"\x13\n\x03\x43\x32S\x12\x0c\n\x04\x66lag\x18\x02 \x01(\x05\"\x92\x03\n\x03S2C\x12\x10\n\x08nickName\x18\x01 \x01(\t\x12\x11\n\tavatarUrl\x18\x02 \x01(\t\x12\x10\n\x08\x61piLevel\x18\x03 \x01(\t\x12\x12\n\nhkQotRight\x18\x04 \x01(\x05\x12\x12\n\nusQotRight\x18\x05 \x01(\x05\x12\x12\n\ncnQotRight\x18\x06 \x01(\x05\x12\x1d\n\x15isNeedAgreeDisclaimer\x18\x07 \x01(\x08\x12\x0e\n\x06userID\x18\x08 \x01(\x03\x12\x12\n\nupdateType\x18\t \x01(\x05\x12\x0e\n\x06webKey\x18\n \x01(\t\x12\x16\n\x0ewebJumpUrlHead\x18\x12 \x01(\t\x12\x18\n\x10hkOptionQotRight\x18\x0b \x01(\x05\x12\x1b\n\x13hasUSOptionQotRight\x18\x0c \x01(\x08\x12\x18\n\x10hkFutureQotRight\x18\r \x01(\x05\x12\x10\n\x08subQuota\x18\x0e \x01(\x05\x12\x16\n\x0ehistoryKLQuota\x18\x0f \x01(\x05\x12\x18\n\x10usFutureQotRight\x18\x10 \x01(\x05\x12\x18\n\x10usOptionQotRight\x18\x11 \x01(\x05\"(\n\x07Request\x12\x1d\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x10.GetUserInfo.C2S\"a\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12\x1d\n\x03s2c\x18\x04 \x01(\x0b\x32\x10.GetUserInfo.S2C*N\n\nUpdateType\x12\x13\n\x0fUpdateType_None\x10\x00\x12\x15\n\x11UpdateType_Advice\x10\x01\x12\x14\n\x10UpdateType_Force\x10\x02*\xae\x01\n\rUserInfoField\x12\x17\n\x13UserInfoField_Basic\x10\x01\x12\x15\n\x11UserInfoField_API\x10\x02\x12\x1a\n\x16UserInfoField_QotRight\x10\x04\x12\x1c\n\x18UserInfoField_Disclaimer\x10\x08\x12\x18\n\x14UserInfoField_Update\x10\x10\x12\x19\n\x14UserInfoField_WebKey\x10\x80\x10\x42\x42\n\x13\x63om.futu.openapi.pbZ+github.com/futuopen/ftapi4go/pb/getuserinfo') + serialized_pb=_b('\n\x11GetUserInfo.proto\x12\x0bGetUserInfo\x1a\x0c\x43ommon.proto\"\x13\n\x03\x43\x32S\x12\x0c\n\x04\x66lag\x18\x02 \x01(\x05\"\xc3\x03\n\x03S2C\x12\x10\n\x08nickName\x18\x01 \x01(\t\x12\x11\n\tavatarUrl\x18\x02 \x01(\t\x12\x10\n\x08\x61piLevel\x18\x03 \x01(\t\x12\x12\n\nhkQotRight\x18\x04 \x01(\x05\x12\x12\n\nusQotRight\x18\x05 \x01(\x05\x12\x12\n\ncnQotRight\x18\x06 \x01(\x05\x12\x1d\n\x15isNeedAgreeDisclaimer\x18\x07 \x01(\x08\x12\x0e\n\x06userID\x18\x08 \x01(\x03\x12\x12\n\nupdateType\x18\t \x01(\x05\x12\x0e\n\x06webKey\x18\n \x01(\t\x12\x16\n\x0ewebJumpUrlHead\x18\x12 \x01(\t\x12\x18\n\x10hkOptionQotRight\x18\x0b \x01(\x05\x12\x1b\n\x13hasUSOptionQotRight\x18\x0c \x01(\x08\x12\x18\n\x10hkFutureQotRight\x18\r \x01(\x05\x12\x10\n\x08subQuota\x18\x0e \x01(\x05\x12\x16\n\x0ehistoryKLQuota\x18\x0f \x01(\x05\x12\x18\n\x10usFutureQotRight\x18\x10 \x01(\x05\x12\x18\n\x10usOptionQotRight\x18\x11 \x01(\x05\x12\x17\n\x0fuserAttribution\x18\x13 \x01(\x05\x12\x16\n\x0eupdateWhatsNew\x18\x14 \x01(\t\"(\n\x07Request\x12\x1d\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x10.GetUserInfo.C2S\"a\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12\x1d\n\x03s2c\x18\x04 \x01(\x0b\x32\x10.GetUserInfo.S2C*N\n\nUpdateType\x12\x13\n\x0fUpdateType_None\x10\x00\x12\x15\n\x11UpdateType_Advice\x10\x01\x12\x14\n\x10UpdateType_Force\x10\x02*\xae\x01\n\rUserInfoField\x12\x17\n\x13UserInfoField_Basic\x10\x01\x12\x15\n\x11UserInfoField_API\x10\x02\x12\x1a\n\x16UserInfoField_QotRight\x10\x04\x12\x1c\n\x18UserInfoField_Disclaimer\x10\x08\x12\x18\n\x14UserInfoField_Update\x10\x10\x12\x19\n\x14UserInfoField_WebKey\x10\x80\x10\x42\x42\n\x13\x63om.futu.openapi.pbZ+github.com/futuopen/ftapi4go/pb/getuserinfo') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -46,8 +46,8 @@ ], containing_type=None, options=None, - serialized_start=615, - serialized_end=693, + serialized_start=664, + serialized_end=742, ) _sym_db.RegisterEnumDescriptor(_UPDATETYPE) @@ -85,8 +85,8 @@ ], containing_type=None, options=None, - serialized_start=696, - serialized_end=870, + serialized_start=745, + serialized_end=919, ) _sym_db.RegisterEnumDescriptor(_USERINFOFIELD) @@ -267,6 +267,20 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='userAttribution', full_name='GetUserInfo.S2C.userAttribution', index=18, + number=19, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='updateWhatsNew', full_name='GetUserInfo.S2C.updateWhatsNew', index=19, + number=20, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -280,7 +294,7 @@ oneofs=[ ], serialized_start=70, - serialized_end=472, + serialized_end=521, ) @@ -310,8 +324,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=474, - serialized_end=514, + serialized_start=523, + serialized_end=563, ) @@ -362,8 +376,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=516, - serialized_end=613, + serialized_start=565, + serialized_end=662, ) _REQUEST.fields_by_name['c2s'].message_type = _C2S diff --git a/futu/common/pb/InitConnect.proto b/futu/common/pb/InitConnect.proto index 682df0d..da65157 100644 --- a/futu/common/pb/InitConnect.proto +++ b/futu/common/pb/InitConnect.proto @@ -25,6 +25,7 @@ message S2C required string connAESKey = 4; //此连接后续AES加密通信的Key,固定为16字节长字符串 required int32 keepAliveInterval = 5; //心跳保活间隔 optional string aesCBCiv = 6; //AES加密通信CBC加密模式的iv,固定为16字节长字符串 + optional int32 userAttribution = 7; //用户类型,牛牛用户或MooMoo用户 } message Request diff --git a/futu/common/pb/InitConnect_pb2.py b/futu/common/pb/InitConnect_pb2.py index 468655f..3ba58d1 100644 --- a/futu/common/pb/InitConnect_pb2.py +++ b/futu/common/pb/InitConnect_pb2.py @@ -20,7 +20,7 @@ name='InitConnect.proto', package='InitConnect', syntax='proto2', - serialized_pb=_b('\n\x11InitConnect.proto\x12\x0bInitConnect\x1a\x0c\x43ommon.proto\"\x88\x01\n\x03\x43\x32S\x12\x11\n\tclientVer\x18\x01 \x02(\x05\x12\x10\n\x08\x63lientID\x18\x02 \x02(\t\x12\x12\n\nrecvNotify\x18\x03 \x01(\x08\x12\x15\n\rpacketEncAlgo\x18\x04 \x01(\x05\x12\x14\n\x0cpushProtoFmt\x18\x05 \x01(\x05\x12\x1b\n\x13programmingLanguage\x18\x06 \x01(\t\"~\n\x03S2C\x12\x11\n\tserverVer\x18\x01 \x02(\x05\x12\x13\n\x0bloginUserID\x18\x02 \x02(\x04\x12\x0e\n\x06\x63onnID\x18\x03 \x02(\x04\x12\x12\n\nconnAESKey\x18\x04 \x02(\t\x12\x19\n\x11keepAliveInterval\x18\x05 \x02(\x05\x12\x10\n\x08\x61\x65sCBCiv\x18\x06 \x01(\t\"(\n\x07Request\x12\x1d\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x10.InitConnect.C2S\"a\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12\x1d\n\x03s2c\x18\x04 \x01(\x0b\x32\x10.InitConnect.S2CBB\n\x13\x63om.futu.openapi.pbZ+github.com/futuopen/ftapi4go/pb/initconnect') + serialized_pb=_b('\n\x11InitConnect.proto\x12\x0bInitConnect\x1a\x0c\x43ommon.proto\"\x88\x01\n\x03\x43\x32S\x12\x11\n\tclientVer\x18\x01 \x02(\x05\x12\x10\n\x08\x63lientID\x18\x02 \x02(\t\x12\x12\n\nrecvNotify\x18\x03 \x01(\x08\x12\x15\n\rpacketEncAlgo\x18\x04 \x01(\x05\x12\x14\n\x0cpushProtoFmt\x18\x05 \x01(\x05\x12\x1b\n\x13programmingLanguage\x18\x06 \x01(\t\"\x97\x01\n\x03S2C\x12\x11\n\tserverVer\x18\x01 \x02(\x05\x12\x13\n\x0bloginUserID\x18\x02 \x02(\x04\x12\x0e\n\x06\x63onnID\x18\x03 \x02(\x04\x12\x12\n\nconnAESKey\x18\x04 \x02(\t\x12\x19\n\x11keepAliveInterval\x18\x05 \x02(\x05\x12\x10\n\x08\x61\x65sCBCiv\x18\x06 \x01(\t\x12\x17\n\x0fuserAttribution\x18\x07 \x01(\x05\"(\n\x07Request\x12\x1d\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x10.InitConnect.C2S\"a\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12\x1d\n\x03s2c\x18\x04 \x01(\x0b\x32\x10.InitConnect.S2CBB\n\x13\x63om.futu.openapi.pbZ+github.com/futuopen/ftapi4go/pb/initconnect') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -142,6 +142,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='userAttribution', full_name='InitConnect.S2C.userAttribution', index=6, + number=7, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -154,8 +161,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=187, - serialized_end=313, + serialized_start=188, + serialized_end=339, ) @@ -185,8 +192,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=315, - serialized_end=355, + serialized_start=341, + serialized_end=381, ) @@ -237,8 +244,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=357, - serialized_end=454, + serialized_start=383, + serialized_end=480, ) _REQUEST.fields_by_name['c2s'].message_type = _C2S diff --git a/futu/common/pb/Qot_Sub.proto b/futu/common/pb/Qot_Sub.proto index 504e06d..5acf24f 100644 --- a/futu/common/pb/Qot_Sub.proto +++ b/futu/common/pb/Qot_Sub.proto @@ -16,7 +16,7 @@ message C2S optional bool isFirstPush = 6; //注册后如果本地已有数据是否首推一次已存在数据,该参数不指定则默认true optional bool isUnsubAll = 7; //当被设置为True时忽略其他参数,取消当前连接的所有订阅,并且反注册推送。 optional bool isSubOrderBookDetail = 8; //订阅摆盘可用,是否订阅摆盘明细,仅支持SF行情,该参数不指定则默认false - optional bool extendedTime = 9; // 是否允许美股盘前盘后数据(仅用于订阅美股的实时K线、实时分时) + optional bool extendedTime = 9; // 是否允许美股盘前盘后数据(仅用于订阅美股的实时K线、实时分时、实时逐笔) } message S2C diff --git a/futu/common/pb/Trd_Common.proto b/futu/common/pb/Trd_Common.proto index 7dc7093..d25eb6d 100644 --- a/futu/common/pb/Trd_Common.proto +++ b/futu/common/pb/Trd_Common.proto @@ -49,7 +49,7 @@ enum OrderType { OrderType_Unknown = 0; //未知类型 OrderType_Normal = 1; //普通订单(港股的增强限价单、港股期权的限价单,A股限价委托、美股的限价单,港股期货的限价单,CME期货的限价单)。目前港股期权只能指定此订单类型。 - OrderType_Market = 2; //市价订单(目前支持美股、港股正股、窝轮、牛熊、界内证) + OrderType_Market = 2; //市价订单(目前支持美股、港股正股、涡轮、牛熊、界内证) OrderType_AbsoluteLimit = 5; //绝对限价订单(目前仅港股),只有价格完全匹配才成交,否则下单失败,比如你下价格为5元的买单,卖单价格必须也要是5元才能成交,低于5元也不能成交,下单失败。卖出同理 OrderType_Auction = 6; //竞价订单(目前仅港股),仅港股早盘竞价和收盘竞价有效,A股的早盘竞价订单类型不变还是OrderType_Normal @@ -151,6 +151,14 @@ enum SecurityFirm SecurityFirm_FutuInc = 2; //富途Inc } +//模拟交易账户类型 +enum SimAccType +{ + SimAccType_Unknown = 0; //未知 + SimAccType_Stock = 1; //股票模拟账户(仅用于交易证券类产品,不支持交易期权) + SimAccType_Option = 2; //期权模拟账户(仅用于交易期权,不支持交易股票证券类产品) +} + //账户现金信息,目前仅用于期货账户 message AccCashInfo { diff --git a/futu/common/pb/Trd_Common_pb2.py b/futu/common/pb/Trd_Common_pb2.py index 31b3ed7..957b1a6 100644 --- a/futu/common/pb/Trd_Common_pb2.py +++ b/futu/common/pb/Trd_Common_pb2.py @@ -21,7 +21,7 @@ name='Trd_Common.proto', package='Trd_Common', syntax='proto2', - serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"z\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\"\xd5\x02\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\x80\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') + serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xd5\x02\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\x80\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -42,8 +42,8 @@ ], containing_type=None, options=None, - serialized_start=1947, - serialized_end=1993, + serialized_start=1968, + serialized_end=2014, ) _sym_db.RegisterEnumDescriptor(_TRDENV) @@ -81,8 +81,8 @@ ], containing_type=None, options=None, - serialized_start=1996, - serialized_end=2127, + serialized_start=2017, + serialized_end=2148, ) _sym_db.RegisterEnumDescriptor(_TRDMARKET) @@ -116,8 +116,8 @@ ], containing_type=None, options=None, - serialized_start=2130, - serialized_end=2260, + serialized_start=2151, + serialized_end=2281, ) _sym_db.RegisterEnumDescriptor(_TRDSECMARKET) @@ -151,8 +151,8 @@ ], containing_type=None, options=None, - serialized_start=2262, - serialized_end=2371, + serialized_start=2283, + serialized_end=2392, ) _sym_db.RegisterEnumDescriptor(_TRDSIDE) @@ -198,8 +198,8 @@ ], containing_type=None, options=None, - serialized_start=2374, - serialized_end=2592, + serialized_start=2395, + serialized_end=2613, ) _sym_db.RegisterEnumDescriptor(_ORDERTYPE) @@ -281,8 +281,8 @@ ], containing_type=None, options=None, - serialized_start=2595, - serialized_end=3103, + serialized_start=2616, + serialized_end=3124, ) _sym_db.RegisterEnumDescriptor(_ORDERSTATUS) @@ -308,8 +308,8 @@ ], containing_type=None, options=None, - serialized_start=3105, - serialized_end=3206, + serialized_start=3126, + serialized_end=3227, ) _sym_db.RegisterEnumDescriptor(_ORDERFILLSTATUS) @@ -335,8 +335,8 @@ ], containing_type=None, options=None, - serialized_start=3208, - serialized_end=3304, + serialized_start=3229, + serialized_end=3325, ) _sym_db.RegisterEnumDescriptor(_POSITIONSIDE) @@ -374,8 +374,8 @@ ], containing_type=None, options=None, - serialized_start=3307, - serialized_end=3480, + serialized_start=3328, + serialized_end=3501, ) _sym_db.RegisterEnumDescriptor(_MODIFYORDEROP) @@ -401,8 +401,8 @@ ], containing_type=None, options=None, - serialized_start=3482, - serialized_end=3562, + serialized_start=3503, + serialized_end=3583, ) _sym_db.RegisterEnumDescriptor(_TRDACCTYPE) @@ -432,8 +432,8 @@ ], containing_type=None, options=None, - serialized_start=3564, - serialized_end=3650, + serialized_start=3585, + serialized_end=3671, ) _sym_db.RegisterEnumDescriptor(_CURRENCY) @@ -471,8 +471,8 @@ ], containing_type=None, options=None, - serialized_start=3653, - serialized_end=3835, + serialized_start=3674, + serialized_end=3856, ) _sym_db.RegisterEnumDescriptor(_CLTRISKLEVEL) @@ -494,8 +494,8 @@ ], containing_type=None, options=None, - serialized_start=3837, - serialized_end=3892, + serialized_start=3858, + serialized_end=3913, ) _sym_db.RegisterEnumDescriptor(_TIMEINFORCE) @@ -521,12 +521,39 @@ ], containing_type=None, options=None, - serialized_start=3894, - serialized_end=3993, + serialized_start=3915, + serialized_end=4014, ) _sym_db.RegisterEnumDescriptor(_SECURITYFIRM) SecurityFirm = enum_type_wrapper.EnumTypeWrapper(_SECURITYFIRM) +_SIMACCTYPE = _descriptor.EnumDescriptor( + name='SimAccType', + full_name='Trd_Common.SimAccType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='SimAccType_Unknown', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SimAccType_Stock', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SimAccType_Option', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=4016, + serialized_end=4097, +) +_sym_db.RegisterEnumDescriptor(_SIMACCTYPE) + +SimAccType = enum_type_wrapper.EnumTypeWrapper(_SIMACCTYPE) TrdEnv_Simulate = 0 TrdEnv_Real = 1 TrdMarket_Unknown = 0 @@ -600,6 +627,9 @@ SecurityFirm_Unknown = 0 SecurityFirm_FutuSecurities = 1 SecurityFirm_FutuInc = 2 +SimAccType_Unknown = 0 +SimAccType_Stock = 1 +SimAccType_Option = 2 @@ -742,6 +772,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='simAccType', full_name='Trd_Common.TrdAcc.simAccType', index=6, + number=7, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -754,8 +791,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=182, - serialized_end=304, + serialized_start=183, + serialized_end=325, ) @@ -883,8 +920,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=307, - serialized_end=648, + serialized_start=328, + serialized_end=669, ) @@ -1047,8 +1084,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=651, - serialized_end=1019, + serialized_start=672, + serialized_end=1040, ) @@ -1211,8 +1248,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1022, - serialized_end=1407, + serialized_start=1043, + serialized_end=1428, ) @@ -1347,8 +1384,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1410, - serialized_end=1721, + serialized_start=1431, + serialized_end=1742, ) @@ -1406,8 +1443,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1724, - serialized_end=1852, + serialized_start=1745, + serialized_end=1873, ) @@ -1458,8 +1495,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1854, - serialized_end=1945, + serialized_start=1875, + serialized_end=1966, ) _FUNDS.fields_by_name['cashInfoList'].message_type = _ACCCASHINFO @@ -1486,6 +1523,7 @@ DESCRIPTOR.enum_types_by_name['CltRiskLevel'] = _CLTRISKLEVEL DESCRIPTOR.enum_types_by_name['TimeInForce'] = _TIMEINFORCE DESCRIPTOR.enum_types_by_name['SecurityFirm'] = _SECURITYFIRM +DESCRIPTOR.enum_types_by_name['SimAccType'] = _SIMACCTYPE _sym_db.RegisterFileDescriptor(DESCRIPTOR) AccCashInfo = _reflection.GeneratedProtocolMessageType('AccCashInfo', (_message.Message,), dict( diff --git a/futu/trade/open_trade_context.py b/futu/trade/open_trade_context.py index 4f85aa6..de0db6d 100644 --- a/futu/trade/open_trade_context.py +++ b/futu/trade/open_trade_context.py @@ -70,15 +70,16 @@ def get_acc_list(self): for record in acc_list: trdMkt_list = record["trdMarket_list"] if self.__trd_mkt in trdMkt_list: - if record['trd_env'] == TrdEnv.SIMULATE or record['security_firm'] == NoneDataValue or record['security_firm'] == self.__security_firm: + if record['trd_env'] == TrdEnv.SIMULATE or record['security_firm'] == NoneDataValue or record['security_firm'] == self.__security_firm: self.__last_acc_list.append({ "trd_env": record["trd_env"], "acc_id": record["acc_id"], "acc_type": record["acc_type"], "card_num": record["card_num"], - "security_firm": record["security_firm"]}) + "security_firm": record["security_firm"], + "sim_acc_type": record["sim_acc_type"]}) - col_list = ["acc_id", "trd_env", "acc_type", "card_num", "security_firm"] + col_list = ["acc_id", "trd_env", "acc_type", "card_num", "security_firm", "sim_acc_type"] acc_table = pd.DataFrame(copy(self.__last_acc_list), columns=col_list) diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index 3647ed6..e40e452 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -46,10 +46,11 @@ def unpack_rsp(cls, rsp_pb): acc_list = [{ 'acc_id': record.accID, 'trd_env': TrdEnv.to_string2(record.trdEnv), - 'trdMarket_list': [ TrdMarket.to_string2(trdMkt) for trdMkt in record.trdMarketAuthList], + 'trdMarket_list': [TrdMarket.to_string2(trdMkt) for trdMkt in record.trdMarketAuthList], 'acc_type': TrdAccType.to_string2(record.accType) if record.HasField("accType") else TrdAccType.NONE, 'card_num': record.cardNum if record.HasField("cardNum") else "N/A", - 'security_firm': SecurityFirm.to_string2(record.securityFirm) if record.HasField('securityFirm') else SecurityFirm.NONE + 'security_firm': SecurityFirm.to_string2(record.securityFirm) if record.HasField('securityFirm') else SecurityFirm.NONE, + 'sim_acc_type': SimAccType.to_string2(record.simAccType) if record.HasField('simAccType') else SimAccType.NONE } for record in raw_acc_list] return RET_OK, "", acc_list From c169315140a053c5a2c381c78afbece3163c5d86 Mon Sep 17 00:00:00 2001 From: alexqli Date: Thu, 24 Dec 2020 11:46:46 +0800 Subject: [PATCH 08/36] =?UTF-8?q?=E4=BA=A4=E6=98=93=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E8=B5=84=E9=87=91=E5=A2=9E=E5=8A=A0=E6=96=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 26 ++++ futu/common/pb/Trd_Common_pb2.py | 201 ++++++++++++++++++++++++------- futu/trade/open_trade_context.py | 8 +- futu/trade/trade_query.py | 11 +- 4 files changed, 200 insertions(+), 46 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 8db4a43..82e09a7 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -2251,6 +2251,32 @@ def load_dic(self): self.OPT_DANGER: Trd_Common_pb2.CltRiskLevel_OptDanger } + +class CltRiskStatus(FtEnum): + NONE = 'N/A' + LEVEL1 = 'LEVEL1' + LEVEL2 = 'LEVEL2' + LEVEL3 = 'LEVEL3' + LEVEL4 = 'LEVEL4' + LEVEL5 = 'LEVEL5' + LEVEL6 = 'LEVEL6' + LEVEL7 = 'LEVEL7' + LEVEL8 = 'LEVEL8' + LEVEL9 = 'LEVEL9' + + def load_dic(self): + return { + self.LEVEL1: Trd_Common_pb2.CltRiskStatus_Level1, + self.LEVEL2: Trd_Common_pb2.CltRiskStatus_Level2, + self.LEVEL3: Trd_Common_pb2.CltRiskStatus_Level3, + self.LEVEL4: Trd_Common_pb2.CltRiskStatus_Level4, + self.LEVEL5: Trd_Common_pb2.CltRiskStatus_Level5, + self.LEVEL6: Trd_Common_pb2.CltRiskStatus_Level6, + self.LEVEL7: Trd_Common_pb2.CltRiskStatus_Level7, + self.LEVEL8: Trd_Common_pb2.CltRiskStatus_Level8, + self.LEVEL9: Trd_Common_pb2.CltRiskStatus_Level9, + } + class TradeDateMarket(FtEnum): NONE = 'N/A' # 未知 HK = 'HK' # 港股市场 diff --git a/futu/common/pb/Trd_Common_pb2.py b/futu/common/pb/Trd_Common_pb2.py index 957b1a6..7bccc47 100644 --- a/futu/common/pb/Trd_Common_pb2.py +++ b/futu/common/pb/Trd_Common_pb2.py @@ -21,7 +21,7 @@ name='Trd_Common.proto', package='Trd_Common', syntax='proto2', - serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xd5\x02\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\x80\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') + serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\x80\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\xf9\x01\n\rCltRiskStatus\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\x08\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -42,8 +42,8 @@ ], containing_type=None, options=None, - serialized_start=1968, - serialized_end=2014, + serialized_start=2137, + serialized_end=2183, ) _sym_db.RegisterEnumDescriptor(_TRDENV) @@ -81,8 +81,8 @@ ], containing_type=None, options=None, - serialized_start=2017, - serialized_end=2148, + serialized_start=2186, + serialized_end=2317, ) _sym_db.RegisterEnumDescriptor(_TRDMARKET) @@ -116,8 +116,8 @@ ], containing_type=None, options=None, - serialized_start=2151, - serialized_end=2281, + serialized_start=2320, + serialized_end=2450, ) _sym_db.RegisterEnumDescriptor(_TRDSECMARKET) @@ -151,8 +151,8 @@ ], containing_type=None, options=None, - serialized_start=2283, - serialized_end=2392, + serialized_start=2452, + serialized_end=2561, ) _sym_db.RegisterEnumDescriptor(_TRDSIDE) @@ -198,8 +198,8 @@ ], containing_type=None, options=None, - serialized_start=2395, - serialized_end=2613, + serialized_start=2564, + serialized_end=2782, ) _sym_db.RegisterEnumDescriptor(_ORDERTYPE) @@ -281,8 +281,8 @@ ], containing_type=None, options=None, - serialized_start=2616, - serialized_end=3124, + serialized_start=2785, + serialized_end=3293, ) _sym_db.RegisterEnumDescriptor(_ORDERSTATUS) @@ -308,8 +308,8 @@ ], containing_type=None, options=None, - serialized_start=3126, - serialized_end=3227, + serialized_start=3295, + serialized_end=3396, ) _sym_db.RegisterEnumDescriptor(_ORDERFILLSTATUS) @@ -335,8 +335,8 @@ ], containing_type=None, options=None, - serialized_start=3229, - serialized_end=3325, + serialized_start=3398, + serialized_end=3494, ) _sym_db.RegisterEnumDescriptor(_POSITIONSIDE) @@ -374,8 +374,8 @@ ], containing_type=None, options=None, - serialized_start=3328, - serialized_end=3501, + serialized_start=3497, + serialized_end=3670, ) _sym_db.RegisterEnumDescriptor(_MODIFYORDEROP) @@ -401,8 +401,8 @@ ], containing_type=None, options=None, - serialized_start=3503, - serialized_end=3583, + serialized_start=3672, + serialized_end=3752, ) _sym_db.RegisterEnumDescriptor(_TRDACCTYPE) @@ -432,8 +432,8 @@ ], containing_type=None, options=None, - serialized_start=3585, - serialized_end=3671, + serialized_start=3754, + serialized_end=3840, ) _sym_db.RegisterEnumDescriptor(_CURRENCY) @@ -471,8 +471,8 @@ ], containing_type=None, options=None, - serialized_start=3674, - serialized_end=3856, + serialized_start=3843, + serialized_end=4025, ) _sym_db.RegisterEnumDescriptor(_CLTRISKLEVEL) @@ -494,8 +494,8 @@ ], containing_type=None, options=None, - serialized_start=3858, - serialized_end=3913, + serialized_start=4027, + serialized_end=4082, ) _sym_db.RegisterEnumDescriptor(_TIMEINFORCE) @@ -521,8 +521,8 @@ ], containing_type=None, options=None, - serialized_start=3915, - serialized_end=4014, + serialized_start=4084, + serialized_end=4183, ) _sym_db.RegisterEnumDescriptor(_SECURITYFIRM) @@ -548,12 +548,63 @@ ], containing_type=None, options=None, - serialized_start=4016, - serialized_end=4097, + serialized_start=4185, + serialized_end=4266, ) _sym_db.RegisterEnumDescriptor(_SIMACCTYPE) SimAccType = enum_type_wrapper.EnumTypeWrapper(_SIMACCTYPE) +_CLTRISKSTATUS = _descriptor.EnumDescriptor( + name='CltRiskStatus', + full_name='Trd_Common.CltRiskStatus', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level1', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level2', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level3', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level4', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level5', index=4, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level6', index=5, number=5, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level7', index=6, number=6, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level8', index=7, number=7, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level9', index=8, number=8, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=4269, + serialized_end=4518, +) +_sym_db.RegisterEnumDescriptor(_CLTRISKSTATUS) + +CltRiskStatus = enum_type_wrapper.EnumTypeWrapper(_CLTRISKSTATUS) TrdEnv_Simulate = 0 TrdEnv_Real = 1 TrdMarket_Unknown = 0 @@ -630,6 +681,15 @@ SimAccType_Unknown = 0 SimAccType_Stock = 1 SimAccType_Option = 2 +CltRiskStatus_Level1 = 0 +CltRiskStatus_Level2 = 1 +CltRiskStatus_Level3 = 2 +CltRiskStatus_Level4 = 3 +CltRiskStatus_Level5 = 4 +CltRiskStatus_Level6 = 5 +CltRiskStatus_Level7 = 6 +CltRiskStatus_Level8 = 7 +CltRiskStatus_Level9 = 8 @@ -908,6 +968,62 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='maxPowerShort', full_name='Trd_Common.Funds.maxPowerShort', index=15, + number=16, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='netCashPower', full_name='Trd_Common.Funds.netCashPower', index=16, + number=17, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='longMv', full_name='Trd_Common.Funds.longMv', index=17, + number=18, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='shortMv', full_name='Trd_Common.Funds.shortMv', index=18, + number=19, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='pendingAsset', full_name='Trd_Common.Funds.pendingAsset', index=19, + number=20, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='maxWithdrawal', full_name='Trd_Common.Funds.maxWithdrawal', index=20, + number=21, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='riskStatus', full_name='Trd_Common.Funds.riskStatus', index=21, + number=22, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='marginCallMargin', full_name='Trd_Common.Funds.marginCallMargin', index=22, + number=23, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -921,7 +1037,7 @@ oneofs=[ ], serialized_start=328, - serialized_end=669, + serialized_end=838, ) @@ -1084,8 +1200,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=672, - serialized_end=1040, + serialized_start=841, + serialized_end=1209, ) @@ -1248,8 +1364,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1043, - serialized_end=1428, + serialized_start=1212, + serialized_end=1597, ) @@ -1384,8 +1500,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1431, - serialized_end=1742, + serialized_start=1600, + serialized_end=1911, ) @@ -1443,8 +1559,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1745, - serialized_end=1873, + serialized_start=1914, + serialized_end=2042, ) @@ -1495,8 +1611,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1875, - serialized_end=1966, + serialized_start=2044, + serialized_end=2135, ) _FUNDS.fields_by_name['cashInfoList'].message_type = _ACCCASHINFO @@ -1524,6 +1640,7 @@ DESCRIPTOR.enum_types_by_name['TimeInForce'] = _TIMEINFORCE DESCRIPTOR.enum_types_by_name['SecurityFirm'] = _SECURITYFIRM DESCRIPTOR.enum_types_by_name['SimAccType'] = _SIMACCTYPE +DESCRIPTOR.enum_types_by_name['CltRiskStatus'] = _CLTRISKSTATUS _sym_db.RegisterFileDescriptor(DESCRIPTOR) AccCashInfo = _reflection.GeneratedProtocolMessageType('AccCashInfo', (_message.Message,), dict( diff --git a/futu/trade/open_trade_context.py b/futu/trade/open_trade_context.py index de0db6d..07de47e 100644 --- a/futu/trade/open_trade_context.py +++ b/futu/trade/open_trade_context.py @@ -284,9 +284,11 @@ def accinfo_query(self, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, refresh_cach return RET_ERROR, msg col_list = [ - 'power', 'total_assets', 'cash', 'market_val', 'frozen_cash', 'avl_withdrawal_cash', 'currency', - 'available_funds', 'unrealized_pl', 'realized_pl', 'risk_level', 'initial_margin', 'maintenance_margin', - 'hk_cash', 'hk_avl_withdrawal_cash', 'us_cash', 'us_avl_withdrawal_cash' + 'power', 'max_power_short', 'net_cash_power', 'total_assets', 'cash', 'market_val', 'long_mv', 'short_mv', + 'pending_asset', 'interest_charged_amount', 'frozen_cash', 'avl_withdrawal_cash', 'max_withdrawal', 'currency', + 'available_funds', 'unrealized_pl', 'realized_pl', 'risk_level', 'risk_status', 'initial_margin', + 'margin_call_margin', 'maintenance_margin', 'hk_cash', 'hk_avl_withdrawal_cash', 'us_cash', + 'us_avl_withdrawal_cash' ] accinfo_frame_table = pd.DataFrame(accinfo_list, columns=col_list) diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index e40e452..5e28466 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -132,17 +132,26 @@ def unpack_rsp(cls, rsp_pb): raw_funds = rsp_pb.s2c.funds accinfo_list = [{ 'power': raw_funds.power, + 'max_power_short': raw_funds.maxPowerShort if raw_funds.HasField('maxPowerShort') else NoneDataValue, + 'net_cash_power': raw_funds.netCashPower if raw_funds.HasField('netCashPower') else NoneDataValue, 'total_assets': raw_funds.totalAssets, 'cash': raw_funds.cash, 'market_val': raw_funds.marketVal, + 'long_mv': raw_funds.longMv if raw_funds.HasField('longMv') else NoneDataValue, + 'short_mv': raw_funds.shortMv if raw_funds.HasField('shortMv') else NoneDataValue, + 'pending_asset': raw_funds.pendingAsset if raw_funds.HasField('pendingAsset') else NoneDataValue, + 'interest_charged_amount': raw_funds.debtCash if raw_funds.HasField('debtCash') else NoneDataValue, 'frozen_cash': raw_funds.frozenCash, - 'avl_withdrawal_cash': raw_funds.avlWithdrawalCash, + 'avl_withdrawal_cash': raw_funds.avlWithdrawalCash if raw_funds.HasField('avlWithdrawalCash') else NoneDataValue, + 'max_withdrawal': raw_funds.maxWithdrawal if raw_funds.HasField('maxWithdrawal') else NoneDataValue, 'currency': Currency.to_string2(raw_funds.currency) if raw_funds.HasField('currency') else Currency.NONE, 'available_funds': raw_funds.availableFunds if raw_funds.HasField('availableFunds') else NoneDataValue, 'unrealized_pl': raw_funds.unrealizedPL if raw_funds.HasField('unrealizedPL') else NoneDataValue, 'realized_pl': raw_funds.realizedPL if raw_funds.HasField('realizedPL') else NoneDataValue, 'risk_level': CltRiskLevel.to_string2(raw_funds.riskLevel) if raw_funds.HasField('riskLevel') else CltRiskLevel.NONE, + 'risk_status': CltRiskStatus.to_string2(raw_funds.riskStatus) if raw_funds.HasField('riskStatus') else CltRiskStatus.NONE, 'initial_margin': raw_funds.initialMargin if raw_funds.HasField('initialMargin') else NoneDataValue, + 'margin_call_margin': raw_funds.marginCallMargin if raw_funds.HasField('marginCallMargin') else NoneDataValue, 'maintenance_margin': raw_funds.maintenanceMargin if raw_funds.HasField('maintenanceMargin') else NoneDataValue, 'hk_cash': NoneDataValue, 'hk_avl_withdrawal_cash': NoneDataValue, From 5f5c2162fc4ca7b070dc4a7569e92e13be726d6f Mon Sep 17 00:00:00 2001 From: alexqli Date: Fri, 25 Dec 2020 14:42:24 +0800 Subject: [PATCH 09/36] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E5=8F=AF=E4=B9=B0=E5=8D=96=E5=A2=9E=E5=8A=A0=E6=9C=9F=E8=B4=A7?= =?UTF-8?q?=E5=92=8C=E6=9C=9F=E6=9D=83=E5=88=9D=E5=A7=8B=E4=BF=9D=E8=AF=81?= =?UTF-8?q?=E9=87=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/pb/Trd_Common_pb2.py | 86 +++++++++++++++++++------------- futu/trade/open_trade_context.py | 3 +- futu/trade/trade_query.py | 4 +- 3 files changed, 55 insertions(+), 38 deletions(-) diff --git a/futu/common/pb/Trd_Common_pb2.py b/futu/common/pb/Trd_Common_pb2.py index 7bccc47..295cb53 100644 --- a/futu/common/pb/Trd_Common_pb2.py +++ b/futu/common/pb/Trd_Common_pb2.py @@ -21,7 +21,7 @@ name='Trd_Common.proto', package='Trd_Common', syntax='proto2', - serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\x80\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\xf9\x01\n\rCltRiskStatus\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\x08\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') + serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\xb1\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\x12\x16\n\x0elongRequiredIM\x18\x06 \x01(\x01\x12\x17\n\x0fshortRequiredIM\x18\x07 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\xf9\x01\n\rCltRiskStatus\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\x08\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -42,8 +42,8 @@ ], containing_type=None, options=None, - serialized_start=2137, - serialized_end=2183, + serialized_start=2186, + serialized_end=2232, ) _sym_db.RegisterEnumDescriptor(_TRDENV) @@ -81,8 +81,8 @@ ], containing_type=None, options=None, - serialized_start=2186, - serialized_end=2317, + serialized_start=2235, + serialized_end=2366, ) _sym_db.RegisterEnumDescriptor(_TRDMARKET) @@ -116,8 +116,8 @@ ], containing_type=None, options=None, - serialized_start=2320, - serialized_end=2450, + serialized_start=2369, + serialized_end=2499, ) _sym_db.RegisterEnumDescriptor(_TRDSECMARKET) @@ -151,8 +151,8 @@ ], containing_type=None, options=None, - serialized_start=2452, - serialized_end=2561, + serialized_start=2501, + serialized_end=2610, ) _sym_db.RegisterEnumDescriptor(_TRDSIDE) @@ -198,8 +198,8 @@ ], containing_type=None, options=None, - serialized_start=2564, - serialized_end=2782, + serialized_start=2613, + serialized_end=2831, ) _sym_db.RegisterEnumDescriptor(_ORDERTYPE) @@ -281,8 +281,8 @@ ], containing_type=None, options=None, - serialized_start=2785, - serialized_end=3293, + serialized_start=2834, + serialized_end=3342, ) _sym_db.RegisterEnumDescriptor(_ORDERSTATUS) @@ -308,8 +308,8 @@ ], containing_type=None, options=None, - serialized_start=3295, - serialized_end=3396, + serialized_start=3344, + serialized_end=3445, ) _sym_db.RegisterEnumDescriptor(_ORDERFILLSTATUS) @@ -335,8 +335,8 @@ ], containing_type=None, options=None, - serialized_start=3398, - serialized_end=3494, + serialized_start=3447, + serialized_end=3543, ) _sym_db.RegisterEnumDescriptor(_POSITIONSIDE) @@ -374,8 +374,8 @@ ], containing_type=None, options=None, - serialized_start=3497, - serialized_end=3670, + serialized_start=3546, + serialized_end=3719, ) _sym_db.RegisterEnumDescriptor(_MODIFYORDEROP) @@ -401,8 +401,8 @@ ], containing_type=None, options=None, - serialized_start=3672, - serialized_end=3752, + serialized_start=3721, + serialized_end=3801, ) _sym_db.RegisterEnumDescriptor(_TRDACCTYPE) @@ -432,8 +432,8 @@ ], containing_type=None, options=None, - serialized_start=3754, - serialized_end=3840, + serialized_start=3803, + serialized_end=3889, ) _sym_db.RegisterEnumDescriptor(_CURRENCY) @@ -471,8 +471,8 @@ ], containing_type=None, options=None, - serialized_start=3843, - serialized_end=4025, + serialized_start=3892, + serialized_end=4074, ) _sym_db.RegisterEnumDescriptor(_CLTRISKLEVEL) @@ -494,8 +494,8 @@ ], containing_type=None, options=None, - serialized_start=4027, - serialized_end=4082, + serialized_start=4076, + serialized_end=4131, ) _sym_db.RegisterEnumDescriptor(_TIMEINFORCE) @@ -521,8 +521,8 @@ ], containing_type=None, options=None, - serialized_start=4084, - serialized_end=4183, + serialized_start=4133, + serialized_end=4232, ) _sym_db.RegisterEnumDescriptor(_SECURITYFIRM) @@ -548,8 +548,8 @@ ], containing_type=None, options=None, - serialized_start=4185, - serialized_end=4266, + serialized_start=4234, + serialized_end=4315, ) _sym_db.RegisterEnumDescriptor(_SIMACCTYPE) @@ -599,8 +599,8 @@ ], containing_type=None, options=None, - serialized_start=4269, - serialized_end=4518, + serialized_start=4318, + serialized_end=4567, ) _sym_db.RegisterEnumDescriptor(_CLTRISKSTATUS) @@ -1547,6 +1547,20 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='longRequiredIM', full_name='Trd_Common.MaxTrdQtys.longRequiredIM', index=5, + number=6, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='shortRequiredIM', full_name='Trd_Common.MaxTrdQtys.shortRequiredIM', index=6, + number=7, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1560,7 +1574,7 @@ oneofs=[ ], serialized_start=1914, - serialized_end=2042, + serialized_end=2091, ) @@ -1611,8 +1625,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2044, - serialized_end=2135, + serialized_start=2093, + serialized_end=2184, ) _FUNDS.fields_by_name['cashInfoList'].message_type = _ACCCASHINFO diff --git a/futu/trade/open_trade_context.py b/futu/trade/open_trade_context.py index 07de47e..2eb0d71 100644 --- a/futu/trade/open_trade_context.py +++ b/futu/trade/open_trade_context.py @@ -791,7 +791,8 @@ def acctradinginfo_query(self, order_type, code, price, order_id=None, adjust_li if ret_code != RET_OK: return RET_ERROR, msg - col_list = ['max_cash_buy', 'max_cash_and_margin_buy', 'max_position_sell', 'max_sell_short', 'max_buy_back'] + col_list = ['max_cash_buy', 'max_cash_and_margin_buy', 'max_position_sell', 'max_sell_short', 'max_buy_back', + 'long_required_im', 'short_required_im'] acctradinginfo_table = pd.DataFrame(data, columns=col_list) return RET_OK, acctradinginfo_table diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index 5e28466..dd87e36 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -664,7 +664,9 @@ def unpack_rsp(cls, rsp_pb): 'max_cash_and_margin_buy': info.maxCashAndMarginBuy if info.HasField('maxCashAndMarginBuy') else NoneDataValue, 'max_position_sell': info.maxPositionSell, 'max_sell_short': info.maxSellShort if info.HasField('maxSellShort') else NoneDataValue, - 'max_buy_back': info.maxBuyBack if info.HasField('maxBuyBack') else NoneDataValue + 'max_buy_back': info.maxBuyBack if info.HasField('maxBuyBack') else NoneDataValue, + 'long_required_im': info.longRequiredIM if info.HasField('longRequiredIM') else NoneDataValue, + 'short_required_im': info.shortRequiredIM if info.HasField('shortRequiredIM') else NoneDataValue }] return RET_OK, "", data From c56582542ee235b25a059cf7b9d73881748edb79 Mon Sep 17 00:00:00 2001 From: pspeng Date: Mon, 28 Dec 2020 09:55:12 +0800 Subject: [PATCH 10/36] =?UTF-8?q?add=20=E5=BF=AB=E7=85=A7=E5=92=8C?= =?UTF-8?q?=E6=8A=A5=E4=BB=B7=E6=8E=A5=E5=8F=A3=EF=BC=8C=E7=BE=8E=E8=82=A1?= =?UTF-8?q?=E6=9C=9F=E6=9D=83=E7=9A=84=E6=94=AF=E6=8C=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/pb/Qot_Common.proto | 1 + futu/common/pb/Qot_Common_pb2.py | 211 ++++++++++++++------------- futu/quote/open_quote_context.py | 7 +- futu/quote/quote_query.py | 2 + futu/quote/quote_response_handler.py | 2 +- 5 files changed, 118 insertions(+), 105 deletions(-) diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index 69763ae..a34cd6e 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -510,6 +510,7 @@ message OptionBasicQotExData optional double ownerLotMultiplier = 14; //相等正股手数,指数期权无该字段 optional int32 optionAreaType = 15; //OptionAreaType, 期权地区类型 optional double contractMultiplier = 16; //合约乘数,指数期权特有字段 + optional int32 indexOptionType = 18; //IndexOptionType,指数期权的类型,仅在指数期权有效 } //美股支持盘前盘后数据 diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index 4c106bb..dafbb23 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\x89\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xab\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\xf4\x02\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xab\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\xf4\x02\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -58,8 +58,8 @@ ], containing_type=None, options=None, - serialized_start=4083, - serialized_end=4254, + serialized_start=4108, + serialized_end=4279, ) _sym_db.RegisterEnumDescriptor(_QOTMARKET) @@ -117,8 +117,8 @@ ], containing_type=None, options=None, - serialized_start=4257, - serialized_end=4539, + serialized_start=4282, + serialized_end=4564, ) _sym_db.RegisterEnumDescriptor(_SECURITYTYPE) @@ -152,8 +152,8 @@ ], containing_type=None, options=None, - serialized_start=4542, - serialized_end=4680, + serialized_start=4567, + serialized_end=4705, ) _sym_db.RegisterEnumDescriptor(_PLATESETTYPE) @@ -191,8 +191,8 @@ ], containing_type=None, options=None, - serialized_start=4683, - serialized_end=4832, + serialized_start=4708, + serialized_end=4857, ) _sym_db.RegisterEnumDescriptor(_WARRANTTYPE) @@ -218,8 +218,8 @@ ], containing_type=None, options=None, - serialized_start=4834, - serialized_end=4911, + serialized_start=4859, + serialized_end=4936, ) _sym_db.RegisterEnumDescriptor(_OPTIONTYPE) @@ -245,8 +245,8 @@ ], containing_type=None, options=None, - serialized_start=4913, - serialized_end=5014, + serialized_start=4938, + serialized_end=5039, ) _sym_db.RegisterEnumDescriptor(_INDEXOPTIONTYPE) @@ -276,8 +276,8 @@ ], containing_type=None, options=None, - serialized_start=5017, - serialized_end=5147, + serialized_start=5042, + serialized_end=5172, ) _sym_db.RegisterEnumDescriptor(_OPTIONAREATYPE) @@ -403,8 +403,8 @@ ], containing_type=None, options=None, - serialized_start=5150, - serialized_end=6086, + serialized_start=5175, + serialized_end=6111, ) _sym_db.RegisterEnumDescriptor(_QOTMARKETSTATE) @@ -442,8 +442,8 @@ ], containing_type=None, options=None, - serialized_start=6089, - serialized_end=6255, + serialized_start=6114, + serialized_end=6280, ) _sym_db.RegisterEnumDescriptor(_TRADEDATEMARKET) @@ -469,8 +469,8 @@ ], containing_type=None, options=None, - serialized_start=6257, - serialized_end=6353, + serialized_start=6282, + serialized_end=6378, ) _sym_db.RegisterEnumDescriptor(_TRADEDATETYPE) @@ -496,8 +496,8 @@ ], containing_type=None, options=None, - serialized_start=6355, - serialized_end=6433, + serialized_start=6380, + serialized_end=6458, ) _sym_db.RegisterEnumDescriptor(_REHABTYPE) @@ -559,8 +559,8 @@ ], containing_type=None, options=None, - serialized_start=6436, - serialized_end=6657, + serialized_start=6461, + serialized_end=6682, ) _sym_db.RegisterEnumDescriptor(_KLTYPE) @@ -618,8 +618,8 @@ ], containing_type=None, options=None, - serialized_start=6660, - serialized_end=6905, + serialized_start=6685, + serialized_end=6930, ) _sym_db.RegisterEnumDescriptor(_KLFIELDS) @@ -705,8 +705,8 @@ ], containing_type=None, options=None, - serialized_start=6908, - serialized_end=7295, + serialized_start=6933, + serialized_end=7320, ) _sym_db.RegisterEnumDescriptor(_SUBTYPE) @@ -736,8 +736,8 @@ ], containing_type=None, options=None, - serialized_start=7297, - serialized_end=7422, + serialized_start=7322, + serialized_end=7447, ) _sym_db.RegisterEnumDescriptor(_TICKERDIRECTION) @@ -879,8 +879,8 @@ ], containing_type=None, options=None, - serialized_start=7425, - serialized_end=8349, + serialized_start=7450, + serialized_end=8374, ) _sym_db.RegisterEnumDescriptor(_TICKERTYPE) @@ -906,8 +906,8 @@ ], containing_type=None, options=None, - serialized_start=8351, - serialized_end=8428, + serialized_start=8376, + serialized_end=8453, ) _sym_db.RegisterEnumDescriptor(_DARKSTATUS) @@ -1009,8 +1009,8 @@ ], containing_type=None, options=None, - serialized_start=8431, - serialized_end=9219, + serialized_start=8456, + serialized_end=9244, ) _sym_db.RegisterEnumDescriptor(_SECURITYSTATUS) @@ -1040,8 +1040,8 @@ ], containing_type=None, options=None, - serialized_start=9222, - serialized_end=9351, + serialized_start=9247, + serialized_end=9376, ) _sym_db.RegisterEnumDescriptor(_HOLDERCATEGORY) @@ -1071,8 +1071,8 @@ ], containing_type=None, options=None, - serialized_start=9353, - serialized_end=9471, + serialized_start=9378, + serialized_end=9496, ) _sym_db.RegisterEnumDescriptor(_PUSHDATATYPE) @@ -1290,8 +1290,8 @@ ], containing_type=None, options=None, - serialized_start=9474, - serialized_end=10837, + serialized_start=9499, + serialized_end=10862, ) _sym_db.RegisterEnumDescriptor(_SORTFIELD) @@ -1401,8 +1401,8 @@ ], containing_type=None, options=None, - serialized_start=10840, - serialized_end=11212, + serialized_start=10865, + serialized_end=11237, ) _sym_db.RegisterEnumDescriptor(_ISSUER) @@ -1440,8 +1440,8 @@ ], containing_type=None, options=None, - serialized_start=11215, - serialized_end=11366, + serialized_start=11240, + serialized_end=11391, ) _sym_db.RegisterEnumDescriptor(_IPOPERIOD) @@ -1467,8 +1467,8 @@ ], containing_type=None, options=None, - serialized_start=11368, - serialized_end=11446, + serialized_start=11393, + serialized_end=11471, ) _sym_db.RegisterEnumDescriptor(_PRICETYPE) @@ -1502,8 +1502,8 @@ ], containing_type=None, options=None, - serialized_start=11449, - serialized_end=11606, + serialized_start=11474, + serialized_end=11631, ) _sym_db.RegisterEnumDescriptor(_WARRANTSTATUS) @@ -1553,8 +1553,8 @@ ], containing_type=None, options=None, - serialized_start=11609, - serialized_end=11827, + serialized_start=11634, + serialized_end=11852, ) _sym_db.RegisterEnumDescriptor(_COMPANYACT) @@ -1592,8 +1592,8 @@ ], containing_type=None, options=None, - serialized_start=11829, - serialized_end=11954, + serialized_start=11854, + serialized_end=11979, ) _sym_db.RegisterEnumDescriptor(_QOTRIGHT) @@ -1663,8 +1663,8 @@ ], containing_type=None, options=None, - serialized_start=11957, - serialized_end=12465, + serialized_start=11982, + serialized_end=12490, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERTYPE) @@ -1694,8 +1694,8 @@ ], containing_type=None, options=None, - serialized_start=12468, - serialized_end=12612, + serialized_start=12493, + serialized_end=12637, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERFREQ) @@ -1737,8 +1737,8 @@ ], containing_type=None, options=None, - serialized_start=12615, - serialized_end=12794, + serialized_start=12640, + serialized_end=12819, ) _sym_db.RegisterEnumDescriptor(_ASSETCLASS) @@ -2342,6 +2342,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='indexOptionType', full_name='Qot_Common.OptionBasicQotExData.indexOptionType', index=17, + number=18, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2355,7 +2362,7 @@ oneofs=[ ], serialized_start=337, - serialized_end=730, + serialized_end=755, ) @@ -2434,8 +2441,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=733, - serialized_end=897, + serialized_start=758, + serialized_end=922, ) @@ -2486,8 +2493,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=899, - serialized_end=1016, + serialized_start=924, + serialized_end=1041, ) @@ -2531,8 +2538,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1018, - serialized_end=1100, + serialized_start=1043, + serialized_end=1125, ) @@ -2716,8 +2723,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1103, - serialized_end=1767, + serialized_start=1128, + serialized_end=1792, ) @@ -2803,8 +2810,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1770, - serialized_end=1938, + serialized_start=1795, + serialized_end=1963, ) @@ -2883,8 +2890,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1941, - serialized_end=2122, + serialized_start=1966, + serialized_end=2147, ) @@ -2921,8 +2928,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2124, - serialized_end=2196, + serialized_start=2149, + serialized_end=2221, ) @@ -3001,8 +3008,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2199, - serialized_end=2394, + serialized_start=2224, + serialized_end=2419, ) @@ -3046,8 +3053,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2396, - serialized_end=2491, + serialized_start=2421, + serialized_end=2516, ) @@ -3098,8 +3105,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2494, - serialized_end=2726, + serialized_start=2519, + serialized_end=2751, ) @@ -3157,8 +3164,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2728, - serialized_end=2808, + serialized_start=2753, + serialized_end=2833, ) @@ -3258,8 +3265,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2811, - serialized_end=3004, + serialized_start=2836, + serialized_end=3029, ) @@ -3296,8 +3303,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3006, - serialized_end=3056, + serialized_start=3031, + serialized_end=3081, ) @@ -3348,8 +3355,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3058, - serialized_end=3170, + serialized_start=3083, + serialized_end=3195, ) @@ -3386,8 +3393,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3172, - serialized_end=3223, + serialized_start=3197, + serialized_end=3248, ) @@ -3459,8 +3466,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3226, - serialized_end=3381, + serialized_start=3251, + serialized_end=3406, ) @@ -3497,8 +3504,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3383, - serialized_end=3453, + serialized_start=3408, + serialized_end=3478, ) @@ -3542,8 +3549,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3455, - serialized_end=3552, + serialized_start=3480, + serialized_end=3577, ) @@ -3587,8 +3594,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3554, - serialized_end=3635, + serialized_start=3579, + serialized_end=3660, ) @@ -3772,8 +3779,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3638, - serialized_end=4080, + serialized_start=3663, + serialized_end=4105, ) _BASICQOT.fields_by_name['security'].message_type = _SECURITY diff --git a/futu/quote/open_quote_context.py b/futu/quote/open_quote_context.py index ee36d8c..27d1f47 100644 --- a/futu/quote/open_quote_context.py +++ b/futu/quote/open_quote_context.py @@ -563,6 +563,7 @@ def get_market_snapshot(self, code_list): option_owner_lot_multiplier float 相等正股手数,指数期权无该字段 option_area_type str 期权地区类型,见 OptionAreaType_ option_contract_multiplier float 合约乘数,指数期权特有字段 + index_option_type str 指数期权类型,见 IndexOptionType index_raise_count int 指数类型上涨支数 index_fall_count int 指数类型下跌支数 index_requal_count int 指数类型平盘支数 @@ -660,7 +661,8 @@ def get_market_snapshot(self, code_list): 'option_contract_nominal_value', 'option_owner_lot_multiplier', 'option_area_type', - 'option_contract_multiplier' + 'option_contract_multiplier', + 'index_option_type' ] index_col_list = ['index_raise_count', @@ -1297,6 +1299,7 @@ def get_stock_quote(self, code_list): last_settle_price float 昨结,期货特有字段 position float 持仓量,期货特有字段 position_change float 日增仓,期货特有字段 + index_option_type str 指数期权的类型,仅在指数期权有效 ===================== =========== ============================================================== """ code_list = unique_and_normalize_list(code_list) @@ -1326,7 +1329,7 @@ def get_stock_quote(self, code_list): 'premium', 'delta', 'gamma', 'vega', 'theta', 'rho', 'net_open_interest', 'expiry_date_distance', 'contract_nominal_value', 'owner_lot_multiplier', 'option_area_type', 'contract_multiplier', - 'last_settle_price','position','position_change' + 'last_settle_price', 'position', 'position_change', 'index_option_type' ] col_list.extend(row[0] for row in pb_field_map_PreAfterMarketData_pre) diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index d56a737..ceda10a 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -75,6 +75,7 @@ def merge_pb_cnipoexdata_winningnumdata(winningnumdata): ('owner_lot_multiplier', 'ownerLotMultiplier', False, None), ('option_area_type', 'optionAreaType', False, OptionAreaType.to_string2), ('contract_multiplier', 'contractMultiplier', False, None), + ('index_option_type', 'indexOptionType', False, IndexOptionType.to_string2), ] pb_field_map_FutureBasicQotExData = [ @@ -619,6 +620,7 @@ def unpack_rsp(cls, rsp_pb): snapshot_tmp['option_owner_lot_multiplier'] = record.optionExData.ownerLotMultiplier if record.optionExData.HasField('ownerLotMultiplier') else 'N/A' snapshot_tmp['option_area_type'] = OptionAreaType.to_string2(record.optionExData.optionAreaType) if record.optionExData.HasField('optionAreaType') else 'N/A' snapshot_tmp['option_contract_multiplier'] = record.optionExData.contractMultiplier if record.optionExData.HasField('contractMultiplier') else 'N/A' + snapshot_tmp['index_option_type'] = IndexOptionType.to_string2(record.optionExData.indexOptionType) if record.optionExData.HasField('indexOptionType') else 'N/A' snapshot_tmp['index_valid'] = False if record.HasField('indexExData'): diff --git a/futu/quote/quote_response_handler.py b/futu/quote/quote_response_handler.py index 0dc3d89..5d79b94 100644 --- a/futu/quote/quote_response_handler.py +++ b/futu/quote/quote_response_handler.py @@ -51,7 +51,7 @@ def on_recv_rsp(self, rsp_pb): 'premium', 'delta', 'gamma', 'vega', 'theta', 'rho', 'net_open_interest', 'expiry_date_distance', 'contract_nominal_value', 'owner_lot_multiplier', 'option_area_type', 'contract_multiplier', - 'last_settle_price','position','position_change' + 'last_settle_price', 'position', 'position_change', 'index_option_type' ] col_list.extend(row[0] for row in pb_field_map_PreAfterMarketData_pre) From 53be931cdce8d1890e705f7127b4378ad5f4fb5e Mon Sep 17 00:00:00 2001 From: pspeng Date: Tue, 5 Jan 2021 16:00:03 +0800 Subject: [PATCH 11/36] =?UTF-8?q?fix=20=E5=BF=AB=E7=85=A7=E5=92=8C?= =?UTF-8?q?=E6=8A=A5=E4=BB=B7=E7=9A=84=E6=9E=9A=E4=B8=BE=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E6=AE=B5=EF=BC=8C=E7=BB=9F=E4=B8=80=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=88=90N/A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/quote/quote_query.py | 40 +++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index ceda10a..c30b560 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -482,6 +482,25 @@ def unpack_rsp(cls, rsp_pb): snapshot_tmp['bid_price'] = record.basic.bidPrice if record.basic.HasField('bidPrice') else 'N/A' snapshot_tmp['ask_vol'] = record.basic.askVol if record.basic.HasField('askVol') else 'N/A' snapshot_tmp['bid_vol'] = record.basic.bidVol if record.basic.HasField('bidVol') else 'N/A' + + # 窝轮 统一对枚举类型,初始化 + snapshot_tmp['wrt_type'] = WrtType.to_string2( + record.warrantExData.warrantType) if record.warrantExData.HasField('warrantType') else 'N/A' + # 界内界外,仅界内证支持该字段 type=double + snapshot_tmp["wrt_inline_price_status"] = PriceType.to_string2( + record.warrantExData.inLinePriceStatus) if record.warrantExData.HasField('inLinePriceStatus') else 'N/A' + + # 期权 统一对枚举类型,初始化 + snapshot_tmp['option_type'] = OptionType.to_string2( + record.optionExData.type) if record.optionExData.HasField('type') else 'N/A' + snapshot_tmp['index_option_type'] = IndexOptionType.to_string2( + record.optionExData.indexOptionType) if record.optionExData.HasField('indexOptionType') else 'N/A' + snapshot_tmp['option_area_type'] = OptionAreaType.to_string2( + record.optionExData.optionAreaType) if record.optionExData.HasField('optionAreaType') else 'N/A' + + # 基金 统一对枚举类型,初始化 + snapshot_tmp['trust_assetClass'] = AssetClass.to_string2(record.trustExData.assetClass) if record.trustExData.HasField('assetClass') else 'N/A' + # 2019.02.25 增加一批数据 if record.basic.HasField("enableMargin"): # 是否可融资,如果为true,后两个字段才有意 @@ -518,7 +537,7 @@ def unpack_rsp(cls, rsp_pb): # 盘后成交额 type=double snapshot_tmp["after_turnover"] = record.basic.afterMarket.turnover # 股票状态 type=str - snapshot_tmp["sec_status"] = SecurityStatus.to_string2(record.basic.secStatus) + snapshot_tmp["sec_status"] = SecurityStatus.to_string2(record.basic.secStatus) if record.basic.HasField('secStatus') else 'N/A' # 5分组收盘价 type=double snapshot_tmp["close_price_5min"] = record.basic.closePrice5Minute @@ -561,8 +580,6 @@ def unpack_rsp(cls, rsp_pb): if SecurityType.to_string2(record.basic.type) == SecurityType.WARRANT: snapshot_tmp['wrt_valid'] = True snapshot_tmp['wrt_conversion_ratio'] = record.warrantExData.conversionRate - snapshot_tmp['wrt_type'] = WrtType.to_string2( - record.warrantExData.warrantType) snapshot_tmp['wrt_strike_price'] = record.warrantExData.strikePrice snapshot_tmp['wrt_maturity_date'] = record.warrantExData.maturityTime snapshot_tmp['wrt_end_trade'] = record.warrantExData.endTradeTime @@ -592,15 +609,12 @@ def unpack_rsp(cls, rsp_pb): snapshot_tmp["wrt_upper_strike_price"] = record.warrantExData.upperStrikePrice # 下限价,仅界内证支持该字段 type=double snapshot_tmp["wrt_lower_strike_price"] = record.warrantExData.lowerStrikePrice - # 界内界外,仅界内证支持该字段 type=double - snapshot_tmp["wrt_inline_price_status"] = PriceType.to_string2( - record.warrantExData.inLinePriceStatus) snapshot_tmp["wrt_issuer_code"] = record.warrantExData.issuerCode snapshot_tmp['option_valid'] = False if SecurityType.to_string2(record.basic.type) == SecurityType.DRVT: snapshot_tmp['option_valid'] = True - snapshot_tmp['option_type'] = OptionType.to_string2(record.optionExData.type) + snapshot_tmp['stock_owner'] = merge_qot_mkt_stock_str( record.optionExData.owner.market, record.optionExData.owner.code) snapshot_tmp['strike_time'] = record.optionExData.strikeTime @@ -618,9 +632,7 @@ def unpack_rsp(cls, rsp_pb): snapshot_tmp['option_expiry_date_distance'] = record.optionExData.expiryDateDistance if record.optionExData.HasField('expiryDateDistance') else 'N/A' snapshot_tmp['option_contract_nominal_value'] = record.optionExData.contractNominalValue if record.optionExData.HasField('contractNominalValue') else 'N/A' snapshot_tmp['option_owner_lot_multiplier'] = record.optionExData.ownerLotMultiplier if record.optionExData.HasField('ownerLotMultiplier') else 'N/A' - snapshot_tmp['option_area_type'] = OptionAreaType.to_string2(record.optionExData.optionAreaType) if record.optionExData.HasField('optionAreaType') else 'N/A' snapshot_tmp['option_contract_multiplier'] = record.optionExData.contractMultiplier if record.optionExData.HasField('contractMultiplier') else 'N/A' - snapshot_tmp['index_option_type'] = IndexOptionType.to_string2(record.optionExData.indexOptionType) if record.optionExData.HasField('indexOptionType') else 'N/A' snapshot_tmp['index_valid'] = False if record.HasField('indexExData'): @@ -659,7 +671,7 @@ def unpack_rsp(cls, rsp_pb): snapshot_tmp['trust_outstanding_units'] = record.trustExData.outstandingUnits snapshot_tmp['trust_netAssetValue'] = record.trustExData.netAssetValue snapshot_tmp['trust_premium'] = record.trustExData.premium - snapshot_tmp['trust_assetClass'] = AssetClass.to_string2(record.trustExData.assetClass) + snapshot_list.append(snapshot_tmp) return RET_OK, "", snapshot_list @@ -1142,17 +1154,17 @@ def parse_pb_BasicQot(pb): 'turnover_rate': pb.turnoverRate, 'amplitude': pb.amplitude, 'suspension': pb.isSuspended, - 'listing_date': "N/A" if pb.HasField('optionExData') else pb.listTime, + 'listing_date': "N/A" if pb.HasField('optionExData') else pb.listTime, 'price_spread': pb.priceSpread, - 'dark_status': DarkStatus.to_string2(pb.darkStatus), + 'dark_status': DarkStatus.to_string2(pb.darkStatus) if pb.HasField('darkStatus') else 'N/A', 'sec_status': SecurityStatus.to_string2(pb.secStatus) if pb.HasField( - 'secStatus') else SecurityStatus.NONE, + 'secStatus') else 'N/A', } if pb.HasField('optionExData'): set_item_from_pb(item, pb.optionExData, pb_field_map_OptionBasicQotExData) else: - set_item_none(item, pb_field_map_OptionBasicQotExData) + set_item_none(item, pb_field_map_OptionBasicQotExData) # 这里设置了 'N/A' if pb.HasField('futureExData'): set_item_from_pb(item, pb.futureExData, pb_field_map_FutureBasicQotExData) From a21a5cc050034807b97d6b6233f97306e9ab8ac4 Mon Sep 17 00:00:00 2001 From: pspeng Date: Tue, 12 Jan 2021 21:07:05 +0800 Subject: [PATCH 12/36] =?UTF-8?q?add=20pythonAPI=E7=AA=9D=E8=BD=AE?= =?UTF-8?q?=E7=9A=84=E5=8F=91=E8=A1=8C=E5=95=86=E6=96=B0=E5=A2=9E=E5=9B=BD?= =?UTF-8?q?=E5=90=9B=E5=AD=97=E6=AE=B5=E3=80=82Issuer=5FGJ=20=E5=9B=BD?= =?UTF-8?q?=E5=90=9B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 4 +++- futu/common/pb/Qot_Common.proto | 17 +++++++------ futu/common/pb/Qot_Common_pb2.py | 41 ++++++++++++++++++-------------- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 82e09a7..94317b0 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -1559,6 +1559,7 @@ class Issuer(FtEnum): VT = "VT" # 瑞通 KC = "KC" # 比联 MS = "MS" # 摩利 + GJ = "GJ" # 国君 def load_dic(self): return { @@ -1585,7 +1586,8 @@ def load_dic(self): self.HT: Qot_Common_pb2.Issuer_HT, self.VT: Qot_Common_pb2.Issuer_VT, self.KC: Qot_Common_pb2.Issuer_KC, - self.MS: Qot_Common_pb2.Issuer_MS + self.MS: Qot_Common_pb2.Issuer_MS, + self.GJ: Qot_Common_pb2.Issuer_GJ } diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index a34cd6e..778a7ff 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -370,6 +370,7 @@ enum Issuer Issuer_VT = 21; //瑞通 Issuer_KC = 22; //比联 Issuer_MS = 23; //摩利 + Issuer_GJ = 24; //国君 } //窝轮上市日 @@ -502,15 +503,13 @@ message OptionBasicQotExData required double vega = 8; //希腊值 Vega required double theta = 9; //希腊值 Theta required double rho = 10; //希腊值 Rho - - //以下字段仅支持港股期权 - optional int32 netOpenInterest = 11; //净未平仓合约数 - optional int32 expiryDateDistance = 12; //距离到期日天数 - optional double contractNominalValue = 13; //合约名义金额 - optional double ownerLotMultiplier = 14; //相等正股手数,指数期权无该字段 - optional int32 optionAreaType = 15; //OptionAreaType, 期权地区类型 - optional double contractMultiplier = 16; //合约乘数,指数期权特有字段 - optional int32 indexOptionType = 18; //IndexOptionType,指数期权的类型,仅在指数期权有效 + optional int32 netOpenInterest = 11; //净未平仓合约数,仅港股期权适用 + optional int32 expiryDateDistance = 12; //距离到期日天数,负数表示已过期 + optional double contractNominalValue = 13; //合约名义金额,仅港股期权适用 + optional double ownerLotMultiplier = 14; //相等正股手数,指数期权无该字段,仅港股期权适用 + optional int32 optionAreaType = 15; //OptionAreaType,期权类型(按行权时间) + optional double contractMultiplier = 16; //合约乘数 + optional int32 indexOptionType = 18; //IndexOptionType,指数期权类型 } //美股支持盘前盘后数据 diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index dafbb23..0f00898 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xab\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\xf4\x02\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xab\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -1398,11 +1398,15 @@ name='Issuer_MS', index=23, number=23, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='Issuer_GJ', index=24, number=24, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=10865, - serialized_end=11237, + serialized_end=11252, ) _sym_db.RegisterEnumDescriptor(_ISSUER) @@ -1440,8 +1444,8 @@ ], containing_type=None, options=None, - serialized_start=11240, - serialized_end=11391, + serialized_start=11255, + serialized_end=11406, ) _sym_db.RegisterEnumDescriptor(_IPOPERIOD) @@ -1467,8 +1471,8 @@ ], containing_type=None, options=None, - serialized_start=11393, - serialized_end=11471, + serialized_start=11408, + serialized_end=11486, ) _sym_db.RegisterEnumDescriptor(_PRICETYPE) @@ -1502,8 +1506,8 @@ ], containing_type=None, options=None, - serialized_start=11474, - serialized_end=11631, + serialized_start=11489, + serialized_end=11646, ) _sym_db.RegisterEnumDescriptor(_WARRANTSTATUS) @@ -1553,8 +1557,8 @@ ], containing_type=None, options=None, - serialized_start=11634, - serialized_end=11852, + serialized_start=11649, + serialized_end=11867, ) _sym_db.RegisterEnumDescriptor(_COMPANYACT) @@ -1592,8 +1596,8 @@ ], containing_type=None, options=None, - serialized_start=11854, - serialized_end=11979, + serialized_start=11869, + serialized_end=11994, ) _sym_db.RegisterEnumDescriptor(_QOTRIGHT) @@ -1663,8 +1667,8 @@ ], containing_type=None, options=None, - serialized_start=11982, - serialized_end=12490, + serialized_start=11997, + serialized_end=12505, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERTYPE) @@ -1694,8 +1698,8 @@ ], containing_type=None, options=None, - serialized_start=12493, - serialized_end=12637, + serialized_start=12508, + serialized_end=12652, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERFREQ) @@ -1737,8 +1741,8 @@ ], containing_type=None, options=None, - serialized_start=12640, - serialized_end=12819, + serialized_start=12655, + serialized_end=12834, ) _sym_db.RegisterEnumDescriptor(_ASSETCLASS) @@ -2006,6 +2010,7 @@ Issuer_VT = 21 Issuer_KC = 22 Issuer_MS = 23 +Issuer_GJ = 24 IpoPeriod_Unknow = 0 IpoPeriod_Today = 1 IpoPeriod_Tomorrow = 2 From 2461ab4fc3de8674c6449f2bdf08194d7e2c1c35 Mon Sep 17 00:00:00 2001 From: pspeng Date: Tue, 12 Jan 2021 21:07:05 +0800 Subject: [PATCH 13/36] =?UTF-8?q?add=20pythonAPI=E7=AA=9D=E8=BD=AE?= =?UTF-8?q?=E7=9A=84=E5=8F=91=E8=A1=8C=E5=95=86=E6=96=B0=E5=A2=9E=E5=9B=BD?= =?UTF-8?q?=E5=90=9B=E5=AD=97=E6=AE=B5=E3=80=82Issuer=5FGJ=20=E5=9B=BD?= =?UTF-8?q?=E5=90=9B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit a21a5cc050034807b97d6b6233f97306e9ab8ac4) --- futu/common/constant.py | 4 +++- futu/common/pb/Qot_Common.proto | 17 +++++++------ futu/common/pb/Qot_Common_pb2.py | 41 ++++++++++++++++++-------------- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 82e09a7..94317b0 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -1559,6 +1559,7 @@ class Issuer(FtEnum): VT = "VT" # 瑞通 KC = "KC" # 比联 MS = "MS" # 摩利 + GJ = "GJ" # 国君 def load_dic(self): return { @@ -1585,7 +1586,8 @@ def load_dic(self): self.HT: Qot_Common_pb2.Issuer_HT, self.VT: Qot_Common_pb2.Issuer_VT, self.KC: Qot_Common_pb2.Issuer_KC, - self.MS: Qot_Common_pb2.Issuer_MS + self.MS: Qot_Common_pb2.Issuer_MS, + self.GJ: Qot_Common_pb2.Issuer_GJ } diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index a34cd6e..778a7ff 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -370,6 +370,7 @@ enum Issuer Issuer_VT = 21; //瑞通 Issuer_KC = 22; //比联 Issuer_MS = 23; //摩利 + Issuer_GJ = 24; //国君 } //窝轮上市日 @@ -502,15 +503,13 @@ message OptionBasicQotExData required double vega = 8; //希腊值 Vega required double theta = 9; //希腊值 Theta required double rho = 10; //希腊值 Rho - - //以下字段仅支持港股期权 - optional int32 netOpenInterest = 11; //净未平仓合约数 - optional int32 expiryDateDistance = 12; //距离到期日天数 - optional double contractNominalValue = 13; //合约名义金额 - optional double ownerLotMultiplier = 14; //相等正股手数,指数期权无该字段 - optional int32 optionAreaType = 15; //OptionAreaType, 期权地区类型 - optional double contractMultiplier = 16; //合约乘数,指数期权特有字段 - optional int32 indexOptionType = 18; //IndexOptionType,指数期权的类型,仅在指数期权有效 + optional int32 netOpenInterest = 11; //净未平仓合约数,仅港股期权适用 + optional int32 expiryDateDistance = 12; //距离到期日天数,负数表示已过期 + optional double contractNominalValue = 13; //合约名义金额,仅港股期权适用 + optional double ownerLotMultiplier = 14; //相等正股手数,指数期权无该字段,仅港股期权适用 + optional int32 optionAreaType = 15; //OptionAreaType,期权类型(按行权时间) + optional double contractMultiplier = 16; //合约乘数 + optional int32 indexOptionType = 18; //IndexOptionType,指数期权类型 } //美股支持盘前盘后数据 diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index dafbb23..0f00898 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xab\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\xf4\x02\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xab\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -1398,11 +1398,15 @@ name='Issuer_MS', index=23, number=23, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='Issuer_GJ', index=24, number=24, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=10865, - serialized_end=11237, + serialized_end=11252, ) _sym_db.RegisterEnumDescriptor(_ISSUER) @@ -1440,8 +1444,8 @@ ], containing_type=None, options=None, - serialized_start=11240, - serialized_end=11391, + serialized_start=11255, + serialized_end=11406, ) _sym_db.RegisterEnumDescriptor(_IPOPERIOD) @@ -1467,8 +1471,8 @@ ], containing_type=None, options=None, - serialized_start=11393, - serialized_end=11471, + serialized_start=11408, + serialized_end=11486, ) _sym_db.RegisterEnumDescriptor(_PRICETYPE) @@ -1502,8 +1506,8 @@ ], containing_type=None, options=None, - serialized_start=11474, - serialized_end=11631, + serialized_start=11489, + serialized_end=11646, ) _sym_db.RegisterEnumDescriptor(_WARRANTSTATUS) @@ -1553,8 +1557,8 @@ ], containing_type=None, options=None, - serialized_start=11634, - serialized_end=11852, + serialized_start=11649, + serialized_end=11867, ) _sym_db.RegisterEnumDescriptor(_COMPANYACT) @@ -1592,8 +1596,8 @@ ], containing_type=None, options=None, - serialized_start=11854, - serialized_end=11979, + serialized_start=11869, + serialized_end=11994, ) _sym_db.RegisterEnumDescriptor(_QOTRIGHT) @@ -1663,8 +1667,8 @@ ], containing_type=None, options=None, - serialized_start=11982, - serialized_end=12490, + serialized_start=11997, + serialized_end=12505, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERTYPE) @@ -1694,8 +1698,8 @@ ], containing_type=None, options=None, - serialized_start=12493, - serialized_end=12637, + serialized_start=12508, + serialized_end=12652, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERFREQ) @@ -1737,8 +1741,8 @@ ], containing_type=None, options=None, - serialized_start=12640, - serialized_end=12819, + serialized_start=12655, + serialized_end=12834, ) _sym_db.RegisterEnumDescriptor(_ASSETCLASS) @@ -2006,6 +2010,7 @@ Issuer_VT = 21 Issuer_KC = 22 Issuer_MS = 23 +Issuer_GJ = 24 IpoPeriod_Unknow = 0 IpoPeriod_Today = 1 IpoPeriod_Tomorrow = 2 From e004941d156f0fd6e47595462ce7420e6d0fa521 Mon Sep 17 00:00:00 2001 From: alexqli Date: Mon, 18 Jan 2021 15:26:55 +0800 Subject: [PATCH 14/36] =?UTF-8?q?=E5=A2=9E=E5=8A=A0CltRiskStatus=5FUnknown?= =?UTF-8?q?=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 1 + futu/common/pb/Trd_Common.proto | 43 ++++++++++++++++++++++++------ futu/common/pb/Trd_Common_pb2.py | 45 ++++++++++++++++++-------------- 3 files changed, 61 insertions(+), 28 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 82e09a7..1789637 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -2266,6 +2266,7 @@ class CltRiskStatus(FtEnum): def load_dic(self): return { + self.NONE: Trd_Common_pb2.CltRiskStatus_Unknown, self.LEVEL1: Trd_Common_pb2.CltRiskStatus_Level1, self.LEVEL2: Trd_Common_pb2.CltRiskStatus_Level2, self.LEVEL3: Trd_Common_pb2.CltRiskStatus_Level3, diff --git a/futu/common/pb/Trd_Common.proto b/futu/common/pb/Trd_Common.proto index d25eb6d..74e1b37 100644 --- a/futu/common/pb/Trd_Common.proto +++ b/futu/common/pb/Trd_Common.proto @@ -159,6 +159,21 @@ enum SimAccType SimAccType_Option = 2; //期权模拟账户(仅用于交易期权,不支持交易股票证券类产品) } +//风险状态,共分 9 个等级,LEVEL1是最安全,LEVEL9是最危险 +enum CltRiskStatus +{ + CltRiskStatus_Unknown = 0; //未知 + CltRiskStatus_Level1 = 1; //非常安全 + CltRiskStatus_Level2 = 2; //安全 + CltRiskStatus_Level3 = 3; //较安全 + CltRiskStatus_Level4 = 4; //较低风险 + CltRiskStatus_Level5 = 5; //中等风险 + CltRiskStatus_Level6 = 6; //较高风险 + CltRiskStatus_Level7 = 7; //预警 + CltRiskStatus_Level8 = 8; //预警 + CltRiskStatus_Level9 = 9; //预警 +} + //账户现金信息,目前仅用于期货账户 message AccCashInfo { @@ -184,27 +199,37 @@ message TrdAcc optional int32 accType = 4; //账户类型,取值见TrdAccType optional string cardNum = 5; //卡号 optional int32 securityFirm = 6; //所属券商,取值见SecurityFirm + optional int32 simAccType = 7; //模拟交易账号类型,取值见SimAccType } //账户资金结构 message Funds { - required double power = 1; //最大购买力(做多),3位精度,下同。期货账户此字段为0 + required double power = 1; //最大购买力(做多),3位精度,下同。 required double totalAssets = 2; //资产净值 - required double cash = 3; //现金, 期货账户此字段为0 - required double marketVal = 4; //证券市值, 期货账户此字段为0 - required double frozenCash = 5; //冻结金额 - required double debtCash = 6; //欠款金额, 期货账户此字段为0 - required double avlWithdrawalCash = 7; //可提金额, 期货账户此字段为0 + required double cash = 3; //现金 + required double marketVal = 4; //证券市值, 仅证券账户适用 + required double frozenCash = 5; //冻结资金 + required double debtCash = 6; //计息金额 + required double avlWithdrawalCash = 7; //现金可提,仅证券账户适用 optional int32 currency = 8; //币种,本结构体资金相关的货币类型,取值参见 Currency,期货适用 optional double availableFunds = 9; //可用资金,期货适用 optional double unrealizedPL = 10; //未实现盈亏,期货适用 optional double realizedPL = 11; //已实现盈亏,期货适用 optional int32 riskLevel = 12; //风控状态,参见 CltRiskLevel, 期货适用 - optional double initialMargin = 13; //初始保证金,期货适用 - optional double maintenanceMargin = 14; //维持保证金,期货适用 + optional double initialMargin = 13; //初始保证金 + optional double maintenanceMargin = 14; //维持保证金 repeated AccCashInfo cashInfoList = 15; //分币种的现金信息,期货适用 + + optional double maxPowerShort = 16; //卖空购买力 + optional double netCashPower = 17; //现金购买力 + optional double longMv = 18; //多头市值 + optional double shortMv = 19; //空头市值 + optional double pendingAsset = 20; //在途资产 + optional double maxWithdrawal = 21; //融资可提,仅证券账户适用 + optional int32 riskStatus = 22; //风险状态,参见 [CltRiskStatus],证券账户适用,共分 9 个等级,LEVEL1是最安全,LEVEL9是最危险 + optional double marginCallMargin = 23; // Margin Call 保证金 } //账户持仓结构 @@ -290,6 +315,8 @@ message MaxTrdQtys required double maxPositionSell = 3; //不使用融券(卖空),仅自己的持仓最大可卖整手股数 optional double maxSellShort = 4; //使用融券(卖空),最大可卖空整手股数,不包括多仓,期货不适用 optional double maxBuyBack = 5; //卖空后,需要买回的最大整手股数。因为卖空后,必须先买回已卖空的股数,还掉股票,才能再继续买多。期货不适用 + optional double longRequiredIM = 6; //开多仓每张合约初始保证金。当前仅期货和期权适用(最低 FutuOpenD 版本要求:5.0.1310) + optional double shortRequiredIM = 7; //开空仓每张合约初始保证金。当前仅期货和期权适用(最低 FutuOpenD 版本要求:5.0.1310) } //过滤条件,条件组合是"与"不是"或",用于获取订单、成交、持仓等时二次过滤 diff --git a/futu/common/pb/Trd_Common_pb2.py b/futu/common/pb/Trd_Common_pb2.py index 295cb53..2484631 100644 --- a/futu/common/pb/Trd_Common_pb2.py +++ b/futu/common/pb/Trd_Common_pb2.py @@ -21,7 +21,7 @@ name='Trd_Common.proto', package='Trd_Common', syntax='proto2', - serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\xb1\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\x12\x16\n\x0elongRequiredIM\x18\x06 \x01(\x01\x12\x17\n\x0fshortRequiredIM\x18\x07 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\xf9\x01\n\rCltRiskStatus\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\x08\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') + serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\xb1\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\x12\x16\n\x0elongRequiredIM\x18\x06 \x01(\x01\x12\x17\n\x0fshortRequiredIM\x18\x07 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\x94\x02\n\rCltRiskStatus\x12\x19\n\x15\x43ltRiskStatus_Unknown\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x08\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\tB@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -561,46 +561,50 @@ file=DESCRIPTOR, values=[ _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level1', index=0, number=0, + name='CltRiskStatus_Unknown', index=0, number=0, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level2', index=1, number=1, + name='CltRiskStatus_Level1', index=1, number=1, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level3', index=2, number=2, + name='CltRiskStatus_Level2', index=2, number=2, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level4', index=3, number=3, + name='CltRiskStatus_Level3', index=3, number=3, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level5', index=4, number=4, + name='CltRiskStatus_Level4', index=4, number=4, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level6', index=5, number=5, + name='CltRiskStatus_Level5', index=5, number=5, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level7', index=6, number=6, + name='CltRiskStatus_Level6', index=6, number=6, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level8', index=7, number=7, + name='CltRiskStatus_Level7', index=7, number=7, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level9', index=8, number=8, + name='CltRiskStatus_Level8', index=8, number=8, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level9', index=9, number=9, options=None, type=None), ], containing_type=None, options=None, serialized_start=4318, - serialized_end=4567, + serialized_end=4594, ) _sym_db.RegisterEnumDescriptor(_CLTRISKSTATUS) @@ -681,15 +685,16 @@ SimAccType_Unknown = 0 SimAccType_Stock = 1 SimAccType_Option = 2 -CltRiskStatus_Level1 = 0 -CltRiskStatus_Level2 = 1 -CltRiskStatus_Level3 = 2 -CltRiskStatus_Level4 = 3 -CltRiskStatus_Level5 = 4 -CltRiskStatus_Level6 = 5 -CltRiskStatus_Level7 = 6 -CltRiskStatus_Level8 = 7 -CltRiskStatus_Level9 = 8 +CltRiskStatus_Unknown = 0 +CltRiskStatus_Level1 = 1 +CltRiskStatus_Level2 = 2 +CltRiskStatus_Level3 = 3 +CltRiskStatus_Level4 = 4 +CltRiskStatus_Level5 = 5 +CltRiskStatus_Level6 = 6 +CltRiskStatus_Level7 = 7 +CltRiskStatus_Level8 = 8 +CltRiskStatus_Level9 = 9 From 0cec1fbe3a9ce01a2bbcd8a0555defd2cb3c2051 Mon Sep 17 00:00:00 2001 From: pspeng Date: Thu, 21 Jan 2021 10:33:43 +0800 Subject: [PATCH 15/36] =?UTF-8?q?add=20Python=20API=20=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E9=80=89=E8=82=A1=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=B4=A2=E5=8A=A1=E6=95=B0=E6=8D=AE=E5=92=8C?= =?UTF-8?q?=E7=B4=AF=E7=A7=AF=E6=95=B0=E6=8D=AE=E7=9A=84=E6=8F=90=E5=8F=96?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/examples/simple_filter_demo.py | 53 ++++++++++++++-------------- futu/quote/quote_stockfilter_info.py | 21 +++++++++++ 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/futu/examples/simple_filter_demo.py b/futu/examples/simple_filter_demo.py index 68431de..41c6f5f 100644 --- a/futu/examples/simple_filter_demo.py +++ b/futu/examples/simple_filter_demo.py @@ -3,32 +3,31 @@ """演示如何使用股票筛选功能""" from futu import * - quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111) - -field = SimpleFilter() -field.filter_min = 100 -field.filter_max = 1000 -field.stock_field = StockField.CUR_PRICE -field.is_no_filter = False -field.sort = SortDir.ASCEND - -# 可选择增加更多筛选条件 -# field2 = SimpleFilter() -# field2.filter_min = 100 -# field2.filter_max = 1000 -# field2.stock_field = StockField.VOLUME_RATIO -# field2.sort = SortDir.ASCEND -# field2.is_no_filter = False -# -# field3 = SimpleFilter() -# field3.stock_field = StockField.CUR_PRICE_TO_HIGHEST52_WEEKS_RATIO -# field3.is_no_filter = True - -ret, ls = quote_ctx.get_stock_filter(Market.HK, [field]) -last_page, all_count, ret_list = ls -print(ret_list) - -quote_ctx.close() - +simple_filter = SimpleFilter() +simple_filter.filter_min = 2 +simple_filter.filter_max = 1000 +simple_filter.stock_field = StockField.CUR_PRICE +simple_filter.is_no_filter = False +# simple_filter.sort = SortDir.ASCEND +financial_filter = FinancialFilter() +financial_filter.filter_min = 0.5 +financial_filter.filter_max = 50 +financial_filter.stock_field = StockField.CURRENT_RATIO +financial_filter.is_no_filter = False +financial_filter.sort = SortDir.ASCEND +financial_filter.quarter = FinancialQuarter.ANNUAL +ret, ls = quote_ctx.get_stock_filter(market=Market.HK, filter_list=[simple_filter, financial_filter]) # 对香港市场的股票做简单和财务筛选 +if ret == RET_OK: + last_page, all_count, ret_list = ls + print(len(ret_list), all_count, ret_list) + for item in ret_list: + print(item.stock_code) # 取股票代码 + print(item.stock_name) # 取股票名称 + print(item[simple_filter]) # 取 simple_filter 对应的变量值 + print(item.cur_price) # 效果同上,也是取 simple_filter 对应的变量值 + print(item[financial_filter]) # 取 financial_filter 对应的变量值 +else: + print('error: ', ls) +quote_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽 diff --git a/futu/quote/quote_stockfilter_info.py b/futu/quote/quote_stockfilter_info.py index f9bc7c4..9731275 100644 --- a/futu/quote/quote_stockfilter_info.py +++ b/futu/quote/quote_stockfilter_info.py @@ -34,6 +34,11 @@ def fill_request_pb(self, filter_req): filter_req.sortDir = v return RET_OK, "" + # 简单 (stock_field) 作为筛选的key + @property + def query_key(self): + return self.stock_field.lower() + class AccumulateFilter(object): def __init__(self): self.stock_field = StockField.NONE # StockField 累计属性 @@ -63,6 +68,11 @@ def fill_request_pb(self, filter_req): return RET_ERROR, 'sort is wrong. must be SortDir' filter_req.sortDir = v return RET_OK, "" + + # 累积 (stock_field + days) 作为筛选的key + @property + def query_key(self): + return (self.stock_field.lower(), self.days) class FinancialFilter(object): def __init__(self): @@ -99,6 +109,10 @@ def fill_request_pb(self, filter_req): filter_req.sortDir = v return RET_OK, "" + # 财务 (stock_field + quarter) 作为筛选的key + @property + def query_key(self): + return self.stock_field.lower(), self.quarter.lower() class FilterStockData(object): # 以下是简单数据过滤所支持的字段 @@ -226,3 +240,10 @@ def __repr__(self): else: s += (" {}:{} ".format(key, value)) return s + + # 获取筛选条件的某字段,比如FinancialFilter的筛选字段。 + def __getitem__(self, key): + if isinstance(key, SimpleFilter) or isinstance(key, FinancialFilter) or isinstance(key, AccumulateFilter): + return self.__dict__[key.query_key] + raise KeyError('Unknown key: {}'.format(key)) + From d92d176c8837984144b0e486313df53a9a2188e0 Mon Sep 17 00:00:00 2001 From: pspeng Date: Wed, 27 Jan 2021 14:45:11 +0800 Subject: [PATCH 16/36] =?UTF-8?q?add=20PythonAPI=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E7=9A=84=E6=9E=9A=E4=B8=BE=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=BAN/A?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/quote/quote_get_warrant.py | 8 +-- futu/quote/quote_query.py | 90 ++++++++++++++++----------------- futu/trade/trade_query.py | 40 +++++++-------- 3 files changed, 68 insertions(+), 70 deletions(-) diff --git a/futu/quote/quote_get_warrant.py b/futu/quote/quote_get_warrant.py index 522c10d..03f653d 100644 --- a/futu/quote/quote_get_warrant.py +++ b/futu/quote/quote_get_warrant.py @@ -209,8 +209,8 @@ def unpack_response_pb(resp): int(item.stock.market), item.stock.code) # 股票 warrant["stock_owner"] = merge_qot_mkt_stock_str( int(item.owner.market), item.owner.code) # 所属正股 - warrant["type"] = WrtType.to_string2(item.type) # 窝轮类型 - warrant["issuer"] = Issuer.to_string2(item.issuer) # 发行人 + warrant["type"] = WrtType.to_string2(item.type) if item.HasField('type') else 'N/A'# 初始化枚举类型 # 窝轮类型 + warrant["issuer"] = Issuer.to_string2(item.issuer) if item.HasField('issuer') else 'N/A'# 初始化枚举类型 # 发行人 warrant["maturity_time"] = item.maturityTime # 到期日 if item.HasField("maturityTimestamp"): """到期日时间戳""" @@ -253,7 +253,7 @@ def unpack_response_pb(resp): warrant["change_rate"] = item.changeRate if item.HasField("status"): """窝轮状态""" - warrant["status"] = WarrantStatus.to_string2(item.status) + warrant["status"] = WarrantStatus.to_string2(item.status) if item.HasField('status') else 'N/A' # 初始化枚举类型 if item.HasField("bidPrice"): """买入价""" warrant["bid_price"] = item.bidPrice @@ -332,7 +332,7 @@ def unpack_response_pb(resp): if item.HasField("inLinePriceStatus"): """界内界外,仅界内证支持该字段""" warrant["inline_price_status"] = PriceType.to_string2( - item.inLinePriceStatus) + item.inLinePriceStatus) if item.HasField('inLinePriceStatus') else 'N/A' # 初始化枚举类型 warrant_data_list.append(warrant) return RET_OK, "", (warrant_data_list, resp.s2c.lastPage, resp.s2c.allCount) diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index c30b560..3ec777f 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -73,9 +73,9 @@ def merge_pb_cnipoexdata_winningnumdata(winningnumdata): ('expiry_date_distance', 'expiryDateDistance', False, None), ('contract_nominal_value', 'contractNominalValue', False, None), ('owner_lot_multiplier', 'ownerLotMultiplier', False, None), - ('option_area_type', 'optionAreaType', False, OptionAreaType.to_string2), + ('option_area_type', 'optionAreaType', False, OptionAreaType.to_string2), # 初始化枚举类型 ('contract_multiplier', 'contractMultiplier', False, None), - ('index_option_type', 'indexOptionType', False, IndexOptionType.to_string2), + ('index_option_type', 'indexOptionType', False, IndexOptionType.to_string2), # 初始化枚举类型 ] pb_field_map_FutureBasicQotExData = [ @@ -263,7 +263,7 @@ def unpack_rsp(cls, rsp_pb): for x in raw_trading_day_list: if x.time is not None and len(x.time) > 0: trading_day_list.append( - {"time": x.time, "trade_date_type": TradeDateType.to_string2(x.tradeDateType)}) + {"time": x.time, "trade_date_type": TradeDateType.to_string2(x.tradeDateType) if x.HasField('tradeDateType') else 'N/A'})# 初始化枚举类型 return RET_OK, "", trading_day_list @@ -390,8 +390,8 @@ def unpack_rsp(cls, rsp_pb): "stock_id": record.basic.id, "name": record.basic.name, "lot_size": record.basic.lotSize, - "stock_type": SecurityType.to_string2(record.basic.secType), - "stock_child_type": WrtType.to_string2(record.warrantExData.type), + "stock_type": SecurityType.to_string2(record.basic.secType) if record.basic.HasField('secType') else 'N/A',# 初始化枚举类型 + "stock_child_type": WrtType.to_string2(record.warrantExData.type)if record.warrantExData.HasField('type') else 'N/A',# 初始化枚举类型 "stock_owner":merge_qot_mkt_stock_str( record.warrantExData.owner.market, record.warrantExData.owner.code) if record.HasField('warrantExData') else ( @@ -400,7 +400,7 @@ def unpack_rsp(cls, rsp_pb): record.optionExData.owner.code) if record.HasField('optionExData') else ""), "listing_date": "N/A" if record.HasField('optionExData') else record.basic.listTime, - "option_type": OptionType.to_string2(record.optionExData.type) if record.HasField('optionExData') else "", + "option_type": OptionType.to_string2(record.optionExData.type) if record.HasField('optionExData') else 'N/A',# 初始化枚举类型 "strike_time": record.optionExData.strikeTime, "strike_price": record.optionExData.strikePrice if record.HasField('optionExData') else NoneDataType, "suspension": record.optionExData.suspend if record.HasField('optionExData') else NoneDataType, @@ -485,21 +485,21 @@ def unpack_rsp(cls, rsp_pb): # 窝轮 统一对枚举类型,初始化 snapshot_tmp['wrt_type'] = WrtType.to_string2( - record.warrantExData.warrantType) if record.warrantExData.HasField('warrantType') else 'N/A' + record.warrantExData.warrantType) if record.warrantExData.HasField('warrantType') else 'N/A'# 初始化枚举类型 # 界内界外,仅界内证支持该字段 type=double snapshot_tmp["wrt_inline_price_status"] = PriceType.to_string2( - record.warrantExData.inLinePriceStatus) if record.warrantExData.HasField('inLinePriceStatus') else 'N/A' + record.warrantExData.inLinePriceStatus) if record.warrantExData.HasField('inLinePriceStatus') else 'N/A'# 初始化枚举类型 # 期权 统一对枚举类型,初始化 snapshot_tmp['option_type'] = OptionType.to_string2( - record.optionExData.type) if record.optionExData.HasField('type') else 'N/A' + record.optionExData.type) if record.optionExData.HasField('type') else 'N/A'# 初始化枚举类型 snapshot_tmp['index_option_type'] = IndexOptionType.to_string2( - record.optionExData.indexOptionType) if record.optionExData.HasField('indexOptionType') else 'N/A' + record.optionExData.indexOptionType) if record.optionExData.HasField('indexOptionType') else 'N/A'# 初始化枚举类型 snapshot_tmp['option_area_type'] = OptionAreaType.to_string2( - record.optionExData.optionAreaType) if record.optionExData.HasField('optionAreaType') else 'N/A' + record.optionExData.optionAreaType) if record.optionExData.HasField('optionAreaType') else 'N/A'# 初始化枚举类型 # 基金 统一对枚举类型,初始化 - snapshot_tmp['trust_assetClass'] = AssetClass.to_string2(record.trustExData.assetClass) if record.trustExData.HasField('assetClass') else 'N/A' + snapshot_tmp['trust_assetClass'] = AssetClass.to_string2(record.trustExData.assetClass) if record.trustExData.HasField('assetClass') else 'N/A'# 初始化枚举类型 # 2019.02.25 增加一批数据 if record.basic.HasField("enableMargin"): @@ -537,7 +537,7 @@ def unpack_rsp(cls, rsp_pb): # 盘后成交额 type=double snapshot_tmp["after_turnover"] = record.basic.afterMarket.turnover # 股票状态 type=str - snapshot_tmp["sec_status"] = SecurityStatus.to_string2(record.basic.secStatus) if record.basic.HasField('secStatus') else 'N/A' + snapshot_tmp["sec_status"] = SecurityStatus.to_string2(record.basic.secStatus) if record.basic.HasField('secStatus') else 'N/A'# 初始化枚举类型 # 5分组收盘价 type=double snapshot_tmp["close_price_5min"] = record.basic.closePrice5Minute @@ -808,7 +808,7 @@ def unpack_rsp(cls, rsp_pb): record.basic.security.market, record.basic.security.code) stock_tmp['stock_name'] = record.basic.name stock_tmp['list_time'] = record.basic.listTime - stock_tmp['stock_type'] = SecurityType.to_string2(record.basic.secType) + stock_tmp['stock_type'] = SecurityType.to_string2(record.basic.secType) if record.basic.HasField('secType') else 'N/A' # 初始化枚举类型 stock_tmp['main_contract'] = record.futureExData.isMainContract stock_tmp['last_trade_time'] = record.futureExData.lastTradeTime stock_list.append(stock_tmp) @@ -1156,15 +1156,15 @@ def parse_pb_BasicQot(pb): 'suspension': pb.isSuspended, 'listing_date': "N/A" if pb.HasField('optionExData') else pb.listTime, 'price_spread': pb.priceSpread, - 'dark_status': DarkStatus.to_string2(pb.darkStatus) if pb.HasField('darkStatus') else 'N/A', + 'dark_status': DarkStatus.to_string2(pb.darkStatus) if pb.HasField('darkStatus') else 'N/A',# 初始化枚举类型 'sec_status': SecurityStatus.to_string2(pb.secStatus) if pb.HasField( - 'secStatus') else 'N/A', + 'secStatus') else 'N/A',# 初始化枚举类型 } if pb.HasField('optionExData'): set_item_from_pb(item, pb.optionExData, pb_field_map_OptionBasicQotExData) else: - set_item_none(item, pb_field_map_OptionBasicQotExData) # 这里设置了 'N/A' + set_item_none(item, pb_field_map_OptionBasicQotExData) # 这里设置了 'N/A' # 初始化枚举类型 if pb.HasField('futureExData'): set_item_from_pb(item, pb.futureExData, pb_field_map_FutureBasicQotExData) @@ -1281,10 +1281,10 @@ def unpack_rsp(cls, rsp_pb): "price": record.price, "volume": record.volume, "turnover": record.turnover, - "ticker_direction": TickerDirect.to_string2(record.dir), + "ticker_direction": TickerDirect.to_string2(record.dir) if record.HasField('dir') else 'N/A',# 初始化枚举类型 "sequence": record.sequence, "recv_timestamp":record.recvTime, - "type": TickerType.to_string2(record.type), + "type": TickerType.to_string2(record.type) if record.HasField('type') else 'N/A',# 初始化枚举类型 "push_data_type": PushDataType.to_string2(record.pushDataType), } for record in raw_ticker_list] return RET_OK, "", ticker_list @@ -1528,21 +1528,19 @@ def unpack_rsp(cls, rsp_pb): return RET_ERROR, rsp_pb.retMsg, None state = rsp_pb.s2c - program_status_type = ProgramStatusType.NONE + program_status_type = ProgramStatusType.to_string2( + state.programStatus.type) if state.HasField('programStatus') else 'N/A'# 初始化枚举类型 program_status_desc = "" - if state.HasField('programStatus'): - program_status_type = ProgramStatusType.to_string2( - state.programStatus.type) - if state.programStatus.HasField("strExtDesc"): - program_status_desc = state.programStatus.strExtDesc + if state.programStatus.HasField("strExtDesc"): + program_status_desc = state.programStatus.strExtDesc state_dict = { - 'market_sz': MarketState.to_string2(state.marketSZ), - 'market_us': MarketState.to_string2(state.marketUS), - 'market_sh': MarketState.to_string2(state.marketSH), - 'market_hk': MarketState.to_string2(state.marketHK), - 'market_hkfuture': MarketState.to_string2(state.marketHKFuture), - 'market_usfuture': MarketState.to_string2(state.marketUSFuture), + 'market_sz': MarketState.to_string2(state.marketSZ) if state.HasField('marketSZ') else 'N/A',# 初始化枚举类型 + 'market_us': MarketState.to_string2(state.marketUS) if state.HasField('marketUS') else 'N/A',# 初始化枚举类型 + 'market_sh': MarketState.to_string2(state.marketSH) if state.HasField('marketSH') else 'N/A',# 初始化枚举类型 + 'market_hk': MarketState.to_string2(state.marketHK) if state.HasField('marketHK') else 'N/A',# 初始化枚举类型 + 'market_hkfuture': MarketState.to_string2(state.marketHKFuture) if state.HasField('marketHKFuture') else 'N/A',# 初始化枚举类型 + 'market_usfuture': MarketState.to_string2(state.marketUSFuture) if state.HasField('marketUSFuture') else 'N/A',# 初始化枚举类型 'server_ver': str(state.serverVer), 'trd_logined': state.trdLogined, 'timestamp': str(state.time), @@ -1667,12 +1665,12 @@ def unpack_rsp(cls, rsp_pb): info.basic.security.market, info.basic.security.code) # item['stock_id'] = info.basic.id data['lot_size'] = info.basic.lotSize - data['stock_type'] = SecurityType.to_string2(info.basic.secType) + data['stock_type'] = SecurityType.to_string2(info.basic.secType) if info.basic.HasField('secType') else 'N/A'# 初始化枚举类型 data['stock_name'] = info.basic.name data['list_time'] = info.basic.listTime if info.HasField('warrantExData'): data['wrt_valid'] = True - data['wrt_type'] = WrtType.to_string2(info.warrantExData.type) + data['wrt_type'] = WrtType.to_string2(info.warrantExData.type) if info.warrantExData.HasField('type') else 'N/A'# 初始化枚举类型 data['wrt_code'] = merge_qot_mkt_stock_str(info.warrantExData.owner.market, info.warrantExData.owner.code) else: @@ -1739,7 +1737,7 @@ def unpack_rsp(cls, rsp_pb): 'code': merge_qot_mkt_stock_str(record.security.market, record.security.code), 'plate_code': merge_qot_mkt_stock_str(plate_info.plate.market, plate_info.plate.code), 'plate_name': str(plate_info.name), - 'plate_type': Plate.to_string2(plate_info.plateType) + 'plate_type': Plate.to_string2(plate_info.plateType) if plate_info.HasField('plateType') else 'N/A' # 初始化枚举类型 } data_list.append(quote_list) @@ -1964,14 +1962,14 @@ def unpack_rsp(cls, rsp_pb): "stock_id": record.basic.id, "name": record.basic.name, "lot_size": record.basic.lotSize, - "stock_type": SecurityType.to_string2(record.basic.secType), - "option_type": OptionType.to_string2(record.optionExData.type) if record.HasField('optionExData') else "", + "stock_type": SecurityType.to_string2(record.basic.secType) if record.basic.HasField('secType') else NoneDataType,# 初始化枚举类型 + "option_type": OptionType.to_string2(record.optionExData.type) if record.HasField('optionExData') else NoneDataType,# 初始化枚举类型 "stock_owner": merge_qot_mkt_stock_str(int(record.optionExData.owner.market), record.optionExData.owner.code) if record.HasField('optionExData') else "", "strike_time": record.optionExData.strikeTime, "strike_price": record.optionExData.strikePrice if record.HasField('optionExData') else NoneDataType, "suspension": record.optionExData.suspend if record.HasField('optionExData') else NoneDataType, - "index_option_type": IndexOptionType.to_string2(record.optionExData.indexOptionType) if record.HasField('optionExData') else NoneDataType, + "index_option_type": IndexOptionType.to_string2(record.optionExData.indexOptionType) if record.HasField('optionExData') else NoneDataType,# 初始化枚举类型 } data_list.append(quote_list) @@ -2567,8 +2565,8 @@ def unpack(cls, rsp_pb): "stock_id": record.basic.id, "name": record.basic.name, "lot_size": record.basic.lotSize, - "stock_type": SecurityType.to_string2(record.basic.secType), - "stock_child_type": WrtType.to_string2(record.warrantExData.type), + "stock_type": SecurityType.to_string2(record.basic.secType) if record.basic.HasField('secType') else 'N/A',# 初始化枚举类型, + "stock_child_type": WrtType.to_string2(record.warrantExData.type) if record.warrantExData.HasField('type') else 'N/A',# 初始化枚举类型 "stock_owner": merge_qot_mkt_stock_str( record.warrantExData.owner.market, record.warrantExData.owner.code) if record.HasField('warrantExData') else ( @@ -2577,7 +2575,7 @@ def unpack(cls, rsp_pb): record.optionExData.owner.code) if record.HasField('optionExData') else ""), "listing_date": "N/A" if record.HasField('optionExData') else record.basic.listTime, - "option_type": OptionType.to_string2(record.optionExData.type) if record.HasField('optionExData') else "", + "option_type": OptionType.to_string2(record.optionExData.type) if record.optionExData.HasField('type') else 'N/A',# 初始化枚举类型, "strike_time": record.optionExData.strikeTime, "strike_price": record.optionExData.strikePrice if record.HasField( 'optionExData') else NoneDataType, @@ -2914,13 +2912,13 @@ def unpack_rsp(cls, rsp_pb): rsp_pb.s2c.security.code) res['price'] = rsp_pb.s2c.price res['change_rate'] = rsp_pb.s2c.changeRate - res['market_status'] = PriceReminderMarketStatus.to_string2(rsp_pb.s2c.marketStatus) + res['market_status'] = PriceReminderMarketStatus.to_string2(rsp_pb.s2c.marketStatus) if rsp_pb.s2c.HasField('marketStatus') else 'N/A' # 初始化枚举类型 res['content'] = rsp_pb.s2c.content res['note'] = rsp_pb.s2c.note if rsp_pb.s2c.key is not None: res['key'] = rsp_pb.s2c.key if rsp_pb.s2c.type is not None: - res['reminder_type'] = PriceReminderType.to_string2(rsp_pb.s2c.type) + res['reminder_type'] = PriceReminderType.to_string2(rsp_pb.s2c.type) if rsp_pb.s2c.HasField('type') else 'N/A' # 初始化枚举类型 if rsp_pb.s2c.setValue is not None: res['set_value'] = rsp_pb.s2c.setValue if rsp_pb.s2c.curValue is not None: @@ -3022,9 +3020,9 @@ def unpack(cls, rsp_pb): # 每个提醒的唯一标识 type = int64 data["key"] = sub_item.key # Qot_Common::PriceReminderType 提醒类型 type = int32 - data["reminder_type"] = PriceReminderType.to_string2(sub_item.type) + data["reminder_type"] = PriceReminderType.to_string2(sub_item.type) if sub_item.HasField('type') else 'N/A' # 初始化枚举类型 # Qot_Common::PriceReminderFreq 提醒频率类型 type = int32 - data["reminder_freq"] = PriceReminderFreq.to_string2(sub_item.freq) + data["reminder_freq"] = PriceReminderFreq.to_string2(sub_item.freq) if sub_item.HasField('freq') else 'N/A' # 初始化枚举类型 # 提醒参数值 type = double data["value"] = sub_item.value # 该提醒设置是否生效。false不生效,true生效 type = bool @@ -3066,7 +3064,7 @@ def unpack(cls, rsp_pb): # 自选股分组名字 type = string data["group_name"] = item.groupName # GroupType,自选股分组类型。 type = int32 - data["group_type"] = UserSecurityGroupType.to_string2(item.groupType) + data["group_type"] = UserSecurityGroupType.to_string2(item.groupType) if item.HasField('groupType') else 'N/A' # 初始化枚举类型 ret_list.append(data) return RET_OK, "", ret_list @@ -3122,5 +3120,5 @@ def unpack(cls, rsp_pb): # 股票名称 type = string data["stock_name"] = item.name # Qot_Common.QotMarketState,市场状态 type = int32 - data["market_state"] = MarketState.to_string2(item.marketState) + data["market_state"] = MarketState.to_string2(item.marketState)if item.HasField('marketState') else 'N/A' # 初始化枚举类型 return RET_OK, "", ret_list \ No newline at end of file diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index dd87e36..016165f 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -45,12 +45,12 @@ def unpack_rsp(cls, rsp_pb): raw_acc_list = rsp_pb.s2c.accList acc_list = [{ 'acc_id': record.accID, - 'trd_env': TrdEnv.to_string2(record.trdEnv), + 'trd_env': TrdEnv.to_string2(record.trdEnv) if record.HasField('trdEnv') else 'N/A',# 初始化枚举类型 'trdMarket_list': [TrdMarket.to_string2(trdMkt) for trdMkt in record.trdMarketAuthList], - 'acc_type': TrdAccType.to_string2(record.accType) if record.HasField("accType") else TrdAccType.NONE, + 'acc_type': TrdAccType.to_string2(record.accType) if record.HasField("accType") else TrdAccType.NONE,# 初始化枚举类型 'card_num': record.cardNum if record.HasField("cardNum") else "N/A", - 'security_firm': SecurityFirm.to_string2(record.securityFirm) if record.HasField('securityFirm') else SecurityFirm.NONE, - 'sim_acc_type': SimAccType.to_string2(record.simAccType) if record.HasField('simAccType') else SimAccType.NONE + 'security_firm': SecurityFirm.to_string2(record.securityFirm) if record.HasField('securityFirm') else SecurityFirm.NONE,# 初始化枚举类型 + 'sim_acc_type': SimAccType.to_string2(record.simAccType) if record.HasField('simAccType') else SimAccType.NONE# 初始化枚举类型 } for record in raw_acc_list] return RET_OK, "", acc_list @@ -144,12 +144,12 @@ def unpack_rsp(cls, rsp_pb): 'frozen_cash': raw_funds.frozenCash, 'avl_withdrawal_cash': raw_funds.avlWithdrawalCash if raw_funds.HasField('avlWithdrawalCash') else NoneDataValue, 'max_withdrawal': raw_funds.maxWithdrawal if raw_funds.HasField('maxWithdrawal') else NoneDataValue, - 'currency': Currency.to_string2(raw_funds.currency) if raw_funds.HasField('currency') else Currency.NONE, + 'currency': Currency.to_string2(raw_funds.currency) if raw_funds.HasField('currency') else Currency.NONE,# 初始化枚举类型 'available_funds': raw_funds.availableFunds if raw_funds.HasField('availableFunds') else NoneDataValue, 'unrealized_pl': raw_funds.unrealizedPL if raw_funds.HasField('unrealizedPL') else NoneDataValue, 'realized_pl': raw_funds.realizedPL if raw_funds.HasField('realizedPL') else NoneDataValue, - 'risk_level': CltRiskLevel.to_string2(raw_funds.riskLevel) if raw_funds.HasField('riskLevel') else CltRiskLevel.NONE, - 'risk_status': CltRiskStatus.to_string2(raw_funds.riskStatus) if raw_funds.HasField('riskStatus') else CltRiskStatus.NONE, + 'risk_level': CltRiskLevel.to_string2(raw_funds.riskLevel) if raw_funds.HasField('riskLevel') else CltRiskLevel.NONE,# 初始化枚举类型 + 'risk_status': CltRiskStatus.to_string2(raw_funds.riskStatus) if raw_funds.HasField('riskStatus') else CltRiskStatus.NONE,# 初始化枚举类型 'initial_margin': raw_funds.initialMargin if raw_funds.HasField('initialMargin') else NoneDataValue, 'margin_call_margin': raw_funds.marginCallMargin if raw_funds.HasField('marginCallMargin') else NoneDataValue, 'maintenance_margin': raw_funds.maintenanceMargin if raw_funds.HasField('maintenanceMargin') else NoneDataValue, @@ -220,7 +220,7 @@ def unpack_rsp(cls, rsp_pb): "today_pl_val": position.td_plVal if position.HasField('td_plVal') else NoneDataValue, "today_sell_qty": position.td_sellQty if position.HasField('td_sellQty') else NoneDataValue, "today_sell_val": position.td_sellVal if position.HasField('td_sellVal') else NoneDataValue, - "position_side": PositionSide.to_string2(position.positionSide), + "position_side": PositionSide.to_string2(position.positionSide) if position.HasField('positionSide') else 'N/A',# 初始化枚举类型 "unrealized_pl": position.unrealizedPL if position.HasField('unrealizedPL') else NoneDataValue, "realized_pl": position.realizedPL if position.HasField('realizedPL') else NoneDataValue } for position in raw_position_list] @@ -267,9 +267,9 @@ def parse_order(cls, rsp_pb, order): order_dict = { "code": merge_trd_mkt_stock_str(order.secMarket, order.code), "stock_name": order.name, - "trd_side": TrdSide.to_string2(order.trdSide), - "order_type": OrderType.to_string2(order.orderType), - "order_status": OrderStatus.to_string2(order.orderStatus), + "trd_side": TrdSide.to_string2(order.trdSide) if order.HasField('trdSide') else 'N/A',# 初始化枚举类型 + "order_type": OrderType.to_string2(order.orderType) if order.HasField('orderType') else 'N/A',# 初始化枚举类型 + "order_status": OrderStatus.to_string2(order.orderStatus) if order.HasField('orderStatus') else 'N/A',# 初始化枚举类型 "order_id": str(order.orderID), "qty": order.qty, "price": order.price, @@ -279,7 +279,7 @@ def parse_order(cls, rsp_pb, order): "dealt_avg_price": order.fillAvgPrice, "last_err_msg": order.lastErrMsg, "remark": order.remark if order.HasField("remark") else "", - "time_in_force": TimeInForce.to_string2(order.timeInForce), + "time_in_force": TimeInForce.to_string2(order.timeInForce) if order.HasField('timeInForce') else 'N/A',# 初始化枚举类型 "fill_outside_rth": order.fillOutsideRTH if order.HasField("fillOutsideRTH") else 'N/A' } return order_dict @@ -389,7 +389,7 @@ def unpack_rsp(cls, rsp_pb): order_id = str(rsp_pb.s2c.orderID) modify_order_list = [{ - 'trd_env': TrdEnv.to_string2(rsp_pb.s2c.header.trdEnv), + 'trd_env': TrdEnv.to_string2(rsp_pb.s2c.header.trdEnv) if rsp_pb.s2c.header.HasField('trdEnv') else 'N/A',# 初始化枚举类型 'order_id': order_id }] @@ -458,7 +458,7 @@ def parse_deal(cls, rsp_pb, deal): "order_id": str(deal.orderID) if deal.HasField('orderID') else NoneDataValue, "qty": deal.qty, "price": deal.price, - "trd_side": TrdSide.to_string2(deal.trdSide), + "trd_side": TrdSide.to_string2(deal.trdSide) if deal.HasField('trdSide') else 'N/A',# 初始化枚举类型 "create_time": deal.createTime, "counter_broker_id": deal.counterBrokerID if deal.HasField('counterBrokerID') else NoneDataValue, "counter_broker_name": deal.counterBrokerName if deal.HasField('counterBrokerName') else NoneDataValue, @@ -518,9 +518,9 @@ def unpack_rsp(cls, rsp_pb): order_list = [{ "code": merge_trd_mkt_stock_str(order.secMarket, order.code), "stock_name": order.name, - "trd_side": TrdSide.to_string2(order.trdSide), - "order_type": OrderType.to_string2(order.orderType), - "order_status": OrderStatus.to_string2(order.orderStatus), + "trd_side": TrdSide.to_string2(order.trdSide) if order.HasField('trdSide') else 'N/A',# 初始化枚举类型 + "order_type": OrderType.to_string2(order.orderType) if order.HasField('orderType') else 'N/A',# 初始化枚举类型 + "order_status": OrderStatus.to_string2(order.orderStatus) if order.HasField('orderStatus') else 'N/A',# 初始化枚举类型 "order_id": str(order.orderID), "qty": order.qty, "price": order.price, @@ -530,7 +530,7 @@ def unpack_rsp(cls, rsp_pb): "dealt_avg_price": order.fillAvgPrice, "last_err_msg": order.lastErrMsg, "remark": order.remark if order.HasField("remark") else "", - "time_in_force": TimeInForce.to_string2(order.timeInForce), + "time_in_force": TimeInForce.to_string2(order.timeInForce) if order.HasField('timeInForce') else 'N/A',# 初始化枚举类型 "fill_outside_rth": order.fillOutsideRTH if order.HasField("fillOutsideRTH") else 'N/A' } for order in raw_order_list] return RET_OK, "", order_list @@ -573,11 +573,11 @@ def unpack_rsp(cls, rsp_pb): "order_id": str(deal.orderID) if deal.HasField('orderID') else "", "qty": deal.qty, "price": deal.price, - "trd_side": TrdSide.to_string2(deal.trdSide), + "trd_side": TrdSide.to_string2(deal.trdSide) if deal.HasField('trdSide') else 'N/A',# 初始化枚举类型 "create_time": deal.createTime, "counter_broker_id": deal.counterBrokerID if deal.HasField('counterBrokerID') else "", "counter_broker_name": deal.counterBrokerName, - "status": DealStatus.to_string2(deal.status) if deal.HasField('status') else 'N/A' + "status": DealStatus.to_string2(deal.status) if deal.HasField('status') else 'N/A'# 初始化枚举类型 } for deal in raw_deal_list] return RET_OK, "", deal_list From 682ba023a477b69e2641f115f1b3bb1d5cda1be9 Mon Sep 17 00:00:00 2001 From: alexqli Date: Wed, 3 Feb 2021 18:25:49 +0800 Subject: [PATCH 17/36] =?UTF-8?q?=E8=A7=A3=E9=94=81=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/pb/Trd_UnlockTrade_pb2.py | 23 +++++++++++++++-------- futu/trade/open_trade_context.py | 3 ++- futu/trade/trade_query.py | 3 ++- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/futu/common/pb/Trd_UnlockTrade_pb2.py b/futu/common/pb/Trd_UnlockTrade_pb2.py index c99a3b9..aaa1b38 100644 --- a/futu/common/pb/Trd_UnlockTrade_pb2.py +++ b/futu/common/pb/Trd_UnlockTrade_pb2.py @@ -20,7 +20,7 @@ name='Trd_UnlockTrade.proto', package='Trd_UnlockTrade', syntax='proto2', - serialized_pb=_b('\n\x15Trd_UnlockTrade.proto\x12\x0fTrd_UnlockTrade\x1a\x0c\x43ommon.proto\"%\n\x03\x43\x32S\x12\x0e\n\x06unlock\x18\x01 \x02(\x08\x12\x0e\n\x06pwdMD5\x18\x02 \x01(\t\"\x05\n\x03S2C\",\n\x07Request\x12!\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x14.Trd_UnlockTrade.C2S\"e\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12!\n\x03s2c\x18\x04 \x01(\x0b\x32\x14.Trd_UnlockTrade.S2CBE\n\x13\x63om.futu.openapi.pbZ.github.com/futuopen/ftapi4go/pb/trdunlocktrade') + serialized_pb=_b('\n\x15Trd_UnlockTrade.proto\x12\x0fTrd_UnlockTrade\x1a\x0c\x43ommon.proto\";\n\x03\x43\x32S\x12\x0e\n\x06unlock\x18\x01 \x02(\x08\x12\x0e\n\x06pwdMD5\x18\x02 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x03 \x01(\x05\"\x05\n\x03S2C\",\n\x07Request\x12!\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x14.Trd_UnlockTrade.C2S\"e\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12!\n\x03s2c\x18\x04 \x01(\x0b\x32\x14.Trd_UnlockTrade.S2CBE\n\x13\x63om.futu.openapi.pbZ.github.com/futuopen/ftapi4go/pb/trdunlocktrade') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -48,6 +48,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='securityFirm', full_name='Trd_UnlockTrade.C2S.securityFirm', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -61,7 +68,7 @@ oneofs=[ ], serialized_start=56, - serialized_end=93, + serialized_end=115, ) @@ -84,8 +91,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=95, - serialized_end=100, + serialized_start=117, + serialized_end=122, ) @@ -115,8 +122,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=102, - serialized_end=146, + serialized_start=124, + serialized_end=168, ) @@ -167,8 +174,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=148, - serialized_end=249, + serialized_start=170, + serialized_end=271, ) _REQUEST.fields_by_name['c2s'].message_type = _C2S diff --git a/futu/trade/open_trade_context.py b/futu/trade/open_trade_context.py index 2eb0d71..38d272e 100644 --- a/futu/trade/open_trade_context.py +++ b/futu/trade/open_trade_context.py @@ -118,7 +118,8 @@ def unlock_trade(self, password=None, password_md5=None, is_unlock=True): kargs = { 'is_unlock': is_unlock, 'password_md5': md5_val, - 'conn_id': self.get_sync_conn_id() + 'conn_id': self.get_sync_conn_id(), + 'security_firm': self.__security_firm } ret_code, msg, _ = query_processor(**kargs) diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index 016165f..fdeb871 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -62,12 +62,13 @@ def __init__(self): pass @classmethod - def pack_req(cls, is_unlock, password_md5, conn_id): + def pack_req(cls, is_unlock, password_md5, conn_id, security_firm): """Convert from user request for trading days to PLS request""" from futu.common.pb.Trd_UnlockTrade_pb2 import Request req = Request() req.c2s.unlock = is_unlock req.c2s.pwdMD5 = password_md5 + _, req.c2s.securityFirm = SecurityFirm.to_number(security_firm) return pack_pb_req(req, ProtoId.Trd_UnlockTrade, conn_id) From 2e5ff32c5e377fb9962804e02deeeea3484927f8 Mon Sep 17 00:00:00 2001 From: byblehua Date: Tue, 23 Feb 2021 16:45:53 +0800 Subject: [PATCH 18/36] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index bb3f7ac..ef4c10f 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -4.0.1300 +5.0.1310 From 4b8ec963c644a8d679a6f5ec40778d42b93d5bbb Mon Sep 17 00:00:00 2001 From: byblehua Date: Mon, 8 Mar 2021 09:36:11 +0800 Subject: [PATCH 19/36] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index ef4c10f..500a0f1 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.0.1310 +5.0.1320 From 4e42d443989265f9498a29bcf4af9136198461d6 Mon Sep 17 00:00:00 2001 From: byblehua Date: Mon, 8 Mar 2021 09:37:56 +0800 Subject: [PATCH 20/36] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B75.1.1320?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index 500a0f1..2fef54d 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.0.1320 +5.1.1320 From 0b546ad262d331ab9a71061f7c6a4f69de57021f Mon Sep 17 00:00:00 2001 From: alexqli Date: Mon, 8 Mar 2021 17:10:33 +0800 Subject: [PATCH 21/36] =?UTF-8?q?=E6=9B=B4=E6=96=B0proto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/pb/Qot_GetOptionChain.proto | 52 ++--- futu/common/pb/Qot_GetSecuritySnapshot.proto | 18 +- futu/common/pb/Qot_GetWarrant.proto | 114 +++++------ futu/common/pb/Qot_SetPriceReminder.proto | 8 +- futu/common/pb/Qot_StockFilter.proto | 193 +++++++++---------- futu/common/pb/Qot_StockFilter_pb2.py | 60 +++--- futu/common/pb/Trd_Common.proto | 54 ++++-- futu/common/pb/Trd_Common_pb2.py | 112 ++++++----- futu/common/pb/Trd_GetMaxTrdQtys.proto | 2 +- futu/common/pb/Trd_ModifyOrder.proto | 4 +- futu/common/pb/Trd_PlaceOrder.proto | 4 +- futu/common/pb/Trd_UnlockTrade.proto | 1 + 12 files changed, 331 insertions(+), 291 deletions(-) diff --git a/futu/common/pb/Qot_GetOptionChain.proto b/futu/common/pb/Qot_GetOptionChain.proto index 28ba4ac..3beb744 100644 --- a/futu/common/pb/Qot_GetOptionChain.proto +++ b/futu/common/pb/Qot_GetOptionChain.proto @@ -16,49 +16,49 @@ enum OptionCondType //以下为数据字段筛选,可选字段,不填表示不过滤 message DataFilter { - optional double impliedVolatilityMin = 1; //隐含波动率过滤起点 - optional double impliedVolatilityMax = 2; //隐含波动率过滤终点 + optional double impliedVolatilityMin = 1; //隐含波动率过滤起点(精确到小数点后 0 位,超出部分会被舍弃) + optional double impliedVolatilityMax = 2; //隐含波动率过滤终点(精确到小数点后 0 位,超出部分会被舍弃) - optional double deltaMin = 3; //希腊值 Delta过滤起点 - optional double deltaMax = 4; //希腊值 Delta过滤终点 + optional double deltaMin = 3; //希腊值 Delta过滤起点(精确到小数点后 3 位,超出部分会被舍弃) + optional double deltaMax = 4; //希腊值 Delta过滤终点(精确到小数点后 3 位,超出部分会被舍弃) - optional double gammaMin = 5; //希腊值 Gamma过滤起点 - optional double gammaMax = 6; //希腊值 Gamma过滤终点 + optional double gammaMin = 5; //希腊值 Gamma过滤起点(精确到小数点后 3 位,超出部分会被舍弃) + optional double gammaMax = 6; //希腊值 Gamma过滤终点(精确到小数点后 3 位,超出部分会被舍弃) - optional double vegaMin = 7; //希腊值 Vega过滤起点 - optional double vegaMax = 8; //希腊值 Vega过滤终点 + optional double vegaMin = 7; //希腊值 Vega过滤起点(精确到小数点后 3 位,超出部分会被舍弃) + optional double vegaMax = 8; //希腊值 Vega过滤终点(精确到小数点后 3 位,超出部分会被舍弃) - optional double thetaMin = 9; //希腊值 Theta过滤起点 - optional double thetaMax = 10; //希腊值 Theta过滤终点 + optional double thetaMin = 9; //希腊值 Theta过滤起点(精确到小数点后 3 位,超出部分会被舍弃) + optional double thetaMax = 10; //希腊值 Theta过滤终点(精确到小数点后 3 位,超出部分会被舍弃) - optional double rhoMin = 11; //希腊值 Rho过滤起点 - optional double rhoMax = 12; //希腊值 Rho过滤终点 + optional double rhoMin = 11; //希腊值 Rho过滤起点(精确到小数点后 3 位,超出部分会被舍弃) + optional double rhoMax = 12; //希腊值 Rho过滤终点(精确到小数点后 3 位,超出部分会被舍弃) - optional double netOpenInterestMin = 13; //净未平仓合约数过滤起点 - optional double netOpenInterestMax = 14; //净未平仓合约数过滤终点 + optional double netOpenInterestMin = 13; //净未平仓合约数过滤起点(精确到小数点后 0 位,超出部分会被舍弃) + optional double netOpenInterestMax = 14; //净未平仓合约数过滤终点(精确到小数点后 0 位,超出部分会被舍弃) - optional double openInterestMin = 15; //未平仓合约数过滤起点 - optional double openInterestMax = 16; //未平仓合约数过滤终点 + optional double openInterestMin = 15; //未平仓合约数过滤起点(精确到小数点后 0 位,超出部分会被舍弃) + optional double openInterestMax = 16; //未平仓合约数过滤终点(精确到小数点后 0 位,超出部分会被舍弃) - optional double volMin = 17; //成交量过滤起点 - optional double volMax = 18; //成交量过滤终点 + optional double volMin = 17; //成交量过滤起点(精确到小数点后 0 位,超出部分会被舍弃) + optional double volMax = 18; //成交量过滤终点(精确到小数点后 0 位,超出部分会被舍弃) } message C2S { - required Qot_Common.Security owner = 1; //期权标的股,目前仅支持传入港美正股以及恒指国指 - optional int32 indexOptionType = 6; //Qot_Common.IndexOptionType, 指数期权的类型,仅用于恒指国指 - optional int32 type = 2; //Qot_Common.OptionType,期权类型,可选字段,不指定则表示都返回 - optional int32 condition = 3; //OptionCondType,价内价外,可选字段,不指定则表示都返回 + required Qot_Common.Security owner = 1; //期权标的股,目前仅支持传入港美正股以及恒指国指 + optional int32 indexOptionType = 6; //Qot_Common.IndexOptionType,指数期权的类型,仅用于恒指国指 + optional int32 type = 2; //Qot_Common.OptionType,期权类型,可选字段,不指定则表示都返回 + optional int32 condition = 3; //OptionCondType,价内价外,可选字段,不指定则表示都返回 required string beginTime = 4; //期权到期日开始时间 - required string endTime = 5; //期权到期日结束时间,时间跨度最多一个月 + required string endTime = 5; //期权到期日结束时间,时间跨度最多一个月 optional DataFilter dataFilter = 7; //数据字段筛选 } message OptionItem { - optional Qot_Common.SecurityStaticInfo call = 1; //看涨,不一定有该字段,由请求条件决定 - optional Qot_Common.SecurityStaticInfo put = 2; //看跌,不一定有该字段,由请求条件决定 + optional Qot_Common.SecurityStaticInfo call = 1; //看涨期权,不一定有该字段,由请求条件决定 + optional Qot_Common.SecurityStaticInfo put = 2; //看跌期权,不一定有该字段,由请求条件决定 } message OptionChain @@ -80,7 +80,7 @@ message Request message Response { - required int32 retType = 1 [default = -400]; //RetType,返回结果 + required int32 retType = 1 [default = -400]; //RetType,返回结果 optional string retMsg = 2; optional int32 errCode = 3; optional S2C s2c = 4; diff --git a/futu/common/pb/Qot_GetSecuritySnapshot.proto b/futu/common/pb/Qot_GetSecuritySnapshot.proto index 55f8d2d..15da933 100644 --- a/futu/common/pb/Qot_GetSecuritySnapshot.proto +++ b/futu/common/pb/Qot_GetSecuritySnapshot.proto @@ -79,16 +79,14 @@ message OptionSnapshotExData required double vega = 11; //希腊值 Vega required double theta = 12; //希腊值 Theta required double rho = 13; //希腊值 Rho - optional double strikeTimestamp = 14; //行权日时间戳 - - //以下字段仅支持港股期权 - optional int32 indexOptionType = 15; //Qot_Common.IndexOptionType, 指数期权的类型,仅在指数期权有效 - optional int32 netOpenInterest = 16; //净未平仓合约数 - optional int32 expiryDateDistance = 17; //距离到期日天数 - optional double contractNominalValue = 18; //合约名义金额 - optional double ownerLotMultiplier = 19; //相等正股手数,指数期权无该字段 - optional int32 optionAreaType = 20; //OptionAreaType, 期权地区类型 - optional double contractMultiplier = 21; //合约乘数,指数期权特有字段 + optional double strikeTimestamp = 14; //行权日时间戳 + optional int32 indexOptionType = 15; //Qot_Common.IndexOptionType,指数期权类型 + optional int32 netOpenInterest = 16; //净未平仓合约数,仅港股期权适用 + optional int32 expiryDateDistance = 17; //距离到期日天数,负数表示已过期 + optional double contractNominalValue = 18; //合约名义金额,仅港股期权适用 + optional double ownerLotMultiplier = 19; //相等正股手数,指数期权无该字段,仅港股期权适用 + optional int32 optionAreaType = 20; //Qot_Common.OptionAreaType,期权类型(按行权时间) + optional double contractMultiplier = 21; //合约乘数 } // 指数类型额外数据 diff --git a/futu/common/pb/Qot_GetWarrant.proto b/futu/common/pb/Qot_GetWarrant.proto index 0d655fd..af060cf 100644 --- a/futu/common/pb/Qot_GetWarrant.proto +++ b/futu/common/pb/Qot_GetWarrant.proto @@ -10,97 +10,97 @@ message C2S { required int32 begin = 1; //数据起始点 required int32 num = 2; //请求数据个数,最大200 - required int32 sortField = 3;//Qot_Common.SortField,根据哪个字段排序 - required bool ascend = 4;//升序ture, 降序false + required int32 sortField = 3;//Qot_Common.SortField,根据哪个字段排序 + required bool ascend = 4;//升序ture,降序false //以下为筛选条件,可选字段,不填表示不过滤 optional Qot_Common.Security owner = 5; //所属正股 - repeated int32 typeList = 6; //Qot_Common.WarrantType,窝轮类型过滤列表 - repeated int32 issuerList = 7; //Qot_Common.Issuer,发行人过滤列表 - optional string maturityTimeMin = 8; //到期日,到期日范围的开始时间戳 + repeated int32 typeList = 6; //Qot_Common.WarrantType,窝轮类型过滤列表 + repeated int32 issuerList = 7; //Qot_Common.Issuer,发行人过滤列表 + optional string maturityTimeMin = 8; //到期日,到期日范围的开始时间戳 optional string maturityTimeMax = 9; //到期日范围的结束时间戳 - optional int32 ipoPeriod = 10; //Qot_Common.IpoPeriod,上市日 - optional int32 priceType = 11; //Qot_Common.PriceType, 价内/价外(该字段为百分比字段,默认不展示%,如20实际对应20%,如20实际对应20%) - optional int32 status = 12; //Qot_Common.WarrantStatus, 窝轮状态 - optional double curPriceMin = 13; //最新价的过滤下限(闭区间),不传代表下限为-∞ - optional double curPriceMax = 14; //最新价的过滤上限(闭区间),不传代表上限为+∞ - optional double strikePriceMin = 15; //行使价的过滤下限(闭区间),不传代表下限为-∞ - optional double strikePriceMax = 16; //行使价的过滤上限(闭区间),不传代表上限为+∞ - optional double streetMin = 17; //街货占比的过滤下限(闭区间),该字段为百分比字段,默认不展示%,如20实际对应20%。不传代表下限为-∞ - optional double streetMax = 18; //街货占比的过滤上限(闭区间),该字段为百分比字段,默认不展示%,如20实际对应20%。不传代表上限为+∞ - optional double conversionMin = 19; //换股比率的过滤下限(闭区间),不传代表下限为-∞ - optional double conversionMax = 20; //换股比率的过滤上限(闭区间),不传代表上限为+∞ - optional uint64 volMin = 21; //成交量的过滤下限(闭区间),不传代表下限为-∞ - optional uint64 volMax = 22; //成交量的过滤上限(闭区间),不传代表上限为+∞ - optional double premiumMin = 23; //溢价的过滤下限(闭区间),该字段为百分比字段,默认不展示%,如20实际对应20%。不传代表下限为-∞ - optional double premiumMax = 24; //溢价的过滤上限(闭区间),该字段为百分比字段,默认不展示%,如20实际对应20%。不传代表上限为+∞ - optional double leverageRatioMin = 25; //杠杆比率的过滤下限(闭区间),不传代表下限为-∞ - optional double leverageRatioMax = 26; //杠杆比率的过滤上限(闭区间),不传代表上限为+∞ - optional double deltaMin = 27;//对冲值的过滤下限(闭区间), 仅认购认沽支持该字段过滤,不传代表下限为-∞ - optional double deltaMax = 28;//对冲值的过滤上限(闭区间), 仅认购认沽支持该字段过滤,不传代表上限为+∞ - optional double impliedMin = 29; //引伸波幅的过滤下限(闭区间), 仅认购认沽支持该字段过滤,不传代表下限为-∞ - optional double impliedMax = 30; //引伸波幅的过滤上限(闭区间), 仅认购认沽支持该字段过滤,不传代表上限为+∞ - optional double recoveryPriceMin = 31; //收回价的过滤下限(闭区间), 仅牛熊证支持该字段过滤,不传代表下限为-∞ - optional double recoveryPriceMax = 32; //收回价的过滤上限(闭区间), 仅牛熊证支持该字段过滤,不传代表上限为+∞ - optional double priceRecoveryRatioMin = 33;//正股距收回价, 的过滤下限(闭区间), 仅牛熊证支持该字段过滤。该字段为百分比字段,默认不展示%,如20实际对应20%。不传代表下限为-∞ - optional double priceRecoveryRatioMax = 34;//正股距收回价, 的过滤上限(闭区间), 仅牛熊证支持该字段过滤。该字段为百分比字段,默认不展示%,如20实际对应20%。不传代表上限为+∞ + optional int32 ipoPeriod = 10; //Qot_Common.IpoPeriod,上市日 + optional int32 priceType = 11; //Qot_Common.PriceType,价内/价外(暂不支持界内证的界内外筛选) + optional int32 status = 12; //Qot_Common.WarrantStatus,窝轮状态 + optional double curPriceMin = 13; //最新价的过滤下限(闭区间),不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double curPriceMax = 14; //最新价的过滤上限(闭区间),不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double strikePriceMin = 15; //行使价的过滤下限(闭区间),不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double strikePriceMax = 16; //行使价的过滤上限(闭区间),不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double streetMin = 17; //街货占比的过滤下限(闭区间),该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double streetMax = 18; //街货占比的过滤上限(闭区间),该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double conversionMin = 19; //换股比率的过滤下限(闭区间),不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double conversionMax = 20; //换股比率的过滤上限(闭区间),不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional uint64 volMin = 21; //成交量的过滤下限(闭区间),不传代表下限为 -∞ + optional uint64 volMax = 22; //成交量的过滤上限(闭区间),不传代表上限为 +∞ + optional double premiumMin = 23; //溢价的过滤下限(闭区间),该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double premiumMax = 24; //溢价的过滤上限(闭区间),该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double leverageRatioMin = 25; //杠杆比率的过滤下限(闭区间),不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double leverageRatioMax = 26; //杠杆比率的过滤上限(闭区间),不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double deltaMin = 27;//对冲值的过滤下限(闭区间),仅认购认沽支持此字段过滤,不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double deltaMax = 28;//对冲值的过滤上限(闭区间),仅认购认沽支持此字段过滤,不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double impliedMin = 29; //引伸波幅的过滤下限(闭区间),仅认购认沽支持此字段过滤,不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double impliedMax = 30; //引伸波幅的过滤上限(闭区间),仅认购认沽支持此字段过滤,不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double recoveryPriceMin = 31; //收回价的过滤下限(闭区间),仅牛熊证支持此字段过滤,不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double recoveryPriceMax = 32; //收回价的过滤上限(闭区间),仅牛熊证支持此字段过滤,不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double priceRecoveryRatioMin = 33;//正股距收回价,的过滤下限(闭区间),仅牛熊证支持此字段过滤。该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。不传代表下限为 -∞(精确到小数点后 3 位,超出部分会被舍弃) + optional double priceRecoveryRatioMax = 34;//正股距收回价,的过滤上限(闭区间),仅牛熊证支持此字段过滤。该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。不传代表上限为 +∞(精确到小数点后 3 位,超出部分会被舍弃) } message WarrantData { //静态数据项 - required Qot_Common.Security stock = 1; //股票 - required Qot_Common.Security owner = 2; //所属正股 - required int32 type = 3; //Qot_Common.WarrantType,窝轮类型 - required int32 issuer = 4; //Qot_Common.Issuer,发行人 + required Qot_Common.Security stock = 1; //股票 + required Qot_Common.Security owner = 2; //所属正股 + required int32 type = 3; //Qot_Common.WarrantType,窝轮类型 + required int32 issuer = 4; //Qot_Common.Issuer,发行人 required string maturityTime = 5; //到期日 optional double maturityTimestamp = 6; //到期日时间戳 required string listTime = 7; //上市时间 optional double listTimestamp = 8; //上市时间戳 required string lastTradeTime = 9; //最后交易日 optional double lastTradeTimestamp = 10; //最后交易日时间戳 - optional double recoveryPrice = 11; //收回价,仅牛熊证支持该字段 + optional double recoveryPrice = 11; //收回价,仅牛熊证支持此字段 required double conversionRatio = 12; //换股比率 required int32 lotSize = 13; //每手数量 required double strikePrice = 14; //行使价 - required double lastClosePrice = 15; //昨收价 + required double lastClosePrice = 15; //昨收价 required string name = 16; //名称 - + //动态数据项 required double curPrice = 17; //当前价 required double priceChangeVal = 18; //涨跌额 - required double changeRate = 19; //涨跌幅(该字段为百分比字段,默认不展示%,如20实际对应20%) - required int32 status = 20; //Qot_Common.WarrantStatus, 窝轮状态 - required double bidPrice = 21; //买入价 + required double changeRate = 19; //涨跌幅(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + required int32 status = 20; //Qot_Common.WarrantStatus,窝轮状态 + required double bidPrice = 21; //买入价 required double askPrice = 22; //卖出价 - required int64 bidVol = 23; //买量 + required int64 bidVol = 23; //买量 required int64 askVol = 24; //卖量 required int64 volume = 25; //成交量 - required double turnover = 26; //成交额 + required double turnover = 26; //成交额 required double score = 27; //综合评分 - required double premium = 28; //溢价(该字段为百分比字段,默认不展示%,如20实际对应20%) - required double breakEvenPoint = 29; //打和点 - required double leverage = 30; //杠杆比率(倍) - required double ipop = 31; //价内/价外(该字段为百分比字段,默认不展示%,如20实际对应20%) - optional double priceRecoveryRatio = 32; //正股距收回价,仅牛熊证支持该字段(该字段为百分比字段,默认不展示%,如20实际对应20%) + required double premium = 28; //溢价(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + required double breakEvenPoint = 29; //打和点 + required double leverage = 30; //杠杆比率(倍) + required double ipop = 31; //价内/价外,正数表示价内,负数表示价外(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + optional double priceRecoveryRatio = 32; //正股距收回价,仅牛熊证支持此字段(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) required double conversionPrice = 33; //换股价 - required double streetRate = 34; //街货占比(该字段为百分比字段,默认不展示%,如20实际对应20%) + required double streetRate = 34; //街货占比(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) required int64 streetVol = 35; //街货量 - required double amplitude = 36; //振幅(该字段为百分比字段,默认不展示%,如20实际对应20%) + required double amplitude = 36; //振幅(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) required int64 issueSize = 37; //发行量 required double highPrice = 39; //最高价 - required double lowPrice = 40; //最低价 - optional double impliedVolatility = 41; //引申波幅,仅认购认沽支持该字段 - optional double delta = 42; //对冲值,仅认购认沽支持该字段 + required double lowPrice = 40; //最低价 + optional double impliedVolatility = 41; //引申波幅,仅认购认沽支持此字段 + optional double delta = 42; //对冲值,仅认购认沽支持此字段 required double effectiveLeverage = 43; //有效杠杆 - optional double upperStrikePrice = 44; //上限价,仅界内证支持该字段 - optional double lowerStrikePrice = 45; //下限价,仅界内证支持该字段 - optional int32 inLinePriceStatus = 46; //Qot_Common.PriceType, 界内界外,仅界内证支持该字段 + optional double upperStrikePrice = 44; //上限价,仅界内证支持此字段 + optional double lowerStrikePrice = 45; //下限价,仅界内证支持此字段 + optional int32 inLinePriceStatus = 46; //Qot_Common.PriceType,界内界外,仅界内证支持此字段 } message S2C { - required bool lastPage = 1; //是否最后一页了,false:非最后一页,还有窝轮记录未返回; true:已是最后一页 + required bool lastPage = 1; //是否最后一页了,false:非最后一页,还有窝轮记录未返回; true:已是最后一页 required int32 allCount = 2; //该条件请求所有数据的个数 repeated WarrantData warrantDataList = 3; //窝轮数据 } @@ -112,7 +112,7 @@ message Request message Response { - required int32 retType = 1 [default = -400]; //RetType,返回结果 + required int32 retType = 1 [default = -400]; //RetType,返回结果 optional string retMsg = 2; optional int32 errCode = 3; optional S2C s2c = 4; diff --git a/futu/common/pb/Qot_SetPriceReminder.proto b/futu/common/pb/Qot_SetPriceReminder.proto index 799716d..0ed6d06 100644 --- a/futu/common/pb/Qot_SetPriceReminder.proto +++ b/futu/common/pb/Qot_SetPriceReminder.proto @@ -14,17 +14,17 @@ enum SetPriceReminderOp SetPriceReminderOp_Enable = 3; //启用 SetPriceReminderOp_Disable = 4; //禁用 SetPriceReminderOp_Modify = 5; //修改 - SetPriceReminderOp_DelAll = 6; //删除全部(删除指定股票下的所有到价提醒) + SetPriceReminderOp_DelAll = 6; //删除该支股票下所有到价提醒 } message C2S { required Qot_Common.Security security = 1; // 股票 - required int32 op = 2; // SetPriceReminderOp, 操作类型 + required int32 op = 2; // SetPriceReminderOp,操作类型 optional int64 key = 3; // 到价提醒的标识,GetPriceReminder协议可获得,用于指定要操作的到价提醒项,对于新增的情况不需要填 optional int32 type = 4; // Qot_Common::PriceReminderType,提醒类型,删除、启用、禁用的情况下会忽略该字段 optional int32 freq = 7; // Qot_Common::PriceReminderFreq,提醒频率类型,删除、启用、禁用的情况下会忽略该字段 - optional double value = 5; // 提醒值,删除、启用、禁用的情况下会忽略该字段 + optional double value = 5; // 提醒值,删除、启用、禁用的情况下会忽略该字段(精确到小数点后 3 位,超出部分会被舍弃) optional string note = 6; // 用户设置到价提醒时的标注,最多10个字符,删除、启用、禁用的情况下会忽略该字段 } //注意: @@ -48,7 +48,7 @@ message Request message Response { - required int32 retType = 1 [default = -400]; //RetType,返回结果 + required int32 retType = 1 [default = -400]; //RetType,返回结果 optional string retMsg = 2; optional int32 errCode = 3; diff --git a/futu/common/pb/Qot_StockFilter.proto b/futu/common/pb/Qot_StockFilter.proto index c6d7c7b..00dd10a 100644 --- a/futu/common/pb/Qot_StockFilter.proto +++ b/futu/common/pb/Qot_StockFilter.proto @@ -6,7 +6,7 @@ option go_package = "github.com/futuopen/ftapi4go/pb/qotstockfilter"; import "Common.proto"; import "Qot_Common.proto"; -// 使用到以下 6 个结构体(BaseFilter,AccumulateFilter,FinancialFilter,BaseData, AccumulateData,FinancialData)的用户请注意,由于属性字段名“field”与 C # 的 protobuf 保留函数名产生冲突,Futu API 将从 3.18 版本开始将这一字段统一更名为“fieldName”,请注意修改使用到对应接口的字段名。 +// 使用到以下 6 个结构体(BaseFilter,AccumulateFilter,FinancialFilter,BaseData,AccumulateData,FinancialData)的用户请注意,由于属性字段名“field”与 C # 的 protobuf 保留函数名产生冲突,Futu API 将从 3.18 版本开始将这一字段统一更名为“fieldName”,请注意修改使用到对应接口的字段名。 // 简单属性 enum StockField @@ -14,38 +14,38 @@ enum StockField StockField_Unknown = 0; // 未知 StockField_StockCode = 1; // 股票代码,不能填区间上下限值。 StockField_StockName = 2; // 股票名称,不能填区间上下限值。 - StockField_CurPrice = 3; // 最新价 例如填写[10,20]值区间 - StockField_CurPriceToHighest52WeeksRatio = 4; // (现价 - 52周最高)/52周最高,对应PC端离52周高点百分比 例如填写[-30,-10]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%,如20实际对应20%) - StockField_CurPriceToLowest52WeeksRatio = 5; // (现价 - 52周最低)/52周最低,对应PC端离52周低点百分比 例如填写[20,40]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - StockField_HighPriceToHighest52WeeksRatio = 6; // (今日最高 - 52周最高)/52周最高 例如填写[-3,-1]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - StockField_LowPriceToLowest52WeeksRatio = 7; // (今日最低 - 52周最低)/52周最低 例如填写[10,70]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - StockField_VolumeRatio = 8; // 量比 例如填写[0.5,30]值区间 - StockField_BidAskRatio = 9; // 委比 例如填写[-20,80.5]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - StockField_LotPrice = 10; // 每手价格 例如填写[40,100]值区间 - StockField_MarketVal = 11; // 市值 例如填写[50000000,3000000000]值区间 - StockField_PeAnnual = 12; // 市盈率(静态) 例如填写[-8,65.3]值区间 - StockField_PeTTM = 13; // 市盈率TTM 例如填写[-10,20.5]值区间 - StockField_PbRate = 14; // 市净率 例如填写[0.5,20]值区间 - StockField_ChangeRate5min = 15; // 五分钟价格涨跌幅 例如填写[-5,6.3]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - StockField_ChangeRateBeginYear = 16; // 年初至今价格涨跌幅 例如填写[-50.1,400.7]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - + StockField_CurPrice = 3; // 最新价(精确到小数点后 3 位,超出部分会被舍弃)例如填写[10,20]值区间 + StockField_CurPriceToHighest52WeeksRatio = 4; // (现价 - 52周最高)/52周最高,对应PC端离52周高点百分比(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-30,-10]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%,如20实际对应20%) + StockField_CurPriceToLowest52WeeksRatio = 5; // (现价 - 52周最低)/52周最低,对应PC端离52周低点百分比(精确到小数点后 3 位,超出部分会被舍弃)例如填写[20,40]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + StockField_HighPriceToHighest52WeeksRatio = 6; // (今日最高 - 52周最高)/52周最高(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-3,-1]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + StockField_LowPriceToLowest52WeeksRatio = 7; // (今日最低 - 52周最低)/52周最低(精确到小数点后 3 位,超出部分会被舍弃)例如填写[10,70]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + StockField_VolumeRatio = 8; // 量比(精确到小数点后 3 位,超出部分会被舍弃)例如填写[0.5,30]值区间 + StockField_BidAskRatio = 9; // 委比(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-20,80.5]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + StockField_LotPrice = 10; // 每手价格(精确到小数点后 3 位,超出部分会被舍弃)例如填写[40,100]值区间 + StockField_MarketVal = 11; // 市值(精确到小数点后 3 位,超出部分会被舍弃)例如填写[50000000,3000000000]值区间 + StockField_PeAnnual = 12; // 市盈率(静态)(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-8,65.3]值区间 + StockField_PeTTM = 13; // 市盈率 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-10,20.5]值区间 + StockField_PbRate = 14; // 市净率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[0.5,20]值区间 + StockField_ChangeRate5min = 15; // 五分钟价格涨跌幅(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-5,6.3]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + StockField_ChangeRateBeginYear = 16; // 年初至今价格涨跌幅(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-50.1,400.7]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + // 基础量价属性 - StockField_PSTTM = 17; // 市销率(TTM) 例如填写 [100, 500] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - StockField_PCFTTM = 18; // 市现率(TTM) 例如填写 [100, 1000] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - StockField_TotalShare = 19; // 总股数 例如填写 [1000000000,1000000000] 值区间 (单位:股) - StockField_FloatShare = 20; // 流通股数 例如填写 [1000000000,1000000000] 值区间 (单位:股) - StockField_FloatMarketVal = 21; // 流通市值 例如填写 [1000000000,1000000000] 值区间 (单位:元) + StockField_PSTTM = 17; // 市销率 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [100, 500] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + StockField_PCFTTM = 18; // 市现率 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [100, 1000] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + StockField_TotalShare = 19; // 总股数(精确到小数点后 0 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间 (单位:股)(精确到小数点后 0 位,超出部分会被舍弃) + StockField_FloatShare = 20; // 流通股数(精确到小数点后 0 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间 (单位:股)(精确到小数点后 0 位,超出部分会被舍弃) + StockField_FloatMarketVal = 21; // 流通市值(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间 (单位:元) } // 累积属性 enum AccumulateField { AccumulateField_Unknown = 0; // 未知 - AccumulateField_ChangeRate = 1; // 涨跌幅 例如填写[-10.2,20.4]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - AccumulateField_Amplitude = 2; // 振幅 例如填写[0.5,20.6]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - AccumulateField_Volume = 3; // 日均成交量 例如填写[2000,70000]值区间 - AccumulateField_Turnover = 4; // 日均成交额 例如填写[1400,890000]值区间 - AccumulateField_TurnoverRate = 5; // 换手率 例如填写[2,30]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) + AccumulateField_ChangeRate = 1; // 涨跌幅(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-10.2,20.4]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + AccumulateField_Amplitude = 2; // 振幅(精确到小数点后 3 位,超出部分会被舍弃)例如填写[0.5,20.6]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + AccumulateField_Volume = 3; // 日均成交量(精确到小数点后 0 位,超出部分会被舍弃)例如填写[2000,70000]值区间(精确到小数点后 0 位,超出部分会被舍弃) + AccumulateField_Turnover = 4; // 日均成交额(精确到小数点后 3 位,超出部分会被舍弃)例如填写[1400,890000]值区间 + AccumulateField_TurnoverRate = 5; // 换手率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[2,30]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) } // 财务属性 @@ -53,66 +53,66 @@ enum FinancialField { // 基础财务属性 FinancialField_Unknown = 0; // 未知 - FinancialField_NetProfit = 1; // 净利润 例如填写[100000000,2500000000]值区间 - FinancialField_NetProfitGrowth = 2; // 净利润增长率 例如填写[-10,300]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - FinancialField_SumOfBusiness = 3; // 营业收入 例如填写[100000000,6400000000]值区间 - FinancialField_SumOfBusinessGrowth = 4; // 营收同比增长率 例如填写[-5,200]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - FinancialField_NetProfitRate = 5; // 净利率 例如填写[10,113]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - FinancialField_GrossProfitRate = 6; // 毛利率 例如填写[4,65]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - FinancialField_DebtAssetsRate = 7; // 资产负债率 例如填写[5,470]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) - FinancialField_ReturnOnEquityRate = 8; // 净资产收益率 例如填写[20,230]值区间(该字段为百分比字段,默认不展示%,如20实际对应20%) + FinancialField_NetProfit = 1; // 净利润(精确到小数点后 3 位,超出部分会被舍弃)例如填写[100000000,2500000000]值区间 + FinancialField_NetProfitGrowth = 2; // 净利润增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-10,300]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_SumOfBusiness = 3; // 营业收入(精确到小数点后 3 位,超出部分会被舍弃)例如填写[100000000,6400000000]值区间 + FinancialField_SumOfBusinessGrowth = 4; // 营收同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[-5,200]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_NetProfitRate = 5; // 净利率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[10,113]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_GrossProfitRate = 6; // 毛利率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[4,65]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_DebtAssetsRate = 7; // 资产负债率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[5,470]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_ReturnOnEquityRate = 8; // 净资产收益率(精确到小数点后 3 位,超出部分会被舍弃)例如填写[20,230]值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) // 盈利能力属性 - FinancialField_ROIC = 9; // 投入资本回报率 例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_ROATTM = 10; // 资产回报率(TTM) 例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%。仅适用于年报。) - FinancialField_EBITTTM = 11; // 息税前利润(TTM) 例如填写 [1000000000,1000000000] 值区间(单位:元。仅适用于年报。) - FinancialField_EBITDA = 12; // 税息折旧及摊销前利润 例如填写 [1000000000,1000000000] 值区间(单位:元) - FinancialField_OperatingMarginTTM = 13; // 营业利润率(TTM) 例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%。仅适用于年报。) - FinancialField_EBITMargin = 14; // EBIT利润率 例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_EBITDAMargin = 15; // EBITDA利润率 例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_FinancialCostRate = 16; // 财务成本率 例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_OperatingProfitTTM = 17; // 营业利润(TTM) 例如填写 [1000000000,1000000000] 值区间 (单位:元。仅适用于年报。) - FinancialField_ShareholderNetProfitTTM = 18; // 归属于母公司的净利润 例如填写 [1000000000,1000000000] 值区间 (单位:元。仅适用于年报。) - FinancialField_NetProfitCashCoverTTM = 19; // 盈利中的现金收入比例 例如填写 [1.0,60.0] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%。仅适用于年报。) + FinancialField_ROIC = 9; // 投入资本回报率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_ROATTM = 10; // 资产回报率 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。仅适用于年报。) + FinancialField_EBITTTM = 11; // 息税前利润 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间(单位:元。仅适用于年报。) + FinancialField_EBITDA = 12; // 税息折旧及摊销前利润(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间(单位:元) + FinancialField_OperatingMarginTTM = 13; // 营业利润率 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。仅适用于年报。) + FinancialField_EBITMargin = 14; // EBIT利润率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_EBITDAMargin = 15; // EBITDA利润率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_FinancialCostRate = 16; // 财务成本率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_OperatingProfitTTM = 17; // 营业利润 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间 (单位:元。仅适用于年报。) + FinancialField_ShareholderNetProfitTTM = 18; // 归属于母公司的净利润(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间 (单位:元。仅适用于年报。) + FinancialField_NetProfitCashCoverTTM = 19; // 盈利中的现金收入比例(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,60.0] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%。仅适用于年报。) // 偿债能力属性 - FinancialField_CurrentRatio = 20; // 流动比率 例如填写 [100,250] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_QuickRatio = 21; // 速动比率 例如填写 [100,250] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) + FinancialField_CurrentRatio = 20; // 流动比率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [100,250] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_QuickRatio = 21; // 速动比率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [100,250] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) // 清债能力属性 - FinancialField_CurrentAssetRatio = 22; // 流动资产率 例如填写 [10,100] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_CurrentDebtRatio = 23; // 流动负债率 例如填写 [10,100] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_EquityMultiplier = 24; // 权益乘数 例如填写 [100,180] 值区间 - FinancialField_PropertyRatio = 25; // 产权比率 例如填写 [50,100] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_CashAndCashEquivalents = 26; // 现金和现金等价 例如填写 [1000000000,1000000000] 值区间(单位:元) + FinancialField_CurrentAssetRatio = 22; // 流动资产率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [10,100] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_CurrentDebtRatio = 23; // 流动负债率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [10,100] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_EquityMultiplier = 24; // 权益乘数(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [100,180] 值区间 + FinancialField_PropertyRatio = 25; // 产权比率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [50,100] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_CashAndCashEquivalents = 26; // 现金和现金等价(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间(单位:元) // 运营能力属性 - FinancialField_TotalAssetTurnover = 27; // 总资产周转率 例如填写 [50,100] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_FixedAssetTurnover = 28; // 固定资产周转率 例如填写 [50,100] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_InventoryTurnover = 29; // 存货周转率 例如填写 [50,100] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_OperatingCashFlowTTM = 30; // 经营活动现金流(TTM) 例如填写 [1000000000,1000000000] 值区间(单位:元。仅适用于年报。) - FinancialField_AccountsReceivable = 31; // 应收账款净额 例如填写 [1000000000,1000000000] 值区间 例如填写 [1000000000,1000000000] 值区间 (单位:元) + FinancialField_TotalAssetTurnover = 27; // 总资产周转率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [50,100] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_FixedAssetTurnover = 28; // 固定资产周转率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [50,100] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_InventoryTurnover = 29; // 存货周转率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [50,100] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_OperatingCashFlowTTM = 30; // 经营活动现金流 TTM(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间(单位:元。仅适用于年报。) + FinancialField_AccountsReceivable = 31; // 应收账款净额(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1000000000,1000000000] 值区间 例如填写 [1000000000,1000000000] 值区间 (单位:元) // 成长能力属性 - FinancialField_EBITGrowthRate = 32 ; // EBIT同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_OperatingProfitGrowthRate = 33; // 营业利润同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_TotalAssetsGrowthRate = 34; // 总资产同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_ProfitToShareholdersGrowthRate = 35; // 归母净利润同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_ProfitBeforeTaxGrowthRate = 36; // 总利润同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_EPSGrowthRate = 37; // EPS同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_ROEGrowthRate = 38; // ROE同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_ROICGrowthRate = 39; // ROIC同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_NOCFGrowthRate = 40; // 经营现金流同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_NOCFPerShareGrowthRate = 41; // 每股经营现金流同比增长率 例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) + FinancialField_EBITGrowthRate = 32 ; // EBIT同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_OperatingProfitGrowthRate = 33; // 营业利润同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_TotalAssetsGrowthRate = 34; // 总资产同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_ProfitToShareholdersGrowthRate = 35; // 归母净利润同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_ProfitBeforeTaxGrowthRate = 36; // 总利润同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_EPSGrowthRate = 37; // EPS同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_ROEGrowthRate = 38; // ROE同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_ROICGrowthRate = 39; // ROIC同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_NOCFGrowthRate = 40; // 经营现金流同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_NOCFPerShareGrowthRate = 41; // 每股经营现金流同比增长率(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [1.0,10.0] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) // 现金流属性 - FinancialField_OperatingRevenueCashCover = 42; // 经营现金收入比 例如填写 [10,100] 值区间(该字段为百分比字段,默认省略%,如20实际对应20%) - FinancialField_OperatingProfitToTotalProfit = 43; // 营业利润占比 例如填写 [10,100] 值区间 (该字段为百分比字段,默认省略%,如20实际对应20%) + FinancialField_OperatingRevenueCashCover = 42; // 经营现金收入比(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [10,100] 值区间(该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) + FinancialField_OperatingProfitToTotalProfit = 43; // 营业利润占比(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [10,100] 值区间 (该字段为百分比字段,默认不展示 %,如 20 实际对应 20%) // 市场表现属性 - FinancialField_BasicEPS = 44; // 基本每股收益 例如填写 [0.1,10] 值区间 (单位:元) - FinancialField_DilutedEPS = 45; // 稀释每股收益 例如填写 [0.1,10] 值区间 (单位:元) - FinancialField_NOCFPerShare = 46; // 每股经营现金净流量 例如填写 [0.1,10] 值区间 (单位:元) + FinancialField_BasicEPS = 44; // 基本每股收益(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [0.1,10] 值区间 (单位:元) + FinancialField_DilutedEPS = 45; // 稀释每股收益(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [0.1,10] 值区间 (单位:元) + FinancialField_NOCFPerShare = 46; // 每股经营现金净流量(精确到小数点后 3 位,超出部分会被舍弃)例如填写 [0.1,10] 值区间 (单位:元) } // 自定义技术指标属性 @@ -171,7 +171,7 @@ enum FinancialQuarter FinancialQuarter_Annual = 1; // 年报 FinancialQuarter_FirstQuarter = 2; // 一季报 FinancialQuarter_Interim = 3; // 中报 - FinancialQuarter_ThirdQuarter = 4; // 三季报 + FinancialQuarter_ThirdQuarter = 4; // 三季报 FinancialQuarter_MostRecentQuarter = 5; // 最近季报 } @@ -197,9 +197,9 @@ enum SortDir message BaseFilter { required int32 fieldName = 1; // StockField 简单属性 - optional double filterMin = 2; // 区间下限(闭区间),不传代表下限为-∞ - optional double filterMax = 3; // 区间上限(闭区间),不传代表上限为+∞ - optional bool isNoFilter = 4; // 该字段是否不需要筛选,True代表不筛选,False代表筛选。不传默认为不筛选 + optional double filterMin = 2; // 区间下限(闭区间),不传代表下限为 -∞ + optional double filterMax = 3; // 区间上限(闭区间),不传代表上限为 +∞ + optional bool isNoFilter = 4; // 该字段是否不需要筛选,True:不筛选,False:筛选。不传默认不筛选 optional int32 sortDir = 5; // SortDir 排序方向,默认不排序。 } @@ -207,9 +207,9 @@ message BaseFilter message AccumulateFilter { required int32 fieldName = 1; // AccumulateField 累积属性 - optional double filterMin = 2; // 区间下限(闭区间),不传代表下限为-∞ - optional double filterMax = 3; // 区间上限(闭区间),不传代表上限为+∞ - optional bool isNoFilter = 4; // 该字段是否不需要筛选,True代表不筛选,False代表筛选。不传默认为不筛选 + optional double filterMin = 2; // 区间下限(闭区间),不传代表下限为 -∞ + optional double filterMax = 3; // 区间上限(闭区间),不传代表上限为 +∞ + optional bool isNoFilter = 4; // 该字段是否不需要筛选,True:不筛选,False:筛选。不传默认不筛选 optional int32 sortDir = 5; // SortDir 排序方向,默认不排序。 required int32 days = 6; // 近几日,累积时间 } @@ -218,9 +218,9 @@ message AccumulateFilter message FinancialFilter { required int32 fieldName = 1; // FinancialField 财务属性 - optional double filterMin = 2; // 区间下限(闭区间),不传代表下限为-∞ - optional double filterMax = 3; // 区间上限(闭区间),不传代表上限为+∞ - optional bool isNoFilter = 4; // 该字段是否不需要筛选,True代表不筛选,False代表筛选。不传默认为不筛选 + optional double filterMin = 2; // 区间下限(闭区间),不传代表下限为 -∞ + optional double filterMax = 3; // 区间上限(闭区间),不传代表上限为 +∞ + optional bool isNoFilter = 4; // 该字段是否不需要筛选,True:不筛选,False:筛选。不传默认不筛选 optional int32 sortDir = 5; // SortDir 排序方向,默认不排序。 required int32 quarter = 6; // FinancialQuarter 财报累积时间 } @@ -248,14 +248,14 @@ message CustomIndicatorFilter message BaseData { required int32 fieldName = 1; // StockField 简单属性 - required double value = 2; + required double value = 2; } // 累积属性数据 message AccumulateData { required int32 fieldName = 1; // AccumulateField 累积属性 - required double value = 2; + required double value = 2; required int32 days = 3; // 近几日,累积时间 } @@ -263,7 +263,7 @@ message AccumulateData message FinancialData { required int32 fieldName = 1; // FinancialField 财务属性 - required double value = 2; + required double value = 2; required int32 quarter = 3; // FinancialQuarter 财报累积时间 } @@ -278,33 +278,32 @@ message CustomIndicatorData // 返回的股票数据 message StockData { - required Qot_Common.Security security = 1; // 股票 + required Qot_Common.Security security = 1; // 股票 required string name = 2; // 股票名称 - repeated BaseData baseDataList = 3; // 筛选后的简单属性数据 - repeated AccumulateData accumulateDataList = 4; // 筛选后的累积属性数据 - repeated FinancialData financialDataList = 5; // 筛选后的财务属性数据 - repeated CustomIndicatorData customIndicatorDataList = 6; // 筛选后的自定义技术指标属性数据 + repeated BaseData baseDataList = 3; // 筛选后的简单指标属性数据 + repeated AccumulateData accumulateDataList = 4; // 筛选后的累积指标属性数据 + repeated FinancialData financialDataList = 5; // 筛选后的财务指标属性数据 } message C2S { - required int32 begin = 1; // 数据起始点 - required int32 num = 2; // 请求数据个数,最大200 + required int32 begin = 1; // 数据起始点 + required int32 num = 2; // 请求数据个数,最大200 required int32 market= 3; // Qot_Common::QotMarket股票市场,支持沪股和深股,且沪股和深股不做区分都代表A股市场。 // 以下为筛选条件,可选字段,不填表示不过滤 optional Qot_Common.Security plate = 4; // 板块 - repeated BaseFilter baseFilterList = 5; // 简单属性过滤器 - repeated AccumulateFilter accumulateFilterList = 6; // 累积属性过滤器 - repeated FinancialFilter financialFilterList = 7; // 财务属性过滤器 + repeated BaseFilter baseFilterList = 5; // 简单指标过滤器 + repeated AccumulateFilter accumulateFilterList = 6; // 累积指标过滤器 + repeated FinancialFilter financialFilterList = 7; // 财务指标过滤器 repeated PatternFilter patternFilterList = 8; // 形态技术指标过滤器 repeated CustomIndicatorFilter customIndicatorFilterList = 9; // 自定义技术指标过滤器 } message S2C { - required bool lastPage = 1; // 是否最后一页了,false:非最后一页,还有记录未返回; true:已是最后一页 + required bool lastPage = 1; // 是否最后一页了,false:非最后一页,还有窝轮记录未返回; true:已是最后一页 required int32 allCount = 2; // 该条件请求所有数据的个数 - repeated StockData dataList = 3; // 返回的股票数据列表 + repeated StockData dataList = 3; // 返回的股票数据列表 } message Request diff --git a/futu/common/pb/Qot_StockFilter_pb2.py b/futu/common/pb/Qot_StockFilter_pb2.py index d327a44..8e33407 100644 --- a/futu/common/pb/Qot_StockFilter_pb2.py +++ b/futu/common/pb/Qot_StockFilter_pb2.py @@ -22,7 +22,7 @@ name='Qot_StockFilter.proto', package='Qot_StockFilter', syntax='proto2', - serialized_pb=_b('\n\x15Qot_StockFilter.proto\x12\x0fQot_StockFilter\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"j\n\nBaseFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x11\n\tfilterMin\x18\x02 \x01(\x01\x12\x11\n\tfilterMax\x18\x03 \x01(\x01\x12\x12\n\nisNoFilter\x18\x04 \x01(\x08\x12\x0f\n\x07sortDir\x18\x05 \x01(\x05\"~\n\x10\x41\x63\x63umulateFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x11\n\tfilterMin\x18\x02 \x01(\x01\x12\x11\n\tfilterMax\x18\x03 \x01(\x01\x12\x12\n\nisNoFilter\x18\x04 \x01(\x08\x12\x0f\n\x07sortDir\x18\x05 \x01(\x05\x12\x0c\n\x04\x64\x61ys\x18\x06 \x02(\x05\"\x80\x01\n\x0f\x46inancialFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x11\n\tfilterMin\x18\x02 \x01(\x01\x12\x11\n\tfilterMax\x18\x03 \x01(\x01\x12\x12\n\nisNoFilter\x18\x04 \x01(\x08\x12\x0f\n\x07sortDir\x18\x05 \x01(\x05\x12\x0f\n\x07quarter\x18\x06 \x02(\x05\"F\n\rPatternFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x0e\n\x06klType\x18\x02 \x02(\x05\x12\x12\n\nisNoFilter\x18\x03 \x01(\x08\"\x9a\x01\n\x15\x43ustomIndicatorFilter\x12\x16\n\x0e\x66irstFieldName\x18\x01 \x02(\x05\x12\x17\n\x0fsecondFieldName\x18\x02 \x02(\x05\x12\x18\n\x10relativePosition\x18\x03 \x02(\x05\x12\x12\n\nfieldValue\x18\x04 \x01(\x01\x12\x0e\n\x06klType\x18\x05 \x02(\x05\x12\x12\n\nisNoFilter\x18\x06 \x01(\x08\",\n\x08\x42\x61seData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\"@\n\x0e\x41\x63\x63umulateData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\x12\x0c\n\x04\x64\x61ys\x18\x03 \x02(\x05\"B\n\rFinancialData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\x12\x0f\n\x07quarter\x18\x03 \x02(\x05\"G\n\x13\x43ustomIndicatorData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\x12\x0e\n\x06klType\x18\x03 \x02(\x05\"\xb1\x02\n\tStockData\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12/\n\x0c\x62\x61seDataList\x18\x03 \x03(\x0b\x32\x19.Qot_StockFilter.BaseData\x12;\n\x12\x61\x63\x63umulateDataList\x18\x04 \x03(\x0b\x32\x1f.Qot_StockFilter.AccumulateData\x12\x39\n\x11\x66inancialDataList\x18\x05 \x03(\x0b\x32\x1e.Qot_StockFilter.FinancialData\x12\x45\n\x17\x63ustomIndicatorDataList\x18\x06 \x03(\x0b\x32$.Qot_StockFilter.CustomIndicatorData\"\x91\x03\n\x03\x43\x32S\x12\r\n\x05\x62\x65gin\x18\x01 \x02(\x05\x12\x0b\n\x03num\x18\x02 \x02(\x05\x12\x0e\n\x06market\x18\x03 \x02(\x05\x12#\n\x05plate\x18\x04 \x01(\x0b\x32\x14.Qot_Common.Security\x12\x33\n\x0e\x62\x61seFilterList\x18\x05 \x03(\x0b\x32\x1b.Qot_StockFilter.BaseFilter\x12?\n\x14\x61\x63\x63umulateFilterList\x18\x06 \x03(\x0b\x32!.Qot_StockFilter.AccumulateFilter\x12=\n\x13\x66inancialFilterList\x18\x07 \x03(\x0b\x32 .Qot_StockFilter.FinancialFilter\x12\x39\n\x11patternFilterList\x18\x08 \x03(\x0b\x32\x1e.Qot_StockFilter.PatternFilter\x12I\n\x19\x63ustomIndicatorFilterList\x18\t \x03(\x0b\x32&.Qot_StockFilter.CustomIndicatorFilter\"W\n\x03S2C\x12\x10\n\x08lastPage\x18\x01 \x02(\x08\x12\x10\n\x08\x61llCount\x18\x02 \x02(\x05\x12,\n\x08\x64\x61taList\x18\x03 \x03(\x0b\x32\x1a.Qot_StockFilter.StockData\",\n\x07Request\x12!\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x14.Qot_StockFilter.C2S\"e\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12!\n\x03s2c\x18\x04 \x01(\x0b\x32\x14.Qot_StockFilter.S2C*\x9e\x05\n\nStockField\x12\x16\n\x12StockField_Unknown\x10\x00\x12\x18\n\x14StockField_StockCode\x10\x01\x12\x18\n\x14StockField_StockName\x10\x02\x12\x17\n\x13StockField_CurPrice\x10\x03\x12,\n(StockField_CurPriceToHighest52WeeksRatio\x10\x04\x12+\n\'StockField_CurPriceToLowest52WeeksRatio\x10\x05\x12-\n)StockField_HighPriceToHighest52WeeksRatio\x10\x06\x12+\n\'StockField_LowPriceToLowest52WeeksRatio\x10\x07\x12\x1a\n\x16StockField_VolumeRatio\x10\x08\x12\x1a\n\x16StockField_BidAskRatio\x10\t\x12\x17\n\x13StockField_LotPrice\x10\n\x12\x18\n\x14StockField_MarketVal\x10\x0b\x12\x17\n\x13StockField_PeAnnual\x10\x0c\x12\x14\n\x10StockField_PeTTM\x10\r\x12\x15\n\x11StockField_PbRate\x10\x0e\x12\x1d\n\x19StockField_ChangeRate5min\x10\x0f\x12\"\n\x1eStockField_ChangeRateBeginYear\x10\x10\x12\x14\n\x10StockField_PSTTM\x10\x11\x12\x15\n\x11StockField_PCFTTM\x10\x12\x12\x19\n\x15StockField_TotalShare\x10\x13\x12\x19\n\x15StockField_FloatShare\x10\x14\x12\x1d\n\x19StockField_FloatMarketVal\x10\x15*\xc9\x01\n\x0f\x41\x63\x63umulateField\x12\x1b\n\x17\x41\x63\x63umulateField_Unknown\x10\x00\x12\x1e\n\x1a\x41\x63\x63umulateField_ChangeRate\x10\x01\x12\x1d\n\x19\x41\x63\x63umulateField_Amplitude\x10\x02\x12\x1a\n\x16\x41\x63\x63umulateField_Volume\x10\x03\x12\x1c\n\x18\x41\x63\x63umulateField_Turnover\x10\x04\x12 \n\x1c\x41\x63\x63umulateField_TurnoverRate\x10\x05*\xcb\r\n\x0e\x46inancialField\x12\x1a\n\x16\x46inancialField_Unknown\x10\x00\x12\x1c\n\x18\x46inancialField_NetProfit\x10\x01\x12\"\n\x1e\x46inancialField_NetProfitGrowth\x10\x02\x12 \n\x1c\x46inancialField_SumOfBusiness\x10\x03\x12&\n\"FinancialField_SumOfBusinessGrowth\x10\x04\x12 \n\x1c\x46inancialField_NetProfitRate\x10\x05\x12\"\n\x1e\x46inancialField_GrossProfitRate\x10\x06\x12!\n\x1d\x46inancialField_DebtAssetsRate\x10\x07\x12%\n!FinancialField_ReturnOnEquityRate\x10\x08\x12\x17\n\x13\x46inancialField_ROIC\x10\t\x12\x19\n\x15\x46inancialField_ROATTM\x10\n\x12\x1a\n\x16\x46inancialField_EBITTTM\x10\x0b\x12\x19\n\x15\x46inancialField_EBITDA\x10\x0c\x12%\n!FinancialField_OperatingMarginTTM\x10\r\x12\x1d\n\x19\x46inancialField_EBITMargin\x10\x0e\x12\x1f\n\x1b\x46inancialField_EBITDAMargin\x10\x0f\x12$\n FinancialField_FinancialCostRate\x10\x10\x12%\n!FinancialField_OperatingProfitTTM\x10\x11\x12*\n&FinancialField_ShareholderNetProfitTTM\x10\x12\x12(\n$FinancialField_NetProfitCashCoverTTM\x10\x13\x12\x1f\n\x1b\x46inancialField_CurrentRatio\x10\x14\x12\x1d\n\x19\x46inancialField_QuickRatio\x10\x15\x12$\n FinancialField_CurrentAssetRatio\x10\x16\x12#\n\x1f\x46inancialField_CurrentDebtRatio\x10\x17\x12#\n\x1f\x46inancialField_EquityMultiplier\x10\x18\x12 \n\x1c\x46inancialField_PropertyRatio\x10\x19\x12)\n%FinancialField_CashAndCashEquivalents\x10\x1a\x12%\n!FinancialField_TotalAssetTurnover\x10\x1b\x12%\n!FinancialField_FixedAssetTurnover\x10\x1c\x12$\n FinancialField_InventoryTurnover\x10\x1d\x12\'\n#FinancialField_OperatingCashFlowTTM\x10\x1e\x12%\n!FinancialField_AccountsReceivable\x10\x1f\x12!\n\x1d\x46inancialField_EBITGrowthRate\x10 \x12,\n(FinancialField_OperatingProfitGrowthRate\x10!\x12(\n$FinancialField_TotalAssetsGrowthRate\x10\"\x12\x31\n-FinancialField_ProfitToShareholdersGrowthRate\x10#\x12,\n(FinancialField_ProfitBeforeTaxGrowthRate\x10$\x12 \n\x1c\x46inancialField_EPSGrowthRate\x10%\x12 \n\x1c\x46inancialField_ROEGrowthRate\x10&\x12!\n\x1d\x46inancialField_ROICGrowthRate\x10\'\x12!\n\x1d\x46inancialField_NOCFGrowthRate\x10(\x12)\n%FinancialField_NOCFPerShareGrowthRate\x10)\x12,\n(FinancialField_OperatingRevenueCashCover\x10*\x12/\n+FinancialField_OperatingProfitToTotalProfit\x10+\x12\x1b\n\x17\x46inancialField_BasicEPS\x10,\x12\x1d\n\x19\x46inancialField_DilutedEPS\x10-\x12\x1f\n\x1b\x46inancialField_NOCFPerShare\x10.*\xd1\x04\n\x14\x43ustomIndicatorField\x12 \n\x1c\x43ustomIndicatorField_Unknown\x10\x00\x12\x1e\n\x1a\x43ustomIndicatorField_Price\x10\x01\x12\x1c\n\x18\x43ustomIndicatorField_MA5\x10\x02\x12\x1d\n\x19\x43ustomIndicatorField_MA10\x10\x03\x12\x1d\n\x19\x43ustomIndicatorField_MA20\x10\x04\x12\x1d\n\x19\x43ustomIndicatorField_MA30\x10\x05\x12\x1d\n\x19\x43ustomIndicatorField_MA60\x10\x06\x12\x1e\n\x1a\x43ustomIndicatorField_MA120\x10\x07\x12\x1e\n\x1a\x43ustomIndicatorField_MA250\x10\x08\x12\x1c\n\x18\x43ustomIndicatorField_RSI\x10\t\x12\x1d\n\x19\x43ustomIndicatorField_EMA5\x10\n\x12\x1e\n\x1a\x43ustomIndicatorField_EMA10\x10\x0b\x12\x1e\n\x1a\x43ustomIndicatorField_EMA20\x10\x0c\x12\x1e\n\x1a\x43ustomIndicatorField_EMA30\x10\r\x12\x1e\n\x1a\x43ustomIndicatorField_EMA60\x10\x0e\x12\x1f\n\x1b\x43ustomIndicatorField_EMA120\x10\x0f\x12\x1f\n\x1b\x43ustomIndicatorField_EMA250\x10\x10\x12\x1e\n\x1a\x43ustomIndicatorField_Value\x10\x11*\xec\x05\n\x0cPatternField\x12\x18\n\x14PatternField_Unknown\x10\x00\x12 \n\x1cPatternField_MAAlignmentLong\x10\x01\x12!\n\x1dPatternField_MAAlignmentShort\x10\x02\x12!\n\x1dPatternField_EMAAlignmentLong\x10\x03\x12\"\n\x1ePatternField_EMAAlignmentShort\x10\x04\x12 \n\x1cPatternField_RSIGoldCrossLow\x10\x05\x12\"\n\x1ePatternField_RSIDeathCrossHigh\x10\x06\x12!\n\x1dPatternField_RSITopDivergence\x10\x07\x12$\n PatternField_RSIBottomDivergence\x10\x08\x12 \n\x1cPatternField_KDJGoldCrossLow\x10\t\x12\"\n\x1ePatternField_KDJDeathCrossHigh\x10\n\x12!\n\x1dPatternField_KDJTopDivergence\x10\x0b\x12$\n PatternField_KDJBottomDivergence\x10\x0c\x12!\n\x1dPatternField_MACDGoldCrossLow\x10\r\x12#\n\x1fPatternField_MACDDeathCrossHigh\x10\x0e\x12\"\n\x1ePatternField_MACDTopDivergence\x10\x0f\x12%\n!PatternField_MACDBottomDivergence\x10\x10\x12\x1f\n\x1bPatternField_BOLLBreakUpper\x10\x11\x12\x1a\n\x16PatternField_BOLLLower\x10\x12\x12\"\n\x1ePatternField_BOLLCrossMiddleUp\x10\x13\x12$\n PatternField_BOLLCrossMiddleDown\x10\x14*\xd9\x01\n\x10\x46inancialQuarter\x12\x1c\n\x18\x46inancialQuarter_Unknown\x10\x00\x12\x1b\n\x17\x46inancialQuarter_Annual\x10\x01\x12!\n\x1d\x46inancialQuarter_FirstQuarter\x10\x02\x12\x1c\n\x18\x46inancialQuarter_Interim\x10\x03\x12!\n\x1d\x46inancialQuarter_ThirdQuarter\x10\x04\x12&\n\"FinancialQuarter_MostRecentQuarter\x10\x05*\xa4\x01\n\x10RelativePosition\x12\x1c\n\x18RelativePosition_Unknown\x10\x00\x12\x19\n\x15RelativePosition_More\x10\x01\x12\x19\n\x15RelativePosition_Less\x10\x02\x12\x1c\n\x18RelativePosition_CrossUp\x10\x03\x12\x1e\n\x1aRelativePosition_CrossDown\x10\x04*B\n\x07SortDir\x12\x0e\n\nSortDir_No\x10\x00\x12\x12\n\x0eSortDir_Ascend\x10\x01\x12\x13\n\x0fSortDir_Descend\x10\x02\x42\x45\n\x13\x63om.futu.openapi.pbZ.github.com/futuopen/ftapi4go/pb/qotstockfilter') + serialized_pb=_b('\n\x15Qot_StockFilter.proto\x12\x0fQot_StockFilter\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"j\n\nBaseFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x11\n\tfilterMin\x18\x02 \x01(\x01\x12\x11\n\tfilterMax\x18\x03 \x01(\x01\x12\x12\n\nisNoFilter\x18\x04 \x01(\x08\x12\x0f\n\x07sortDir\x18\x05 \x01(\x05\"~\n\x10\x41\x63\x63umulateFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x11\n\tfilterMin\x18\x02 \x01(\x01\x12\x11\n\tfilterMax\x18\x03 \x01(\x01\x12\x12\n\nisNoFilter\x18\x04 \x01(\x08\x12\x0f\n\x07sortDir\x18\x05 \x01(\x05\x12\x0c\n\x04\x64\x61ys\x18\x06 \x02(\x05\"\x80\x01\n\x0f\x46inancialFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x11\n\tfilterMin\x18\x02 \x01(\x01\x12\x11\n\tfilterMax\x18\x03 \x01(\x01\x12\x12\n\nisNoFilter\x18\x04 \x01(\x08\x12\x0f\n\x07sortDir\x18\x05 \x01(\x05\x12\x0f\n\x07quarter\x18\x06 \x02(\x05\"F\n\rPatternFilter\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\x0e\n\x06klType\x18\x02 \x02(\x05\x12\x12\n\nisNoFilter\x18\x03 \x01(\x08\"\x9a\x01\n\x15\x43ustomIndicatorFilter\x12\x16\n\x0e\x66irstFieldName\x18\x01 \x02(\x05\x12\x17\n\x0fsecondFieldName\x18\x02 \x02(\x05\x12\x18\n\x10relativePosition\x18\x03 \x02(\x05\x12\x12\n\nfieldValue\x18\x04 \x01(\x01\x12\x0e\n\x06klType\x18\x05 \x02(\x05\x12\x12\n\nisNoFilter\x18\x06 \x01(\x08\",\n\x08\x42\x61seData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\"@\n\x0e\x41\x63\x63umulateData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\x12\x0c\n\x04\x64\x61ys\x18\x03 \x02(\x05\"B\n\rFinancialData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\x12\x0f\n\x07quarter\x18\x03 \x02(\x05\"G\n\x13\x43ustomIndicatorData\x12\x11\n\tfieldName\x18\x01 \x02(\x05\x12\r\n\x05value\x18\x02 \x02(\x01\x12\x0e\n\x06klType\x18\x03 \x02(\x05\"\xea\x01\n\tStockData\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12/\n\x0c\x62\x61seDataList\x18\x03 \x03(\x0b\x32\x19.Qot_StockFilter.BaseData\x12;\n\x12\x61\x63\x63umulateDataList\x18\x04 \x03(\x0b\x32\x1f.Qot_StockFilter.AccumulateData\x12\x39\n\x11\x66inancialDataList\x18\x05 \x03(\x0b\x32\x1e.Qot_StockFilter.FinancialData\"\x91\x03\n\x03\x43\x32S\x12\r\n\x05\x62\x65gin\x18\x01 \x02(\x05\x12\x0b\n\x03num\x18\x02 \x02(\x05\x12\x0e\n\x06market\x18\x03 \x02(\x05\x12#\n\x05plate\x18\x04 \x01(\x0b\x32\x14.Qot_Common.Security\x12\x33\n\x0e\x62\x61seFilterList\x18\x05 \x03(\x0b\x32\x1b.Qot_StockFilter.BaseFilter\x12?\n\x14\x61\x63\x63umulateFilterList\x18\x06 \x03(\x0b\x32!.Qot_StockFilter.AccumulateFilter\x12=\n\x13\x66inancialFilterList\x18\x07 \x03(\x0b\x32 .Qot_StockFilter.FinancialFilter\x12\x39\n\x11patternFilterList\x18\x08 \x03(\x0b\x32\x1e.Qot_StockFilter.PatternFilter\x12I\n\x19\x63ustomIndicatorFilterList\x18\t \x03(\x0b\x32&.Qot_StockFilter.CustomIndicatorFilter\"W\n\x03S2C\x12\x10\n\x08lastPage\x18\x01 \x02(\x08\x12\x10\n\x08\x61llCount\x18\x02 \x02(\x05\x12,\n\x08\x64\x61taList\x18\x03 \x03(\x0b\x32\x1a.Qot_StockFilter.StockData\",\n\x07Request\x12!\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x14.Qot_StockFilter.C2S\"e\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12!\n\x03s2c\x18\x04 \x01(\x0b\x32\x14.Qot_StockFilter.S2C*\x9e\x05\n\nStockField\x12\x16\n\x12StockField_Unknown\x10\x00\x12\x18\n\x14StockField_StockCode\x10\x01\x12\x18\n\x14StockField_StockName\x10\x02\x12\x17\n\x13StockField_CurPrice\x10\x03\x12,\n(StockField_CurPriceToHighest52WeeksRatio\x10\x04\x12+\n\'StockField_CurPriceToLowest52WeeksRatio\x10\x05\x12-\n)StockField_HighPriceToHighest52WeeksRatio\x10\x06\x12+\n\'StockField_LowPriceToLowest52WeeksRatio\x10\x07\x12\x1a\n\x16StockField_VolumeRatio\x10\x08\x12\x1a\n\x16StockField_BidAskRatio\x10\t\x12\x17\n\x13StockField_LotPrice\x10\n\x12\x18\n\x14StockField_MarketVal\x10\x0b\x12\x17\n\x13StockField_PeAnnual\x10\x0c\x12\x14\n\x10StockField_PeTTM\x10\r\x12\x15\n\x11StockField_PbRate\x10\x0e\x12\x1d\n\x19StockField_ChangeRate5min\x10\x0f\x12\"\n\x1eStockField_ChangeRateBeginYear\x10\x10\x12\x14\n\x10StockField_PSTTM\x10\x11\x12\x15\n\x11StockField_PCFTTM\x10\x12\x12\x19\n\x15StockField_TotalShare\x10\x13\x12\x19\n\x15StockField_FloatShare\x10\x14\x12\x1d\n\x19StockField_FloatMarketVal\x10\x15*\xc9\x01\n\x0f\x41\x63\x63umulateField\x12\x1b\n\x17\x41\x63\x63umulateField_Unknown\x10\x00\x12\x1e\n\x1a\x41\x63\x63umulateField_ChangeRate\x10\x01\x12\x1d\n\x19\x41\x63\x63umulateField_Amplitude\x10\x02\x12\x1a\n\x16\x41\x63\x63umulateField_Volume\x10\x03\x12\x1c\n\x18\x41\x63\x63umulateField_Turnover\x10\x04\x12 \n\x1c\x41\x63\x63umulateField_TurnoverRate\x10\x05*\xcb\r\n\x0e\x46inancialField\x12\x1a\n\x16\x46inancialField_Unknown\x10\x00\x12\x1c\n\x18\x46inancialField_NetProfit\x10\x01\x12\"\n\x1e\x46inancialField_NetProfitGrowth\x10\x02\x12 \n\x1c\x46inancialField_SumOfBusiness\x10\x03\x12&\n\"FinancialField_SumOfBusinessGrowth\x10\x04\x12 \n\x1c\x46inancialField_NetProfitRate\x10\x05\x12\"\n\x1e\x46inancialField_GrossProfitRate\x10\x06\x12!\n\x1d\x46inancialField_DebtAssetsRate\x10\x07\x12%\n!FinancialField_ReturnOnEquityRate\x10\x08\x12\x17\n\x13\x46inancialField_ROIC\x10\t\x12\x19\n\x15\x46inancialField_ROATTM\x10\n\x12\x1a\n\x16\x46inancialField_EBITTTM\x10\x0b\x12\x19\n\x15\x46inancialField_EBITDA\x10\x0c\x12%\n!FinancialField_OperatingMarginTTM\x10\r\x12\x1d\n\x19\x46inancialField_EBITMargin\x10\x0e\x12\x1f\n\x1b\x46inancialField_EBITDAMargin\x10\x0f\x12$\n FinancialField_FinancialCostRate\x10\x10\x12%\n!FinancialField_OperatingProfitTTM\x10\x11\x12*\n&FinancialField_ShareholderNetProfitTTM\x10\x12\x12(\n$FinancialField_NetProfitCashCoverTTM\x10\x13\x12\x1f\n\x1b\x46inancialField_CurrentRatio\x10\x14\x12\x1d\n\x19\x46inancialField_QuickRatio\x10\x15\x12$\n FinancialField_CurrentAssetRatio\x10\x16\x12#\n\x1f\x46inancialField_CurrentDebtRatio\x10\x17\x12#\n\x1f\x46inancialField_EquityMultiplier\x10\x18\x12 \n\x1c\x46inancialField_PropertyRatio\x10\x19\x12)\n%FinancialField_CashAndCashEquivalents\x10\x1a\x12%\n!FinancialField_TotalAssetTurnover\x10\x1b\x12%\n!FinancialField_FixedAssetTurnover\x10\x1c\x12$\n FinancialField_InventoryTurnover\x10\x1d\x12\'\n#FinancialField_OperatingCashFlowTTM\x10\x1e\x12%\n!FinancialField_AccountsReceivable\x10\x1f\x12!\n\x1d\x46inancialField_EBITGrowthRate\x10 \x12,\n(FinancialField_OperatingProfitGrowthRate\x10!\x12(\n$FinancialField_TotalAssetsGrowthRate\x10\"\x12\x31\n-FinancialField_ProfitToShareholdersGrowthRate\x10#\x12,\n(FinancialField_ProfitBeforeTaxGrowthRate\x10$\x12 \n\x1c\x46inancialField_EPSGrowthRate\x10%\x12 \n\x1c\x46inancialField_ROEGrowthRate\x10&\x12!\n\x1d\x46inancialField_ROICGrowthRate\x10\'\x12!\n\x1d\x46inancialField_NOCFGrowthRate\x10(\x12)\n%FinancialField_NOCFPerShareGrowthRate\x10)\x12,\n(FinancialField_OperatingRevenueCashCover\x10*\x12/\n+FinancialField_OperatingProfitToTotalProfit\x10+\x12\x1b\n\x17\x46inancialField_BasicEPS\x10,\x12\x1d\n\x19\x46inancialField_DilutedEPS\x10-\x12\x1f\n\x1b\x46inancialField_NOCFPerShare\x10.*\xd1\x04\n\x14\x43ustomIndicatorField\x12 \n\x1c\x43ustomIndicatorField_Unknown\x10\x00\x12\x1e\n\x1a\x43ustomIndicatorField_Price\x10\x01\x12\x1c\n\x18\x43ustomIndicatorField_MA5\x10\x02\x12\x1d\n\x19\x43ustomIndicatorField_MA10\x10\x03\x12\x1d\n\x19\x43ustomIndicatorField_MA20\x10\x04\x12\x1d\n\x19\x43ustomIndicatorField_MA30\x10\x05\x12\x1d\n\x19\x43ustomIndicatorField_MA60\x10\x06\x12\x1e\n\x1a\x43ustomIndicatorField_MA120\x10\x07\x12\x1e\n\x1a\x43ustomIndicatorField_MA250\x10\x08\x12\x1c\n\x18\x43ustomIndicatorField_RSI\x10\t\x12\x1d\n\x19\x43ustomIndicatorField_EMA5\x10\n\x12\x1e\n\x1a\x43ustomIndicatorField_EMA10\x10\x0b\x12\x1e\n\x1a\x43ustomIndicatorField_EMA20\x10\x0c\x12\x1e\n\x1a\x43ustomIndicatorField_EMA30\x10\r\x12\x1e\n\x1a\x43ustomIndicatorField_EMA60\x10\x0e\x12\x1f\n\x1b\x43ustomIndicatorField_EMA120\x10\x0f\x12\x1f\n\x1b\x43ustomIndicatorField_EMA250\x10\x10\x12\x1e\n\x1a\x43ustomIndicatorField_Value\x10\x11*\xec\x05\n\x0cPatternField\x12\x18\n\x14PatternField_Unknown\x10\x00\x12 \n\x1cPatternField_MAAlignmentLong\x10\x01\x12!\n\x1dPatternField_MAAlignmentShort\x10\x02\x12!\n\x1dPatternField_EMAAlignmentLong\x10\x03\x12\"\n\x1ePatternField_EMAAlignmentShort\x10\x04\x12 \n\x1cPatternField_RSIGoldCrossLow\x10\x05\x12\"\n\x1ePatternField_RSIDeathCrossHigh\x10\x06\x12!\n\x1dPatternField_RSITopDivergence\x10\x07\x12$\n PatternField_RSIBottomDivergence\x10\x08\x12 \n\x1cPatternField_KDJGoldCrossLow\x10\t\x12\"\n\x1ePatternField_KDJDeathCrossHigh\x10\n\x12!\n\x1dPatternField_KDJTopDivergence\x10\x0b\x12$\n PatternField_KDJBottomDivergence\x10\x0c\x12!\n\x1dPatternField_MACDGoldCrossLow\x10\r\x12#\n\x1fPatternField_MACDDeathCrossHigh\x10\x0e\x12\"\n\x1ePatternField_MACDTopDivergence\x10\x0f\x12%\n!PatternField_MACDBottomDivergence\x10\x10\x12\x1f\n\x1bPatternField_BOLLBreakUpper\x10\x11\x12\x1a\n\x16PatternField_BOLLLower\x10\x12\x12\"\n\x1ePatternField_BOLLCrossMiddleUp\x10\x13\x12$\n PatternField_BOLLCrossMiddleDown\x10\x14*\xd9\x01\n\x10\x46inancialQuarter\x12\x1c\n\x18\x46inancialQuarter_Unknown\x10\x00\x12\x1b\n\x17\x46inancialQuarter_Annual\x10\x01\x12!\n\x1d\x46inancialQuarter_FirstQuarter\x10\x02\x12\x1c\n\x18\x46inancialQuarter_Interim\x10\x03\x12!\n\x1d\x46inancialQuarter_ThirdQuarter\x10\x04\x12&\n\"FinancialQuarter_MostRecentQuarter\x10\x05*\xa4\x01\n\x10RelativePosition\x12\x1c\n\x18RelativePosition_Unknown\x10\x00\x12\x19\n\x15RelativePosition_More\x10\x01\x12\x19\n\x15RelativePosition_Less\x10\x02\x12\x1c\n\x18RelativePosition_CrossUp\x10\x03\x12\x1e\n\x1aRelativePosition_CrossDown\x10\x04*B\n\x07SortDir\x12\x0e\n\nSortDir_No\x10\x00\x12\x12\n\x0eSortDir_Ascend\x10\x01\x12\x13\n\x0fSortDir_Descend\x10\x02\x42\x45\n\x13\x63om.futu.openapi.pbZ.github.com/futuopen/ftapi4go/pb/qotstockfilter') , dependencies=[Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) @@ -123,8 +123,8 @@ ], containing_type=None, options=None, - serialized_start=1874, - serialized_end=2544, + serialized_start=1803, + serialized_end=2473, ) _sym_db.RegisterEnumDescriptor(_STOCKFIELD) @@ -162,8 +162,8 @@ ], containing_type=None, options=None, - serialized_start=2547, - serialized_end=2748, + serialized_start=2476, + serialized_end=2677, ) _sym_db.RegisterEnumDescriptor(_ACCUMULATEFIELD) @@ -365,8 +365,8 @@ ], containing_type=None, options=None, - serialized_start=2751, - serialized_end=4490, + serialized_start=2680, + serialized_end=4419, ) _sym_db.RegisterEnumDescriptor(_FINANCIALFIELD) @@ -452,8 +452,8 @@ ], containing_type=None, options=None, - serialized_start=4493, - serialized_end=5086, + serialized_start=4422, + serialized_end=5015, ) _sym_db.RegisterEnumDescriptor(_CUSTOMINDICATORFIELD) @@ -551,8 +551,8 @@ ], containing_type=None, options=None, - serialized_start=5089, - serialized_end=5837, + serialized_start=5018, + serialized_end=5766, ) _sym_db.RegisterEnumDescriptor(_PATTERNFIELD) @@ -590,8 +590,8 @@ ], containing_type=None, options=None, - serialized_start=5840, - serialized_end=6057, + serialized_start=5769, + serialized_end=5986, ) _sym_db.RegisterEnumDescriptor(_FINANCIALQUARTER) @@ -625,8 +625,8 @@ ], containing_type=None, options=None, - serialized_start=6060, - serialized_end=6224, + serialized_start=5989, + serialized_end=6153, ) _sym_db.RegisterEnumDescriptor(_RELATIVEPOSITION) @@ -652,8 +652,8 @@ ], containing_type=None, options=None, - serialized_start=6226, - serialized_end=6292, + serialized_start=6155, + serialized_end=6221, ) _sym_db.RegisterEnumDescriptor(_SORTDIR) @@ -1306,13 +1306,6 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='customIndicatorDataList', full_name='Qot_StockFilter.StockData.customIndicatorDataList', index=5, - number=6, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1326,7 +1319,7 @@ oneofs=[ ], serialized_start=924, - serialized_end=1229, + serialized_end=1158, ) @@ -1412,8 +1405,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1232, - serialized_end=1633, + serialized_start=1161, + serialized_end=1562, ) @@ -1457,8 +1450,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1635, - serialized_end=1722, + serialized_start=1564, + serialized_end=1651, ) @@ -1488,8 +1481,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1724, - serialized_end=1768, + serialized_start=1653, + serialized_end=1697, ) @@ -1540,15 +1533,14 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1770, - serialized_end=1871, + serialized_start=1699, + serialized_end=1800, ) _STOCKDATA.fields_by_name['security'].message_type = Qot__Common__pb2._SECURITY _STOCKDATA.fields_by_name['baseDataList'].message_type = _BASEDATA _STOCKDATA.fields_by_name['accumulateDataList'].message_type = _ACCUMULATEDATA _STOCKDATA.fields_by_name['financialDataList'].message_type = _FINANCIALDATA -_STOCKDATA.fields_by_name['customIndicatorDataList'].message_type = _CUSTOMINDICATORDATA _C2S.fields_by_name['plate'].message_type = Qot__Common__pb2._SECURITY _C2S.fields_by_name['baseFilterList'].message_type = _BASEFILTER _C2S.fields_by_name['accumulateFilterList'].message_type = _ACCUMULATEFILTER diff --git a/futu/common/pb/Trd_Common.proto b/futu/common/pb/Trd_Common.proto index d25eb6d..db11a61 100644 --- a/futu/common/pb/Trd_Common.proto +++ b/futu/common/pb/Trd_Common.proto @@ -27,10 +27,12 @@ enum TrdMarket enum TrdSecMarket { TrdSecMarket_Unknown = 0; //未知市场 - TrdSecMarket_HK = 1; //香港的(正股、窝轮等) - TrdSecMarket_US = 2; //美国的(正股、期权等) - TrdSecMarket_CN_SH = 31; //沪市的(正股) - TrdSecMarket_CN_SZ = 32; //深市的(正股) + TrdSecMarket_HK = 1; //香港市场(股票、窝轮、牛熊、期权、期货等) + TrdSecMarket_US = 2; //美国市场(股票、期权、期货等) + TrdSecMarket_CN_SH = 31; //沪股市场(股票) + TrdSecMarket_CN_SZ = 32; //深股市场(股票) + TrdSecMarket_SG = 41; //新加坡市场(期货) + TrdSecMarket_JP = 51; //日本市场(期货) } //交易方向 @@ -123,6 +125,7 @@ enum Currency Currency_HKD = 1; // 港币 Currency_USD = 2; // 美元 Currency_CNH = 3; // 离岸人民币 + Currency_JPY = 4; // 日元 } //账户风险控制等级 @@ -159,6 +162,21 @@ enum SimAccType SimAccType_Option = 2; //期权模拟账户(仅用于交易期权,不支持交易股票证券类产品) } +//风险状态,共分 9 个等级,LEVEL1是最安全,LEVEL9是最危险 +enum CltRiskStatus +{ + CltRiskStatus_Unknown = 0; //未知 + CltRiskStatus_Level1 = 1; //非常安全 + CltRiskStatus_Level2 = 2; //安全 + CltRiskStatus_Level3 = 3; //较安全 + CltRiskStatus_Level4 = 4; //较低风险 + CltRiskStatus_Level5 = 5; //中等风险 + CltRiskStatus_Level6 = 6; //较高风险 + CltRiskStatus_Level7 = 7; //预警 + CltRiskStatus_Level8 = 8; //预警 + CltRiskStatus_Level9 = 9; //预警 +} + //账户现金信息,目前仅用于期货账户 message AccCashInfo { @@ -184,27 +202,37 @@ message TrdAcc optional int32 accType = 4; //账户类型,取值见TrdAccType optional string cardNum = 5; //卡号 optional int32 securityFirm = 6; //所属券商,取值见SecurityFirm + optional int32 simAccType = 7; //模拟交易账号类型,取值见SimAccType } //账户资金结构 message Funds { - required double power = 1; //最大购买力(做多),3位精度,下同。期货账户此字段为0 + required double power = 1; //最大购买力(做多),3位精度,下同。 required double totalAssets = 2; //资产净值 - required double cash = 3; //现金, 期货账户此字段为0 - required double marketVal = 4; //证券市值, 期货账户此字段为0 - required double frozenCash = 5; //冻结金额 - required double debtCash = 6; //欠款金额, 期货账户此字段为0 - required double avlWithdrawalCash = 7; //可提金额, 期货账户此字段为0 + required double cash = 3; //现金 + required double marketVal = 4; //证券市值, 仅证券账户适用 + required double frozenCash = 5; //冻结资金 + required double debtCash = 6; //计息金额 + required double avlWithdrawalCash = 7; //现金可提,仅证券账户适用 optional int32 currency = 8; //币种,本结构体资金相关的货币类型,取值参见 Currency,期货适用 optional double availableFunds = 9; //可用资金,期货适用 optional double unrealizedPL = 10; //未实现盈亏,期货适用 optional double realizedPL = 11; //已实现盈亏,期货适用 optional int32 riskLevel = 12; //风控状态,参见 CltRiskLevel, 期货适用 - optional double initialMargin = 13; //初始保证金,期货适用 - optional double maintenanceMargin = 14; //维持保证金,期货适用 + optional double initialMargin = 13; //初始保证金 + optional double maintenanceMargin = 14; //维持保证金 repeated AccCashInfo cashInfoList = 15; //分币种的现金信息,期货适用 + + optional double maxPowerShort = 16; //卖空购买力 + optional double netCashPower = 17; //现金购买力 + optional double longMv = 18; //多头市值 + optional double shortMv = 19; //空头市值 + optional double pendingAsset = 20; //在途资产 + optional double maxWithdrawal = 21; //融资可提,仅证券账户适用 + optional int32 riskStatus = 22; //风险状态,参见 [CltRiskStatus],证券账户适用,共分 9 个等级,LEVEL1是最安全,LEVEL9是最危险 + optional double marginCallMargin = 23; // Margin Call 保证金 } //账户持仓结构 @@ -290,6 +318,8 @@ message MaxTrdQtys required double maxPositionSell = 3; //不使用融券(卖空),仅自己的持仓最大可卖整手股数 optional double maxSellShort = 4; //使用融券(卖空),最大可卖空整手股数,不包括多仓,期货不适用 optional double maxBuyBack = 5; //卖空后,需要买回的最大整手股数。因为卖空后,必须先买回已卖空的股数,还掉股票,才能再继续买多。期货不适用 + optional double longRequiredIM = 6; //开多仓每张合约初始保证金。当前仅期货和期权适用(最低 FutuOpenD 版本要求:5.0.1310) + optional double shortRequiredIM = 7; //开空仓每张合约初始保证金。当前仅期货和期权适用(最低 FutuOpenD 版本要求:5.0.1310) } //过滤条件,条件组合是"与"不是"或",用于获取订单、成交、持仓等时二次过滤 diff --git a/futu/common/pb/Trd_Common_pb2.py b/futu/common/pb/Trd_Common_pb2.py index 295cb53..435b620 100644 --- a/futu/common/pb/Trd_Common_pb2.py +++ b/futu/common/pb/Trd_Common_pb2.py @@ -21,7 +21,7 @@ name='Trd_Common.proto', package='Trd_Common', syntax='proto2', - serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\xb1\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\x12\x16\n\x0elongRequiredIM\x18\x06 \x01(\x01\x12\x17\n\x0fshortRequiredIM\x18\x07 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\x82\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 *m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*V\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\xf9\x01\n\rCltRiskStatus\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\x08\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') + serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\xb1\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\x12\x16\n\x0elongRequiredIM\x18\x06 \x01(\x01\x12\x17\n\x0fshortRequiredIM\x18\x07 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\xac\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 \x12\x13\n\x0fTrdSecMarket_SG\x10)\x12\x13\n\x0fTrdSecMarket_JP\x10\x33*m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*h\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03\x12\x10\n\x0c\x43urrency_JPY\x10\x04*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\x94\x02\n\rCltRiskStatus\x12\x19\n\x15\x43ltRiskStatus_Unknown\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x08\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\tB@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -113,11 +113,19 @@ name='TrdSecMarket_CN_SZ', index=4, number=32, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='TrdSecMarket_SG', index=5, number=41, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TrdSecMarket_JP', index=6, number=51, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=2369, - serialized_end=2499, + serialized_end=2541, ) _sym_db.RegisterEnumDescriptor(_TRDSECMARKET) @@ -151,8 +159,8 @@ ], containing_type=None, options=None, - serialized_start=2501, - serialized_end=2610, + serialized_start=2543, + serialized_end=2652, ) _sym_db.RegisterEnumDescriptor(_TRDSIDE) @@ -198,8 +206,8 @@ ], containing_type=None, options=None, - serialized_start=2613, - serialized_end=2831, + serialized_start=2655, + serialized_end=2873, ) _sym_db.RegisterEnumDescriptor(_ORDERTYPE) @@ -281,8 +289,8 @@ ], containing_type=None, options=None, - serialized_start=2834, - serialized_end=3342, + serialized_start=2876, + serialized_end=3384, ) _sym_db.RegisterEnumDescriptor(_ORDERSTATUS) @@ -308,8 +316,8 @@ ], containing_type=None, options=None, - serialized_start=3344, - serialized_end=3445, + serialized_start=3386, + serialized_end=3487, ) _sym_db.RegisterEnumDescriptor(_ORDERFILLSTATUS) @@ -335,8 +343,8 @@ ], containing_type=None, options=None, - serialized_start=3447, - serialized_end=3543, + serialized_start=3489, + serialized_end=3585, ) _sym_db.RegisterEnumDescriptor(_POSITIONSIDE) @@ -374,8 +382,8 @@ ], containing_type=None, options=None, - serialized_start=3546, - serialized_end=3719, + serialized_start=3588, + serialized_end=3761, ) _sym_db.RegisterEnumDescriptor(_MODIFYORDEROP) @@ -401,8 +409,8 @@ ], containing_type=None, options=None, - serialized_start=3721, - serialized_end=3801, + serialized_start=3763, + serialized_end=3843, ) _sym_db.RegisterEnumDescriptor(_TRDACCTYPE) @@ -429,11 +437,15 @@ name='Currency_CNH', index=3, number=3, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='Currency_JPY', index=4, number=4, + options=None, + type=None), ], containing_type=None, options=None, - serialized_start=3803, - serialized_end=3889, + serialized_start=3845, + serialized_end=3949, ) _sym_db.RegisterEnumDescriptor(_CURRENCY) @@ -471,8 +483,8 @@ ], containing_type=None, options=None, - serialized_start=3892, - serialized_end=4074, + serialized_start=3952, + serialized_end=4134, ) _sym_db.RegisterEnumDescriptor(_CLTRISKLEVEL) @@ -494,8 +506,8 @@ ], containing_type=None, options=None, - serialized_start=4076, - serialized_end=4131, + serialized_start=4136, + serialized_end=4191, ) _sym_db.RegisterEnumDescriptor(_TIMEINFORCE) @@ -521,8 +533,8 @@ ], containing_type=None, options=None, - serialized_start=4133, - serialized_end=4232, + serialized_start=4193, + serialized_end=4292, ) _sym_db.RegisterEnumDescriptor(_SECURITYFIRM) @@ -548,8 +560,8 @@ ], containing_type=None, options=None, - serialized_start=4234, - serialized_end=4315, + serialized_start=4294, + serialized_end=4375, ) _sym_db.RegisterEnumDescriptor(_SIMACCTYPE) @@ -561,46 +573,50 @@ file=DESCRIPTOR, values=[ _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level1', index=0, number=0, + name='CltRiskStatus_Unknown', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CltRiskStatus_Level1', index=1, number=1, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level2', index=1, number=1, + name='CltRiskStatus_Level2', index=2, number=2, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level3', index=2, number=2, + name='CltRiskStatus_Level3', index=3, number=3, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level4', index=3, number=3, + name='CltRiskStatus_Level4', index=4, number=4, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level5', index=4, number=4, + name='CltRiskStatus_Level5', index=5, number=5, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level6', index=5, number=5, + name='CltRiskStatus_Level6', index=6, number=6, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level7', index=6, number=6, + name='CltRiskStatus_Level7', index=7, number=7, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level8', index=7, number=7, + name='CltRiskStatus_Level8', index=8, number=8, options=None, type=None), _descriptor.EnumValueDescriptor( - name='CltRiskStatus_Level9', index=8, number=8, + name='CltRiskStatus_Level9', index=9, number=9, options=None, type=None), ], containing_type=None, options=None, - serialized_start=4318, - serialized_end=4567, + serialized_start=4378, + serialized_end=4654, ) _sym_db.RegisterEnumDescriptor(_CLTRISKSTATUS) @@ -618,6 +634,8 @@ TrdSecMarket_US = 2 TrdSecMarket_CN_SH = 31 TrdSecMarket_CN_SZ = 32 +TrdSecMarket_SG = 41 +TrdSecMarket_JP = 51 TrdSide_Unknown = 0 TrdSide_Buy = 1 TrdSide_Sell = 2 @@ -667,6 +685,7 @@ Currency_HKD = 1 Currency_USD = 2 Currency_CNH = 3 +Currency_JPY = 4 CltRiskLevel_Unknown = -1 CltRiskLevel_Safe = 0 CltRiskLevel_Warning = 1 @@ -681,15 +700,16 @@ SimAccType_Unknown = 0 SimAccType_Stock = 1 SimAccType_Option = 2 -CltRiskStatus_Level1 = 0 -CltRiskStatus_Level2 = 1 -CltRiskStatus_Level3 = 2 -CltRiskStatus_Level4 = 3 -CltRiskStatus_Level5 = 4 -CltRiskStatus_Level6 = 5 -CltRiskStatus_Level7 = 6 -CltRiskStatus_Level8 = 7 -CltRiskStatus_Level9 = 8 +CltRiskStatus_Unknown = 0 +CltRiskStatus_Level1 = 1 +CltRiskStatus_Level2 = 2 +CltRiskStatus_Level3 = 3 +CltRiskStatus_Level4 = 4 +CltRiskStatus_Level5 = 5 +CltRiskStatus_Level6 = 6 +CltRiskStatus_Level7 = 7 +CltRiskStatus_Level8 = 8 +CltRiskStatus_Level9 = 9 diff --git a/futu/common/pb/Trd_GetMaxTrdQtys.proto b/futu/common/pb/Trd_GetMaxTrdQtys.proto index 39bebba..e93fa5a 100644 --- a/futu/common/pb/Trd_GetMaxTrdQtys.proto +++ b/futu/common/pb/Trd_GetMaxTrdQtys.proto @@ -11,7 +11,7 @@ message C2S required Trd_Common.TrdHeader header = 1; //交易公共参数头 required int32 orderType = 2; //订单类型, 参见Trd_Common.OrderType的枚举定义 required string code = 3; //代码,港股必须是5位数字,A股必须是6位数字,美股没限制 - required double price = 4; //价格,3位精度(期货9位)。如果是竞价、市价单,请也填入一个当前价格,服务器才好计算 + required double price = 4; //价格,(证券账户精确到小数点后 3 位,期货账户精确到小数点后 9 位,超出部分会被舍弃)。如果是竞价、市价单,请也填入一个当前价格,服务器才好计算 optional uint64 orderID = 5; //订单号,新下订单不需要,如果是修改订单就需要把原订单号带上才行,因为改单的最大买卖数量会包含原订单数量。 //为保证与下单的价格同步,也提供调整价格选项,以下2个为调整价格使用,对港、A股有意义,因为港股有价位,A股2位精度,美股可不传 optional bool adjustPrice = 6; //是否调整价格,如果价格不合法,是否调整到合法价位,true调整,false不调整 diff --git a/futu/common/pb/Trd_ModifyOrder.proto b/futu/common/pb/Trd_ModifyOrder.proto index 60e40cb..b03ad31 100644 --- a/futu/common/pb/Trd_ModifyOrder.proto +++ b/futu/common/pb/Trd_ModifyOrder.proto @@ -15,8 +15,8 @@ message C2S optional bool forAll = 5; //是否对此业务账户的全部订单操作,true是,false否(对单个订单),无此字段代表false,仅对单个订单 //下面的字段仅针对单个订单,且modifyOrderOp为ModifyOrderOp_Normal有效 - optional double qty = 8; //数量,2位精度,期权单位是"张" - optional double price = 9; //价格,3位精度(A股2位),期货9位 + optional double qty = 8; //数量,期权单位是"张"(精确到小数点后 0 位,超出部分会被舍弃) + optional double price = 9; //价格,(证券账户精确到小数点后 3 位,期货账户精确到小数点后 9 位,超出部分会被舍弃) //以下为调整价格使用,都传才有效,对港、A股有意义,因为港股有价位,A股2位精度,美股可不传 optional bool adjustPrice = 10; //是否调整价格,如果价格不合法,是否调整到合法价位,true调整,false不调整 optional double adjustSideAndLimit = 11; //调整方向和调整幅度百分比限制,正数代表向上调整,负数代表向下调整,具体值代表调整幅度限制,如:0.015代表向上调整且幅度不超过1.5%;-0.01代表向下调整且幅度不超过1% diff --git a/futu/common/pb/Trd_PlaceOrder.proto b/futu/common/pb/Trd_PlaceOrder.proto index 827dd5c..90f7d5e 100644 --- a/futu/common/pb/Trd_PlaceOrder.proto +++ b/futu/common/pb/Trd_PlaceOrder.proto @@ -13,8 +13,8 @@ message C2S required int32 trdSide = 3; //交易方向, 参见Trd_Common.TrdSide的枚举定义 required int32 orderType = 4; //订单类型, 参见Trd_Common.OrderType的枚举定义 required string code = 5; //代码,港股必须是5位数字,A股必须是6位数字,美股没限制 - required double qty = 6; //数量,2位精度,期权单位是"张" - optional double price = 7; //价格,大于1的精度为2位,小于1的精度为3位,3位精度,期货9位 + required double qty = 6; //数量,期权单位是"张"(精确到小数点后 0 位,超出部分会被舍弃。期权期货单位是"张") + optional double price = 7; //价格,(证券账户精确到小数点后 3 位,期货账户精确到小数点后 9 位,超出部分会被舍弃) //以下2个为调整价格使用,都传才有效,对港、A股有意义,因为港股有价位,A股2位精度,美股可不传 optional bool adjustPrice = 8; //是否调整价格,如果价格不合法,是否调整到合法价位,true调整,false不调整 optional double adjustSideAndLimit = 9; //调整方向和调整幅度百分比限制,正数代表向上调整,负数代表向下调整,具体值代表调整幅度限制,如:0.015代表向上调整且幅度不超过1.5%;-0.01代表向下调整且幅度不超过1% diff --git a/futu/common/pb/Trd_UnlockTrade.proto b/futu/common/pb/Trd_UnlockTrade.proto index ee56a05..40ed726 100644 --- a/futu/common/pb/Trd_UnlockTrade.proto +++ b/futu/common/pb/Trd_UnlockTrade.proto @@ -9,6 +9,7 @@ message C2S { required bool unlock = 1; //true解锁交易,false锁定交易 optional string pwdMD5 = 2; //交易密码的MD5转16进制(全小写),解锁交易必须要填密码,锁定交易不需要验证密码,可不填 + optional int32 securityFirm = 3; //券商标识,取值见Trd_Common.SecurityFirm } message S2C From 5b5abfe934774bc2122d2f4b9990bd26024e7b74 Mon Sep 17 00:00:00 2001 From: alexqli Date: Tue, 9 Mar 2021 20:32:55 +0800 Subject: [PATCH 22/36] =?UTF-8?q?=E6=94=AF=E6=8C=81jp=E5=92=8Csg=E6=9C=9F?= =?UTF-8?q?=E8=B4=A7=E4=BA=A4=E6=98=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 10 ++- futu/common/pb/Qot_Common_pb2.py | 130 +++++++++++++++++-------------- futu/common/utils.py | 4 + 3 files changed, 83 insertions(+), 61 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 94317b0..1762ab4 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -255,6 +255,8 @@ class Market(FtEnum): SH = "SH" SZ = "SZ" HK_FUTURE = "HK_FUTURE" + SG = "SG" + JP = "JP" def load_dic(self): return { @@ -264,6 +266,8 @@ def load_dic(self): self.SH: Qot_Common_pb2.QotMarket_CNSH_Security, self.SZ: Qot_Common_pb2.QotMarket_CNSZ_Security, self.HK_FUTURE: Qot_Common_pb2.QotMarket_HK_Future, + self.SG: Qot_Common_pb2.QotMarket_SG_Security, + self.JP: Qot_Common_pb2.QotMarket_JP_Security } QOT_MARKET_TO_TRD_SEC_MARKET_MAP = { @@ -273,6 +277,8 @@ def load_dic(self): Qot_Common_pb2.QotMarket_HK_Security: Trd_Common_pb2.TrdSecMarket_HK, Qot_Common_pb2.QotMarket_HK_Future: Trd_Common_pb2.TrdSecMarket_HK, Qot_Common_pb2.QotMarket_US_Security: Trd_Common_pb2.TrdSecMarket_US, + Qot_Common_pb2.QotMarket_SG_Security: Trd_Common_pb2.TrdSecMarket_SG, + Qot_Common_pb2.QotMarket_JP_Security: Trd_Common_pb2.TrdSecMarket_JP, } @@ -2226,13 +2232,15 @@ class Currency(FtEnum): HKD = 'HKD' # 港币 USD = 'USD' # 美元 CNH = 'CNH' # 离岸人民币 + JPY = 'JPY' # 日元 def load_dic(self): return { self.NONE: Trd_Common_pb2.Currency_Unknown, self.HKD: Trd_Common_pb2.Currency_HKD, self.USD: Trd_Common_pb2.Currency_USD, - self.CNH: Trd_Common_pb2.Currency_CNH + self.CNH: Trd_Common_pb2.Currency_CNH, + self.JPY: Trd_Common_pb2.Currency_JPY } class CltRiskLevel(FtEnum): diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index 0f00898..aa67ff2 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xab\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -55,11 +55,19 @@ name='QotMarket_CNSZ_Security', index=5, number=22, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='QotMarket_SG_Security', index=6, number=31, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='QotMarket_JP_Security', index=7, number=41, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=4108, - serialized_end=4279, + serialized_end=4333, ) _sym_db.RegisterEnumDescriptor(_QOTMARKET) @@ -117,8 +125,8 @@ ], containing_type=None, options=None, - serialized_start=4282, - serialized_end=4564, + serialized_start=4336, + serialized_end=4618, ) _sym_db.RegisterEnumDescriptor(_SECURITYTYPE) @@ -152,8 +160,8 @@ ], containing_type=None, options=None, - serialized_start=4567, - serialized_end=4705, + serialized_start=4621, + serialized_end=4759, ) _sym_db.RegisterEnumDescriptor(_PLATESETTYPE) @@ -191,8 +199,8 @@ ], containing_type=None, options=None, - serialized_start=4708, - serialized_end=4857, + serialized_start=4762, + serialized_end=4911, ) _sym_db.RegisterEnumDescriptor(_WARRANTTYPE) @@ -218,8 +226,8 @@ ], containing_type=None, options=None, - serialized_start=4859, - serialized_end=4936, + serialized_start=4913, + serialized_end=4990, ) _sym_db.RegisterEnumDescriptor(_OPTIONTYPE) @@ -245,8 +253,8 @@ ], containing_type=None, options=None, - serialized_start=4938, - serialized_end=5039, + serialized_start=4992, + serialized_end=5093, ) _sym_db.RegisterEnumDescriptor(_INDEXOPTIONTYPE) @@ -276,8 +284,8 @@ ], containing_type=None, options=None, - serialized_start=5042, - serialized_end=5172, + serialized_start=5096, + serialized_end=5226, ) _sym_db.RegisterEnumDescriptor(_OPTIONAREATYPE) @@ -403,8 +411,8 @@ ], containing_type=None, options=None, - serialized_start=5175, - serialized_end=6111, + serialized_start=5229, + serialized_end=6165, ) _sym_db.RegisterEnumDescriptor(_QOTMARKETSTATE) @@ -442,8 +450,8 @@ ], containing_type=None, options=None, - serialized_start=6114, - serialized_end=6280, + serialized_start=6168, + serialized_end=6334, ) _sym_db.RegisterEnumDescriptor(_TRADEDATEMARKET) @@ -469,8 +477,8 @@ ], containing_type=None, options=None, - serialized_start=6282, - serialized_end=6378, + serialized_start=6336, + serialized_end=6432, ) _sym_db.RegisterEnumDescriptor(_TRADEDATETYPE) @@ -496,8 +504,8 @@ ], containing_type=None, options=None, - serialized_start=6380, - serialized_end=6458, + serialized_start=6434, + serialized_end=6512, ) _sym_db.RegisterEnumDescriptor(_REHABTYPE) @@ -559,8 +567,8 @@ ], containing_type=None, options=None, - serialized_start=6461, - serialized_end=6682, + serialized_start=6515, + serialized_end=6736, ) _sym_db.RegisterEnumDescriptor(_KLTYPE) @@ -618,8 +626,8 @@ ], containing_type=None, options=None, - serialized_start=6685, - serialized_end=6930, + serialized_start=6739, + serialized_end=6984, ) _sym_db.RegisterEnumDescriptor(_KLFIELDS) @@ -705,8 +713,8 @@ ], containing_type=None, options=None, - serialized_start=6933, - serialized_end=7320, + serialized_start=6987, + serialized_end=7374, ) _sym_db.RegisterEnumDescriptor(_SUBTYPE) @@ -736,8 +744,8 @@ ], containing_type=None, options=None, - serialized_start=7322, - serialized_end=7447, + serialized_start=7376, + serialized_end=7501, ) _sym_db.RegisterEnumDescriptor(_TICKERDIRECTION) @@ -879,8 +887,8 @@ ], containing_type=None, options=None, - serialized_start=7450, - serialized_end=8374, + serialized_start=7504, + serialized_end=8428, ) _sym_db.RegisterEnumDescriptor(_TICKERTYPE) @@ -906,8 +914,8 @@ ], containing_type=None, options=None, - serialized_start=8376, - serialized_end=8453, + serialized_start=8430, + serialized_end=8507, ) _sym_db.RegisterEnumDescriptor(_DARKSTATUS) @@ -1009,8 +1017,8 @@ ], containing_type=None, options=None, - serialized_start=8456, - serialized_end=9244, + serialized_start=8510, + serialized_end=9298, ) _sym_db.RegisterEnumDescriptor(_SECURITYSTATUS) @@ -1040,8 +1048,8 @@ ], containing_type=None, options=None, - serialized_start=9247, - serialized_end=9376, + serialized_start=9301, + serialized_end=9430, ) _sym_db.RegisterEnumDescriptor(_HOLDERCATEGORY) @@ -1071,8 +1079,8 @@ ], containing_type=None, options=None, - serialized_start=9378, - serialized_end=9496, + serialized_start=9432, + serialized_end=9550, ) _sym_db.RegisterEnumDescriptor(_PUSHDATATYPE) @@ -1290,8 +1298,8 @@ ], containing_type=None, options=None, - serialized_start=9499, - serialized_end=10862, + serialized_start=9553, + serialized_end=10916, ) _sym_db.RegisterEnumDescriptor(_SORTFIELD) @@ -1405,8 +1413,8 @@ ], containing_type=None, options=None, - serialized_start=10865, - serialized_end=11252, + serialized_start=10919, + serialized_end=11306, ) _sym_db.RegisterEnumDescriptor(_ISSUER) @@ -1444,8 +1452,8 @@ ], containing_type=None, options=None, - serialized_start=11255, - serialized_end=11406, + serialized_start=11309, + serialized_end=11460, ) _sym_db.RegisterEnumDescriptor(_IPOPERIOD) @@ -1471,8 +1479,8 @@ ], containing_type=None, options=None, - serialized_start=11408, - serialized_end=11486, + serialized_start=11462, + serialized_end=11540, ) _sym_db.RegisterEnumDescriptor(_PRICETYPE) @@ -1506,8 +1514,8 @@ ], containing_type=None, options=None, - serialized_start=11489, - serialized_end=11646, + serialized_start=11543, + serialized_end=11700, ) _sym_db.RegisterEnumDescriptor(_WARRANTSTATUS) @@ -1557,8 +1565,8 @@ ], containing_type=None, options=None, - serialized_start=11649, - serialized_end=11867, + serialized_start=11703, + serialized_end=11921, ) _sym_db.RegisterEnumDescriptor(_COMPANYACT) @@ -1596,8 +1604,8 @@ ], containing_type=None, options=None, - serialized_start=11869, - serialized_end=11994, + serialized_start=11923, + serialized_end=12048, ) _sym_db.RegisterEnumDescriptor(_QOTRIGHT) @@ -1667,8 +1675,8 @@ ], containing_type=None, options=None, - serialized_start=11997, - serialized_end=12505, + serialized_start=12051, + serialized_end=12559, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERTYPE) @@ -1698,8 +1706,8 @@ ], containing_type=None, options=None, - serialized_start=12508, - serialized_end=12652, + serialized_start=12562, + serialized_end=12706, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERFREQ) @@ -1741,8 +1749,8 @@ ], containing_type=None, options=None, - serialized_start=12655, - serialized_end=12834, + serialized_start=12709, + serialized_end=12888, ) _sym_db.RegisterEnumDescriptor(_ASSETCLASS) @@ -1753,6 +1761,8 @@ QotMarket_US_Security = 11 QotMarket_CNSH_Security = 21 QotMarket_CNSZ_Security = 22 +QotMarket_SG_Security = 31 +QotMarket_JP_Security = 41 SecurityType_Unknown = 0 SecurityType_Bond = 1 SecurityType_Bwrt = 2 diff --git a/futu/common/utils.py b/futu/common/utils.py index 50c18e1..11c0048 100644 --- a/futu/common/utils.py +++ b/futu/common/utils.py @@ -182,6 +182,10 @@ def merge_trd_mkt_stock_str(trd_sec_mkt, partial_stock_str): mkt_qot = Market.SZ elif trd_sec_mkt == Trd_Common_pb2.TrdSecMarket_US: mkt_qot = Market.US + elif trd_sec_mkt == Trd_Common_pb2.TrdSecMarket_SG: + mkt_qot = Market.SG + elif trd_sec_mkt == Trd_Common_pb2.TrdSecMarket_JP: + mkt_qot = Market.JP _, mkt = Market.to_number(mkt_qot) return merge_qot_mkt_stock_str(mkt, partial_stock_str) From 6fd04ce1fcf59bdf4028b5c05b68b275247c4064 Mon Sep 17 00:00:00 2001 From: alexqli Date: Wed, 10 Mar 2021 11:25:42 +0800 Subject: [PATCH 23/36] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=81=97=E6=BC=8Fproto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/pb/Qot_Common.proto | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index 778a7ff..50438a3 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -8,11 +8,13 @@ import "Common.proto"; enum QotMarket { QotMarket_Unknown = 0; //未知市场 - QotMarket_HK_Security = 1; //港股 + QotMarket_HK_Security = 1; //香港市场 QotMarket_HK_Future = 2; //港期货(已废弃,使用QotMarket_HK_Security即可) - QotMarket_US_Security = 11; //美股 - QotMarket_CNSH_Security = 21; //沪股 - QotMarket_CNSZ_Security = 22; //深股 + QotMarket_US_Security = 11; //美国市场 + QotMarket_CNSH_Security = 21; //沪股市场 + QotMarket_CNSZ_Security = 22; //深股市场 + QotMarket_SG_Security = 31; //新加坡市场 + QotMarket_JP_Security = 41; //日本市场 } enum SecurityType From 96a53023c9736c37c789696c89753d4f0d6c33e8 Mon Sep 17 00:00:00 2001 From: pspeng Date: Wed, 10 Mar 2021 11:32:38 +0800 Subject: [PATCH 24/36] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E3min=E5=88=B0?= =?UTF-8?q?=E4=BB=B7=E6=8F=90=E9=86=92=E5=AD=97=E6=AE=B5=EF=BC=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0PythonAPI=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 4 ++++ futu/common/pb/Qot_Common.proto | 28 +++++++++++++++------------- futu/common/pb/Qot_Common_pb2.py | 22 ++++++++++++++++------ 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 1762ab4..88b3ad3 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -2354,6 +2354,8 @@ class PriceReminderType(FtEnum): ASK_PRICE_DOWN = "ASK_PRICE_DOWN" # 卖一价低于 BID_VOL_UP = "BID_VOL_UP" # 买一量高于 ASK_VOL_UP = "ASK_VOL_UP" # 卖一量高于 + THREE_MIN_CHANGE_RATE_UP = "THREE_MIN_CHANGE_RATE_UP" # 3分钟涨幅 + THREE_MIN_CHANGE_RATE_DOWN = "THREE_MIN_CHANGE_RATE_DOWN" # 3分钟跌幅 def load_dic(self): return { @@ -2371,6 +2373,8 @@ def load_dic(self): self.ASK_PRICE_DOWN: Qot_Common_pb2.PriceReminderType_AskPriceDown, self.BID_VOL_UP: Qot_Common_pb2.PriceReminderType_BidVolUp, self.ASK_VOL_UP: Qot_Common_pb2.PriceReminderType_AskVolUp, + self.THREE_MIN_CHANGE_RATE_UP: Qot_Common_pb2.PriceReminderType_3MinChangeRateUp, + self.THREE_MIN_CHANGE_RATE_DOWN: Qot_Common_pb2.PriceReminderType_3MinChangeRateDown, } class PriceReminderMarketStatus(FtEnum): diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index 50438a3..910fd73 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -431,20 +431,22 @@ enum QotRight // 提醒类型 enum PriceReminderType { - PriceReminderType_Unknown = 0; // 未知 + PriceReminderType_Unknown = 0; // 未知 PriceReminderType_PriceUp = 1; // 价格涨到 - PriceReminderType_PriceDown = 2; // 价格跌到 - PriceReminderType_ChangeRateUp = 3; // 日涨幅超,该字段为百分比字段,设置时填20表示20% - PriceReminderType_ChangeRateDown = 4; // 日跌幅超,该字段为百分比字段,设置时填20表示20% - PriceReminderType_5MinChangeRateUp = 5; // 5分钟涨幅超,该字段为百分比字段,设置时填20表示20% - PriceReminderType_5MinChangeRateDown = 6; // 5分钟跌幅超,该字段为百分比字段,设置时填20表示20% - PriceReminderType_VolumeUp = 7; // 成交量超过 - PriceReminderType_TurnoverUp = 8; // 成交额超过 - PriceReminderType_TurnoverRateUp = 9; // 换手率超过,该字段为百分比字段,设置时填20表示20% - PriceReminderType_BidPriceUp = 10; // 买一价高于 - PriceReminderType_AskPriceDown = 11; // 卖一价低于 - PriceReminderType_BidVolUp = 12; // 买一量高于 - PriceReminderType_AskVolUp = 13; // 卖一量高于 + PriceReminderType_PriceDown = 2; // 价格跌到 + PriceReminderType_ChangeRateUp = 3; // 日涨幅超(该字段为百分比字段,设置时填 20 表示 20%) + PriceReminderType_ChangeRateDown = 4; // 日跌幅超(该字段为百分比字段,设置时填 20 表示 20%) + PriceReminderType_5MinChangeRateUp = 5; // 5 分钟涨幅超(该字段为百分比字段,设置时填 20 表示 20%) + PriceReminderType_5MinChangeRateDown = 6; // 5 分钟跌幅超(该字段为百分比字段,设置时填 20 表示 20%) + PriceReminderType_VolumeUp = 7; // 成交量超过 + PriceReminderType_TurnoverUp = 8; // 成交额超过 + PriceReminderType_TurnoverRateUp = 9; // 换手率超过(该字段为百分比字段,设置时填 20 表示 20%) + PriceReminderType_BidPriceUp = 10; // 买一价高于 + PriceReminderType_AskPriceDown = 11; // 卖一价低于 + PriceReminderType_BidVolUp = 12; // 买一量高于 + PriceReminderType_AskVolUp = 13; // 卖一量高于 + PriceReminderType_3MinChangeRateUp = 14; // 3 分钟涨幅超(该字段为百分比字段,设置时填 20 表示 20%) + PriceReminderType_3MinChangeRateDown = 15; // 3 分钟跌幅超(该字段为百分比字段,设置时填 20 表示 20%) } // 提醒频率 diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index aa67ff2..774a2a9 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xfc\x03\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xce\x04\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r\x12&\n\"PriceReminderType_3MinChangeRateUp\x10\x0e\x12(\n$PriceReminderType_3MinChangeRateDown\x10\x0f*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -1672,11 +1672,19 @@ name='PriceReminderType_AskVolUp', index=13, number=13, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='PriceReminderType_3MinChangeRateUp', index=14, number=14, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PriceReminderType_3MinChangeRateDown', index=15, number=15, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=12051, - serialized_end=12559, + serialized_end=12641, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERTYPE) @@ -1706,8 +1714,8 @@ ], containing_type=None, options=None, - serialized_start=12562, - serialized_end=12706, + serialized_start=12644, + serialized_end=12788, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERFREQ) @@ -1749,8 +1757,8 @@ ], containing_type=None, options=None, - serialized_start=12709, - serialized_end=12888, + serialized_start=12791, + serialized_end=12970, ) _sym_db.RegisterEnumDescriptor(_ASSETCLASS) @@ -2064,6 +2072,8 @@ PriceReminderType_AskPriceDown = 11 PriceReminderType_BidVolUp = 12 PriceReminderType_AskVolUp = 13 +PriceReminderType_3MinChangeRateUp = 14 +PriceReminderType_3MinChangeRateDown = 15 PriceReminderFreq_Unknown = 0 PriceReminderFreq_Always = 1 PriceReminderFreq_OnceADay = 2 From d76ab5a09c349bc9ef9d2810160f79187cf81455 Mon Sep 17 00:00:00 2001 From: alexqli Date: Wed, 10 Mar 2021 17:42:04 +0800 Subject: [PATCH 25/36] =?UTF-8?q?fix=EF=BC=9A=E5=BD=93=E6=94=B6=E5=8C=85?= =?UTF-8?q?=E8=BF=87=E5=A4=9A=E5=A4=84=E7=90=86=E4=B8=8D=E8=BF=87=E6=9D=A5?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=8F=8A=E6=97=B6=E5=8F=91?= =?UTF-8?q?=E9=80=81keep-alive=EF=BC=8C=E4=B8=94=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E5=9B=A0=E4=B8=BA=E6=94=B6keep-alive=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E8=80=8C=E6=96=AD=E5=BC=80=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/network_manager.py | 2 ++ futu/common/open_context_base.py | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/futu/common/network_manager.py b/futu/common/network_manager.py index 5d2bba1..33d8fa6 100644 --- a/futu/common/network_manager.py +++ b/futu/common/network_manager.py @@ -483,6 +483,8 @@ def _on_read(self, conn): del conn.readbuf[:head_len+body_len] packet_count += 1 self._on_packet(conn, head_dict, Err.Ok.code, '', rsp_body) + if packet_count >= 10: + break #收10个包强制跳出循环,避免长时间解包导致无法发送心跳 if is_closed: self.close(conn.conn_id) diff --git a/futu/common/open_context_base.py b/futu/common/open_context_base.py index cd604b5..8892feb 100644 --- a/futu/common/open_context_base.py +++ b/futu/common/open_context_base.py @@ -46,6 +46,7 @@ def __init__(self, host, port, is_async_connect, is_encrypt=None): self._reconnect_interval = 8 # 重试连接的间隔 self._sync_query_connect_timeout = None self._keep_alive_fail_count = 0 + self._last_recv_time = datetime.now() self._is_encrypt = is_encrypt if self.is_encrypt(): assert SysConfig.INIT_RSA_FILE != '', Err.NotSetRSAFile.text @@ -226,6 +227,8 @@ def sync_query_processor(**kargs): if ret_code != RET_OK: return ret_code, msg, None + with self._lock: + self._last_recv_time = datetime.now() ret_code, msg, content = unpack_func(rsp_str) if ret_code != RET_OK: return ret_code, msg, None @@ -398,6 +401,8 @@ def on_packet(self, conn_id, proto_info, ret_code, msg, rsp_pb): elif ret_code == RET_OK: item = CallbackItem(self, proto_info.proto_id, rsp_pb) self._callback_executor.queue.put(item) + with self._lock: + self._last_recv_time = datetime.now() def on_activate(self, conn_id, now): with self._lock: @@ -440,7 +445,9 @@ def _handle_init_connect(self, conn_id, proto_info, ret, msg, rsp_pb): self._sync_conn_id = conn_info['conn_id'] self._keep_alive_interval = conn_info['keep_alive_interval'] * 4 / 5 self._net_mgr.set_conn_info(conn_id, conn_info) - self._last_keep_alive_time = datetime.now() + now = datetime.now() + self._last_keep_alive_time = now + self._last_recv_time = now FutuConnMng.add_conn(conn_info) logger.info(FTLog.make_log_msg("InitConnect ok", conn_id=conn_id, info=conn_info)) else: @@ -456,9 +463,14 @@ def _handle_keep_alive(self, conn_id, proto_info, ret_code, msg, rsp_pb): else: self._keep_alive_fail_count += 1 + now = datetime.now() + if self._keep_alive_fail_count >= 3: - logger.warning('Fail to recv KeepAlive for 3 times') - should_reconnect = True + if (now - self._last_recv_time).total_seconds() < self._keep_alive_interval: + self._keep_alive_fail_count = 0 + else: + logger.warning('Fail to recv KeepAlive for 3 times') + should_reconnect = True if should_reconnect: self._wait_reconnect() From c2afe8311d0805025a7206f2d2ffe8ceeba5ae45 Mon Sep 17 00:00:00 2001 From: byblehua Date: Tue, 23 Mar 2021 21:20:44 +0800 Subject: [PATCH 26/36] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index 2fef54d..30c4bca 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.1.1320 +5.3.1507 From da89e86a9fcacb816b001b467fa08c455061b543 Mon Sep 17 00:00:00 2001 From: alexqli Date: Wed, 31 Mar 2021 11:03:54 +0800 Subject: [PATCH 27/36] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B0=E5=8A=A0?= =?UTF-8?q?=E5=9D=A1=E5=88=B8=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 4 +++- futu/common/pb/Common_pb2.py | 13 +++++++++---- futu/common/pb/Trd_Common.proto | 5 +++-- futu/common/pb/Trd_Common_pb2.py | 17 +++++++++++------ 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 23ec6d7..10a5b5e 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -2447,12 +2447,14 @@ class SecurityFirm(FtEnum): NONE = 'N/A' FUTUSECURITIES = 'FUTUSECURITIES' FUTUINC = 'FUTUINC' + FUTUSG = 'FUTUSG' def load_dic(self): return { self.NONE: Trd_Common_pb2.SecurityFirm_Unknown, self.FUTUSECURITIES: Trd_Common_pb2.SecurityFirm_FutuSecurities, - self.FUTUINC: Trd_Common_pb2.SecurityFirm_FutuInc + self.FUTUINC: Trd_Common_pb2.SecurityFirm_FutuInc, + self.FUTUSG: Trd_Common_pb2.SecurityFirm_FutuSG } # 模拟交易账号类型 diff --git a/futu/common/pb/Common_pb2.py b/futu/common/pb/Common_pb2.py index 36269b4..38af1ee 100644 --- a/futu/common/pb/Common_pb2.py +++ b/futu/common/pb/Common_pb2.py @@ -20,7 +20,7 @@ name='Common.proto', package='Common', syntax='proto2', - serialized_pb=_b('\n\x0c\x43ommon.proto\x12\x06\x43ommon\",\n\x08PacketID\x12\x0e\n\x06\x63onnID\x18\x01 \x02(\x04\x12\x10\n\x08serialNo\x18\x02 \x02(\r\"L\n\rProgramStatus\x12\'\n\x04type\x18\x01 \x02(\x0e\x32\x19.Common.ProgramStatusType\x12\x12\n\nstrExtDesc\x18\x02 \x01(\t*\xb6\x01\n\x07RetType\x12\x13\n\x0fRetType_Succeed\x10\x00\x12\x1b\n\x0eRetType_Failed\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_TimeOut\x10\x9c\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1f\n\x12RetType_DisConnect\x10\xb8\xfe\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Unknown\x10\xf0\xfc\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Invalid\x10\x8c\xfc\xff\xff\xff\xff\xff\xff\xff\x01*\x83\x01\n\rPacketEncAlgo\x12\x1b\n\x17PacketEncAlgo_FTAES_ECB\x10\x00\x12\x1f\n\x12PacketEncAlgo_None\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x15PacketEncAlgo_AES_ECB\x10\x01\x12\x19\n\x15PacketEncAlgo_AES_CBC\x10\x02*4\n\x08ProtoFmt\x12\x15\n\x11ProtoFmt_Protobuf\x10\x00\x12\x11\n\rProtoFmt_Json\x10\x01*^\n\x0fUserAttribution\x12\x1b\n\x17UserAttribution_Unknown\x10\x00\x12\x16\n\x12UserAttribution_NN\x10\x01\x12\x16\n\x12UserAttribution_MM\x10\x02*\xf0\x03\n\x11ProgramStatusType\x12\x1a\n\x16ProgramStatusType_None\x10\x00\x12\x1c\n\x18ProgramStatusType_Loaded\x10\x01\x12\x1c\n\x18ProgramStatusType_Loging\x10\x02\x12\'\n#ProgramStatusType_NeedPicVerifyCode\x10\x03\x12)\n%ProgramStatusType_NeedPhoneVerifyCode\x10\x04\x12!\n\x1dProgramStatusType_LoginFailed\x10\x05\x12!\n\x1dProgramStatusType_ForceUpdate\x10\x06\x12*\n&ProgramStatusType_NessaryDataPreparing\x10\x07\x12(\n$ProgramStatusType_NessaryDataMissing\x10\x08\x12\'\n#ProgramStatusType_UnAgreeDisclaimer\x10\t\x12\x1b\n\x17ProgramStatusType_Ready\x10\n\x12!\n\x1dProgramStatusType_ForceLogout\x10\x0b\x12*\n&ProgramStatusType_DisclaimerPullFailed\x10\x0c\x42=\n\x13\x63om.futu.openapi.pbZ&github.com/futuopen/ftapi4go/pb/common') + serialized_pb=_b('\n\x0c\x43ommon.proto\x12\x06\x43ommon\",\n\x08PacketID\x12\x0e\n\x06\x63onnID\x18\x01 \x02(\x04\x12\x10\n\x08serialNo\x18\x02 \x02(\r\"L\n\rProgramStatus\x12\'\n\x04type\x18\x01 \x02(\x0e\x32\x19.Common.ProgramStatusType\x12\x12\n\nstrExtDesc\x18\x02 \x01(\t*\xb6\x01\n\x07RetType\x12\x13\n\x0fRetType_Succeed\x10\x00\x12\x1b\n\x0eRetType_Failed\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_TimeOut\x10\x9c\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1f\n\x12RetType_DisConnect\x10\xb8\xfe\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Unknown\x10\xf0\xfc\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Invalid\x10\x8c\xfc\xff\xff\xff\xff\xff\xff\xff\x01*\x83\x01\n\rPacketEncAlgo\x12\x1b\n\x17PacketEncAlgo_FTAES_ECB\x10\x00\x12\x1f\n\x12PacketEncAlgo_None\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x15PacketEncAlgo_AES_ECB\x10\x01\x12\x19\n\x15PacketEncAlgo_AES_CBC\x10\x02*4\n\x08ProtoFmt\x12\x15\n\x11ProtoFmt_Protobuf\x10\x00\x12\x11\n\rProtoFmt_Json\x10\x01*v\n\x0fUserAttribution\x12\x1b\n\x17UserAttribution_Unknown\x10\x00\x12\x16\n\x12UserAttribution_NN\x10\x01\x12\x16\n\x12UserAttribution_MM\x10\x02\x12\x16\n\x12UserAttribution_SG\x10\x03*\xf0\x03\n\x11ProgramStatusType\x12\x1a\n\x16ProgramStatusType_None\x10\x00\x12\x1c\n\x18ProgramStatusType_Loaded\x10\x01\x12\x1c\n\x18ProgramStatusType_Loging\x10\x02\x12\'\n#ProgramStatusType_NeedPicVerifyCode\x10\x03\x12)\n%ProgramStatusType_NeedPhoneVerifyCode\x10\x04\x12!\n\x1dProgramStatusType_LoginFailed\x10\x05\x12!\n\x1dProgramStatusType_ForceUpdate\x10\x06\x12*\n&ProgramStatusType_NessaryDataPreparing\x10\x07\x12(\n$ProgramStatusType_NessaryDataMissing\x10\x08\x12\'\n#ProgramStatusType_UnAgreeDisclaimer\x10\t\x12\x1b\n\x17ProgramStatusType_Ready\x10\n\x12!\n\x1dProgramStatusType_ForceLogout\x10\x0b\x12*\n&ProgramStatusType_DisclaimerPullFailed\x10\x0c\x42=\n\x13\x63om.futu.openapi.pbZ&github.com/futuopen/ftapi4go/pb/common') ) _RETTYPE = _descriptor.EnumDescriptor( @@ -134,11 +134,15 @@ name='UserAttribution_MM', index=2, number=2, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='UserAttribution_SG', index=3, number=3, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=521, - serialized_end=615, + serialized_end=639, ) _sym_db.RegisterEnumDescriptor(_USERATTRIBUTION) @@ -204,8 +208,8 @@ ], containing_type=None, options=None, - serialized_start=618, - serialized_end=1114, + serialized_start=642, + serialized_end=1138, ) _sym_db.RegisterEnumDescriptor(_PROGRAMSTATUSTYPE) @@ -225,6 +229,7 @@ UserAttribution_Unknown = 0 UserAttribution_NN = 1 UserAttribution_MM = 2 +UserAttribution_SG = 3 ProgramStatusType_None = 0 ProgramStatusType_Loaded = 1 ProgramStatusType_Loging = 2 diff --git a/futu/common/pb/Trd_Common.proto b/futu/common/pb/Trd_Common.proto index db11a61..392bc29 100644 --- a/futu/common/pb/Trd_Common.proto +++ b/futu/common/pb/Trd_Common.proto @@ -150,8 +150,9 @@ enum TimeInForce enum SecurityFirm { SecurityFirm_Unknown = 0; //未知 - SecurityFirm_FutuSecurities = 1; //富途证券 - SecurityFirm_FutuInc = 2; //富途Inc + SecurityFirm_FutuSecurities = 1; //富途证券(香港) + SecurityFirm_FutuInc = 2; //富途证券(美国) + SecurityFirm_FutuSG = 3; //富途证券(新加坡) } //模拟交易账户类型 diff --git a/futu/common/pb/Trd_Common_pb2.py b/futu/common/pb/Trd_Common_pb2.py index 435b620..0adfc2d 100644 --- a/futu/common/pb/Trd_Common_pb2.py +++ b/futu/common/pb/Trd_Common_pb2.py @@ -21,7 +21,7 @@ name='Trd_Common.proto', package='Trd_Common', syntax='proto2', - serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\xb1\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\x12\x16\n\x0elongRequiredIM\x18\x06 \x01(\x01\x12\x17\n\x0fshortRequiredIM\x18\x07 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\xac\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 \x12\x13\n\x0fTrdSecMarket_SG\x10)\x12\x13\n\x0fTrdSecMarket_JP\x10\x33*m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*h\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03\x12\x10\n\x0c\x43urrency_JPY\x10\x04*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*c\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\x94\x02\n\rCltRiskStatus\x12\x19\n\x15\x43ltRiskStatus_Unknown\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x08\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\tB@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') + serialized_pb=_b('\n\x10Trd_Common.proto\x12\nTrd_Common\x1a\x0c\x43ommon.proto\"G\n\x0b\x41\x63\x63\x43\x61shInfo\x12\x10\n\x08\x63urrency\x18\x01 \x01(\x05\x12\x0c\n\x04\x63\x61sh\x18\x02 \x01(\x01\x12\x18\n\x10\x61vailableBalance\x18\x03 \x01(\x01\"=\n\tTrdHeader\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x11\n\ttrdMarket\x18\x03 \x02(\x05\"\x8e\x01\n\x06TrdAcc\x12\x0e\n\x06trdEnv\x18\x01 \x02(\x05\x12\r\n\x05\x61\x63\x63ID\x18\x02 \x02(\x04\x12\x19\n\x11trdMarketAuthList\x18\x03 \x03(\x05\x12\x0f\n\x07\x61\x63\x63Type\x18\x04 \x01(\x05\x12\x0f\n\x07\x63\x61rdNum\x18\x05 \x01(\t\x12\x14\n\x0csecurityFirm\x18\x06 \x01(\x05\x12\x12\n\nsimAccType\x18\x07 \x01(\x05\"\xfe\x03\n\x05\x46unds\x12\r\n\x05power\x18\x01 \x02(\x01\x12\x13\n\x0btotalAssets\x18\x02 \x02(\x01\x12\x0c\n\x04\x63\x61sh\x18\x03 \x02(\x01\x12\x11\n\tmarketVal\x18\x04 \x02(\x01\x12\x12\n\nfrozenCash\x18\x05 \x02(\x01\x12\x10\n\x08\x64\x65\x62tCash\x18\x06 \x02(\x01\x12\x19\n\x11\x61vlWithdrawalCash\x18\x07 \x02(\x01\x12\x10\n\x08\x63urrency\x18\x08 \x01(\x05\x12\x16\n\x0e\x61vailableFunds\x18\t \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\n \x01(\x01\x12\x12\n\nrealizedPL\x18\x0b \x01(\x01\x12\x11\n\triskLevel\x18\x0c \x01(\x05\x12\x15\n\rinitialMargin\x18\r \x01(\x01\x12\x19\n\x11maintenanceMargin\x18\x0e \x01(\x01\x12-\n\x0c\x63\x61shInfoList\x18\x0f \x03(\x0b\x32\x17.Trd_Common.AccCashInfo\x12\x15\n\rmaxPowerShort\x18\x10 \x01(\x01\x12\x14\n\x0cnetCashPower\x18\x11 \x01(\x01\x12\x0e\n\x06longMv\x18\x12 \x01(\x01\x12\x0f\n\x07shortMv\x18\x13 \x01(\x01\x12\x14\n\x0cpendingAsset\x18\x14 \x01(\x01\x12\x15\n\rmaxWithdrawal\x18\x15 \x01(\x01\x12\x12\n\nriskStatus\x18\x16 \x01(\x05\x12\x18\n\x10marginCallMargin\x18\x17 \x01(\x01\"\xf0\x02\n\x08Position\x12\x12\n\npositionID\x18\x01 \x02(\x04\x12\x14\n\x0cpositionSide\x18\x02 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x03 \x02(\t\x12\x0c\n\x04name\x18\x04 \x02(\t\x12\x0b\n\x03qty\x18\x05 \x02(\x01\x12\x12\n\ncanSellQty\x18\x06 \x02(\x01\x12\r\n\x05price\x18\x07 \x02(\x01\x12\x11\n\tcostPrice\x18\x08 \x01(\x01\x12\x0b\n\x03val\x18\t \x02(\x01\x12\r\n\x05plVal\x18\n \x02(\x01\x12\x0f\n\x07plRatio\x18\x0b \x01(\x01\x12\x11\n\tsecMarket\x18\x0c \x01(\x05\x12\x10\n\x08td_plVal\x18\x15 \x01(\x01\x12\x11\n\ttd_trdVal\x18\x16 \x01(\x01\x12\x11\n\ttd_buyVal\x18\x17 \x01(\x01\x12\x11\n\ttd_buyQty\x18\x18 \x01(\x01\x12\x12\n\ntd_sellVal\x18\x19 \x01(\x01\x12\x12\n\ntd_sellQty\x18\x1a \x01(\x01\x12\x14\n\x0cunrealizedPL\x18\x1c \x01(\x01\x12\x12\n\nrealizedPL\x18\x1d \x01(\x01\"\x81\x03\n\x05Order\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x11\n\torderType\x18\x02 \x02(\x05\x12\x13\n\x0borderStatus\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x02(\x04\x12\x11\n\torderIDEx\x18\x05 \x02(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x01(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x12\n\nupdateTime\x18\x0b \x02(\t\x12\x0f\n\x07\x66illQty\x18\x0c \x01(\x01\x12\x14\n\x0c\x66illAvgPrice\x18\r \x01(\x01\x12\x12\n\nlastErrMsg\x18\x0e \x01(\t\x12\x11\n\tsecMarket\x18\x0f \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x10 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x11 \x01(\x01\x12\x0e\n\x06remark\x18\x12 \x01(\t\x12\x13\n\x0btimeInForce\x18\x13 \x01(\x05\x12\x16\n\x0e\x66illOutsideRTH\x18\x14 \x01(\x08\"\xb7\x02\n\tOrderFill\x12\x0f\n\x07trdSide\x18\x01 \x02(\x05\x12\x0e\n\x06\x66illID\x18\x02 \x02(\x04\x12\x10\n\x08\x66illIDEx\x18\x03 \x02(\t\x12\x0f\n\x07orderID\x18\x04 \x01(\x04\x12\x11\n\torderIDEx\x18\x05 \x01(\t\x12\x0c\n\x04\x63ode\x18\x06 \x02(\t\x12\x0c\n\x04name\x18\x07 \x02(\t\x12\x0b\n\x03qty\x18\x08 \x02(\x01\x12\r\n\x05price\x18\t \x02(\x01\x12\x12\n\ncreateTime\x18\n \x02(\t\x12\x17\n\x0f\x63ounterBrokerID\x18\x0b \x01(\x05\x12\x19\n\x11\x63ounterBrokerName\x18\x0c \x01(\t\x12\x11\n\tsecMarket\x18\r \x01(\x05\x12\x17\n\x0f\x63reateTimestamp\x18\x0e \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x0f \x01(\x01\x12\x0e\n\x06status\x18\x10 \x01(\x05\"\xb1\x01\n\nMaxTrdQtys\x12\x12\n\nmaxCashBuy\x18\x01 \x02(\x01\x12\x1b\n\x13maxCashAndMarginBuy\x18\x02 \x01(\x01\x12\x17\n\x0fmaxPositionSell\x18\x03 \x02(\x01\x12\x14\n\x0cmaxSellShort\x18\x04 \x01(\x01\x12\x12\n\nmaxBuyBack\x18\x05 \x01(\x01\x12\x16\n\x0elongRequiredIM\x18\x06 \x01(\x01\x12\x17\n\x0fshortRequiredIM\x18\x07 \x01(\x01\"[\n\x13TrdFilterConditions\x12\x10\n\x08\x63odeList\x18\x01 \x03(\t\x12\x0e\n\x06idList\x18\x02 \x03(\x04\x12\x11\n\tbeginTime\x18\x03 \x01(\t\x12\x0f\n\x07\x65ndTime\x18\x04 \x01(\t*.\n\x06TrdEnv\x12\x13\n\x0fTrdEnv_Simulate\x10\x00\x12\x0f\n\x0bTrdEnv_Real\x10\x01*\x83\x01\n\tTrdMarket\x12\x15\n\x11TrdMarket_Unknown\x10\x00\x12\x10\n\x0cTrdMarket_HK\x10\x01\x12\x10\n\x0cTrdMarket_US\x10\x02\x12\x10\n\x0cTrdMarket_CN\x10\x03\x12\x12\n\x0eTrdMarket_HKCC\x10\x04\x12\x15\n\x11TrdMarket_Futures\x10\x05*\xac\x01\n\x0cTrdSecMarket\x12\x18\n\x14TrdSecMarket_Unknown\x10\x00\x12\x13\n\x0fTrdSecMarket_HK\x10\x01\x12\x13\n\x0fTrdSecMarket_US\x10\x02\x12\x16\n\x12TrdSecMarket_CN_SH\x10\x1f\x12\x16\n\x12TrdSecMarket_CN_SZ\x10 \x12\x13\n\x0fTrdSecMarket_SG\x10)\x12\x13\n\x0fTrdSecMarket_JP\x10\x33*m\n\x07TrdSide\x12\x13\n\x0fTrdSide_Unknown\x10\x00\x12\x0f\n\x0bTrdSide_Buy\x10\x01\x12\x10\n\x0cTrdSide_Sell\x10\x02\x12\x15\n\x11TrdSide_SellShort\x10\x03\x12\x13\n\x0fTrdSide_BuyBack\x10\x04*\xda\x01\n\tOrderType\x12\x15\n\x11OrderType_Unknown\x10\x00\x12\x14\n\x10OrderType_Normal\x10\x01\x12\x14\n\x10OrderType_Market\x10\x02\x12\x1b\n\x17OrderType_AbsoluteLimit\x10\x05\x12\x15\n\x11OrderType_Auction\x10\x06\x12\x1a\n\x16OrderType_AuctionLimit\x10\x07\x12\x1a\n\x16OrderType_SpecialLimit\x10\x08\x12\x1e\n\x1aOrderType_SpecialLimit_All\x10\t*\xfc\x03\n\x0bOrderStatus\x12\x1b\n\x17OrderStatus_Unsubmitted\x10\x00\x12 \n\x13OrderStatus_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1d\n\x19OrderStatus_WaitingSubmit\x10\x01\x12\x1a\n\x16OrderStatus_Submitting\x10\x02\x12\x1c\n\x18OrderStatus_SubmitFailed\x10\x03\x12\x17\n\x13OrderStatus_TimeOut\x10\x04\x12\x19\n\x15OrderStatus_Submitted\x10\x05\x12\x1b\n\x17OrderStatus_Filled_Part\x10\n\x12\x1a\n\x16OrderStatus_Filled_All\x10\x0b\x12\x1f\n\x1bOrderStatus_Cancelling_Part\x10\x0c\x12\x1e\n\x1aOrderStatus_Cancelling_All\x10\r\x12\x1e\n\x1aOrderStatus_Cancelled_Part\x10\x0e\x12\x1d\n\x19OrderStatus_Cancelled_All\x10\x0f\x12\x16\n\x12OrderStatus_Failed\x10\x15\x12\x18\n\x14OrderStatus_Disabled\x10\x16\x12\x17\n\x13OrderStatus_Deleted\x10\x17\x12\x1d\n\x19OrderStatus_FillCancelled\x10\x18*e\n\x0fOrderFillStatus\x12\x16\n\x12OrderFillStatus_OK\x10\x00\x12\x1d\n\x19OrderFillStatus_Cancelled\x10\x01\x12\x1b\n\x17OrderFillStatus_Changed\x10\x02*`\n\x0cPositionSide\x12\x15\n\x11PositionSide_Long\x10\x00\x12!\n\x14PositionSide_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x16\n\x12PositionSide_Short\x10\x01*\xad\x01\n\rModifyOrderOp\x12\x19\n\x15ModifyOrderOp_Unknown\x10\x00\x12\x18\n\x14ModifyOrderOp_Normal\x10\x01\x12\x18\n\x14ModifyOrderOp_Cancel\x10\x02\x12\x19\n\x15ModifyOrderOp_Disable\x10\x03\x12\x18\n\x14ModifyOrderOp_Enable\x10\x04\x12\x18\n\x14ModifyOrderOp_Delete\x10\x05*P\n\nTrdAccType\x12\x16\n\x12TrdAccType_Unknown\x10\x00\x12\x13\n\x0fTrdAccType_Cash\x10\x01\x12\x15\n\x11TrdAccType_Margin\x10\x02*h\n\x08\x43urrency\x12\x14\n\x10\x43urrency_Unknown\x10\x00\x12\x10\n\x0c\x43urrency_HKD\x10\x01\x12\x10\n\x0c\x43urrency_USD\x10\x02\x12\x10\n\x0c\x43urrency_CNH\x10\x03\x12\x10\n\x0c\x43urrency_JPY\x10\x04*\xb6\x01\n\x0c\x43ltRiskLevel\x12!\n\x14\x43ltRiskLevel_Unknown\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x11\x43ltRiskLevel_Safe\x10\x00\x12\x18\n\x14\x43ltRiskLevel_Warning\x10\x01\x12\x17\n\x13\x43ltRiskLevel_Danger\x10\x02\x12\x1d\n\x19\x43ltRiskLevel_AbsoluteSafe\x10\x03\x12\x1a\n\x16\x43ltRiskLevel_OptDanger\x10\x04*7\n\x0bTimeInForce\x12\x13\n\x0fTimeInForce_DAY\x10\x00\x12\x13\n\x0fTimeInForce_GTC\x10\x01*|\n\x0cSecurityFirm\x12\x18\n\x14SecurityFirm_Unknown\x10\x00\x12\x1f\n\x1bSecurityFirm_FutuSecurities\x10\x01\x12\x18\n\x14SecurityFirm_FutuInc\x10\x02\x12\x17\n\x13SecurityFirm_FutuSG\x10\x03*Q\n\nSimAccType\x12\x16\n\x12SimAccType_Unknown\x10\x00\x12\x14\n\x10SimAccType_Stock\x10\x01\x12\x15\n\x11SimAccType_Option\x10\x02*\x94\x02\n\rCltRiskStatus\x12\x19\n\x15\x43ltRiskStatus_Unknown\x10\x00\x12\x18\n\x14\x43ltRiskStatus_Level1\x10\x01\x12\x18\n\x14\x43ltRiskStatus_Level2\x10\x02\x12\x18\n\x14\x43ltRiskStatus_Level3\x10\x03\x12\x18\n\x14\x43ltRiskStatus_Level4\x10\x04\x12\x18\n\x14\x43ltRiskStatus_Level5\x10\x05\x12\x18\n\x14\x43ltRiskStatus_Level6\x10\x06\x12\x18\n\x14\x43ltRiskStatus_Level7\x10\x07\x12\x18\n\x14\x43ltRiskStatus_Level8\x10\x08\x12\x18\n\x14\x43ltRiskStatus_Level9\x10\tB@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/trdcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -530,11 +530,15 @@ name='SecurityFirm_FutuInc', index=2, number=2, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='SecurityFirm_FutuSG', index=3, number=3, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=4193, - serialized_end=4292, + serialized_end=4317, ) _sym_db.RegisterEnumDescriptor(_SECURITYFIRM) @@ -560,8 +564,8 @@ ], containing_type=None, options=None, - serialized_start=4294, - serialized_end=4375, + serialized_start=4319, + serialized_end=4400, ) _sym_db.RegisterEnumDescriptor(_SIMACCTYPE) @@ -615,8 +619,8 @@ ], containing_type=None, options=None, - serialized_start=4378, - serialized_end=4654, + serialized_start=4403, + serialized_end=4679, ) _sym_db.RegisterEnumDescriptor(_CLTRISKSTATUS) @@ -697,6 +701,7 @@ SecurityFirm_Unknown = 0 SecurityFirm_FutuSecurities = 1 SecurityFirm_FutuInc = 2 +SecurityFirm_FutuSG = 3 SimAccType_Unknown = 0 SimAccType_Stock = 1 SimAccType_Option = 2 From ec32e5af810cdaef29389473671317a6796fde3f Mon Sep 17 00:00:00 2001 From: byblehua Date: Thu, 1 Apr 2021 12:00:58 +0800 Subject: [PATCH 28/36] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index 2fef54d..7355215 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.1.1320 +5.2.1408 From 5ef9e647b3b4eaab6263fc21d9671d02b08a1e57 Mon Sep 17 00:00:00 2001 From: hugh Date: Wed, 14 Apr 2021 17:55:30 +0800 Subject: [PATCH 29/36] =?UTF-8?q?pipy=E9=A1=B5=E9=9D=A2=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.py b/setup.py index 285c8a5..93c8839 100644 --- a/setup.py +++ b/setup.py @@ -29,6 +29,9 @@ with open(join(dirname(__file__), 'futu/VERSION.txt'), 'rb') as f: version = f.read().decode('ascii').strip() +with open("README.md", "r") as fh: + long_desc = fh.read() + install_requires = ["pandas", "simplejson", "protobuf==3.5.1", @@ -42,6 +45,8 @@ name='futu-api', version=version, description='Futu Quantitative Trading API', + long_description=long_desc, + long_description_content_type="text/markdown", classifiers=[], keywords='Futu HK/US Stock Quant Trading API', author='Futu, Inc.', From 2b6ded15d2c97c6d9003efbea7701294d7b23d9c Mon Sep 17 00:00:00 2001 From: alexqli Date: Fri, 16 Apr 2021 16:39:02 +0800 Subject: [PATCH 30/36] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=B5=84=E9=87=91?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=85=83=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/trade/open_trade_context.py | 2 +- futu/trade/trade_query.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/futu/trade/open_trade_context.py b/futu/trade/open_trade_context.py index 38d272e..66a7c37 100644 --- a/futu/trade/open_trade_context.py +++ b/futu/trade/open_trade_context.py @@ -289,7 +289,7 @@ def accinfo_query(self, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, refresh_cach 'pending_asset', 'interest_charged_amount', 'frozen_cash', 'avl_withdrawal_cash', 'max_withdrawal', 'currency', 'available_funds', 'unrealized_pl', 'realized_pl', 'risk_level', 'risk_status', 'initial_margin', 'margin_call_margin', 'maintenance_margin', 'hk_cash', 'hk_avl_withdrawal_cash', 'us_cash', - 'us_avl_withdrawal_cash' + 'us_avl_withdrawal_cash', 'jp_cash', 'jp_avl_withdrawal_cash' ] accinfo_frame_table = pd.DataFrame(accinfo_list, columns=col_list) diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index fdeb871..8941f50 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -157,7 +157,9 @@ def unpack_rsp(cls, rsp_pb): 'hk_cash': NoneDataValue, 'hk_avl_withdrawal_cash': NoneDataValue, 'us_cash': NoneDataValue, - 'us_avl_withdrawal_cash': NoneDataValue + 'us_avl_withdrawal_cash': NoneDataValue, + 'jp_cash': NoneDataValue, + 'jp_avl_withdrawal_cash': NoneDataValue }] for cashInfo in raw_funds.cashInfoList: if cashInfo.currency == Trd_Common_pb2.Currency_HKD: @@ -166,6 +168,9 @@ def unpack_rsp(cls, rsp_pb): elif cashInfo.currency == Trd_Common_pb2.Currency_USD: accinfo_list[0]['us_cash'] = cashInfo.cash accinfo_list[0]['us_avl_withdrawal_cash'] = cashInfo.availableBalance + elif cashInfo.currency == Trd_Common_pb2.Currency_JPY: + accinfo_list[0]['jp_cash'] = cashInfo.cash + accinfo_list[0]['jp_avl_withdrawal_cash'] = cashInfo.availableBalance return RET_OK, "", accinfo_list From 3ff6a3fcff095a65abf12deb6f22ff32d0d3f534 Mon Sep 17 00:00:00 2001 From: alexqli Date: Mon, 26 Apr 2021 19:35:54 +0800 Subject: [PATCH 31/36] =?UTF-8?q?fix=EF=BC=9A=E4=B9=8B=E5=89=8D=E7=9A=84?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E6=94=B6=E5=8C=85=E4=BC=98=E5=8C=96=E6=9C=89?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E5=8F=AF=E8=83=BD=E9=80=A0=E6=88=90?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=B8=AD=E7=9A=84=E6=95=B0=E6=8D=AE=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E5=8F=8A=E6=97=B6=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/network_manager.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/futu/common/network_manager.py b/futu/common/network_manager.py index 33d8fa6..dd25b21 100644 --- a/futu/common/network_manager.py +++ b/futu/common/network_manager.py @@ -450,7 +450,6 @@ def _on_read(self, conn): start_time = time.time() recv_len = 0 buf_len = 0 - packet_count = 0 if conn.status == ConnStatus.Closed: return @@ -458,7 +457,7 @@ def _on_read(self, conn): err = None is_closed = False try: - data = conn.sock.recv(128 * 1024) + data = conn.sock.recv(32 * 1024) if data == b'': is_closed = True else: @@ -481,10 +480,7 @@ def _on_read(self, conn): rsp_body = conn.readbuf[head_len:head_len+body_len] del conn.readbuf[:head_len+body_len] - packet_count += 1 self._on_packet(conn, head_dict, Err.Ok.code, '', rsp_body) - if packet_count >= 10: - break #收10个包强制跳出循环,避免长时间解包导致无法发送心跳 if is_closed: self.close(conn.conn_id) From b78ab08b6b4fe0c8d5cb6c39cca79e525d20228b Mon Sep 17 00:00:00 2001 From: byblehua Date: Thu, 17 Jun 2021 15:17:46 +0800 Subject: [PATCH 32/36] =?UTF-8?q?=E5=90=8C=E6=AD=A55.4=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- futu/common/constant.py | 16 + futu/common/network_manager.py | 6 +- futu/common/open_context_base.py | 2 + futu/common/pb/Common_pb2.py | 13 +- futu/common/pb/GetGlobalState.proto | 2 + futu/common/pb/GetGlobalState_pb2.py | 46 ++- futu/common/pb/Qot_Common.proto | 8 + futu/common/pb/Qot_Common_pb2.py | 33 +- .../pb/Qot_GetOptionExpirationDate.proto | 41 ++ .../pb/Qot_GetOptionExpirationDate_pb2.py | 283 ++++++++++++++ futu/common/pb/Trd_GetMarginRatio.proto | 51 +++ futu/common/pb/Trd_GetMarginRatio_pb2.py | 356 ++++++++++++++++++ futu/common/utils.py | 13 +- futu/quote/open_quote_context.py | 50 +++ futu/quote/quote_query.py | 55 +++ futu/trade/open_trade_context.py | 34 +- futu/trade/trade_query.py | 74 +++- setup.py | 2 +- 19 files changed, 1047 insertions(+), 40 deletions(-) create mode 100644 futu/common/pb/Qot_GetOptionExpirationDate.proto create mode 100644 futu/common/pb/Qot_GetOptionExpirationDate_pb2.py create mode 100644 futu/common/pb/Trd_GetMarginRatio.proto create mode 100644 futu/common/pb/Trd_GetMarginRatio_pb2.py diff --git a/futu/VERSION.txt b/futu/VERSION.txt index 30c4bca..c5e15ed 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.3.1507 +5.4.1607 diff --git a/futu/common/constant.py b/futu/common/constant.py index 10a5b5e..4abad49 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -48,6 +48,7 @@ class ProtoId(object): Trd_GetHistoryOrderList = 2221 # 获取历史订单列表 Trd_GetHistoryOrderFillList = 2222 # 获取历史成交列表 Trd_GetMaxTrdQtys = 2111 # 查询最大买卖数量 + Trd_GetMarginRatio = 2223 # 获取融资融券数据 # 订阅数据 Qot_Sub = 3001 # 订阅或者反订阅 @@ -103,6 +104,8 @@ class ProtoId(object): Qot_GetUserSecurityGroup = 3222 # 获取自选股分组 Qot_GetMarketState = 3223 # 获取指定品种的市场状态 + Qot_GetOptionExpirationDate = 3224 # 获取期权到期日 + All_PushId = [Notify, KeepAlive, Trd_UpdateOrder, Trd_UpdateOrderFill, Qot_UpdateBroker, Qot_UpdateOrderBook, Qot_UpdateKL, Qot_UpdateRT, Qot_UpdateBasicQot, Qot_UpdateTicker, Qot_UpdatePriceReminder] @@ -2469,3 +2472,16 @@ def load_dic(self): self.STOCK: Trd_Common_pb2.SimAccType_Stock, self.OPTION: Trd_Common_pb2.SimAccType_Option } + +# 期权交割周期 +class ExpirationCycle(FtEnum): + NONE = 'N/A' + WEEK = 'WEEK' + MONTH = 'MONTH' + + def load_dic(self): + return { + self.NONE: Qot_Common_pb2.ExpirationCycle_Unknown, + self.WEEK: Qot_Common_pb2.ExpirationCycle_Week, + self.MONTH: Qot_Common_pb2.ExpirationCycle_Month + } \ No newline at end of file diff --git a/futu/common/network_manager.py b/futu/common/network_manager.py index dd25b21..33d8fa6 100644 --- a/futu/common/network_manager.py +++ b/futu/common/network_manager.py @@ -450,6 +450,7 @@ def _on_read(self, conn): start_time = time.time() recv_len = 0 buf_len = 0 + packet_count = 0 if conn.status == ConnStatus.Closed: return @@ -457,7 +458,7 @@ def _on_read(self, conn): err = None is_closed = False try: - data = conn.sock.recv(32 * 1024) + data = conn.sock.recv(128 * 1024) if data == b'': is_closed = True else: @@ -480,7 +481,10 @@ def _on_read(self, conn): rsp_body = conn.readbuf[head_len:head_len+body_len] del conn.readbuf[:head_len+body_len] + packet_count += 1 self._on_packet(conn, head_dict, Err.Ok.code, '', rsp_body) + if packet_count >= 10: + break #收10个包强制跳出循环,避免长时间解包导致无法发送心跳 if is_closed: self.close(conn.conn_id) diff --git a/futu/common/open_context_base.py b/futu/common/open_context_base.py index 8892feb..72cd0a8 100644 --- a/futu/common/open_context_base.py +++ b/futu/common/open_context_base.py @@ -309,6 +309,8 @@ def get_global_state(self): market_hk str 香港市场状态,参见MarketState market_hkfuture str 香港期货市场状态,参见MarketState market_usfuture str 美国期货市场状态,参见MarketState + market_sgfuture str 新加坡期货市场状态,参见MarketState + market_jpfuture str 日本期货市场状态,参见MarketState server_ver str FutuOpenD版本号 trd_logined str '1':已登录交易服务器,'0': 未登录交易服务器 qot_logined str '1':已登录行情服务器,'0': 未登录行情服务器 diff --git a/futu/common/pb/Common_pb2.py b/futu/common/pb/Common_pb2.py index 38af1ee..36269b4 100644 --- a/futu/common/pb/Common_pb2.py +++ b/futu/common/pb/Common_pb2.py @@ -20,7 +20,7 @@ name='Common.proto', package='Common', syntax='proto2', - serialized_pb=_b('\n\x0c\x43ommon.proto\x12\x06\x43ommon\",\n\x08PacketID\x12\x0e\n\x06\x63onnID\x18\x01 \x02(\x04\x12\x10\n\x08serialNo\x18\x02 \x02(\r\"L\n\rProgramStatus\x12\'\n\x04type\x18\x01 \x02(\x0e\x32\x19.Common.ProgramStatusType\x12\x12\n\nstrExtDesc\x18\x02 \x01(\t*\xb6\x01\n\x07RetType\x12\x13\n\x0fRetType_Succeed\x10\x00\x12\x1b\n\x0eRetType_Failed\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_TimeOut\x10\x9c\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1f\n\x12RetType_DisConnect\x10\xb8\xfe\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Unknown\x10\xf0\xfc\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Invalid\x10\x8c\xfc\xff\xff\xff\xff\xff\xff\xff\x01*\x83\x01\n\rPacketEncAlgo\x12\x1b\n\x17PacketEncAlgo_FTAES_ECB\x10\x00\x12\x1f\n\x12PacketEncAlgo_None\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x15PacketEncAlgo_AES_ECB\x10\x01\x12\x19\n\x15PacketEncAlgo_AES_CBC\x10\x02*4\n\x08ProtoFmt\x12\x15\n\x11ProtoFmt_Protobuf\x10\x00\x12\x11\n\rProtoFmt_Json\x10\x01*v\n\x0fUserAttribution\x12\x1b\n\x17UserAttribution_Unknown\x10\x00\x12\x16\n\x12UserAttribution_NN\x10\x01\x12\x16\n\x12UserAttribution_MM\x10\x02\x12\x16\n\x12UserAttribution_SG\x10\x03*\xf0\x03\n\x11ProgramStatusType\x12\x1a\n\x16ProgramStatusType_None\x10\x00\x12\x1c\n\x18ProgramStatusType_Loaded\x10\x01\x12\x1c\n\x18ProgramStatusType_Loging\x10\x02\x12\'\n#ProgramStatusType_NeedPicVerifyCode\x10\x03\x12)\n%ProgramStatusType_NeedPhoneVerifyCode\x10\x04\x12!\n\x1dProgramStatusType_LoginFailed\x10\x05\x12!\n\x1dProgramStatusType_ForceUpdate\x10\x06\x12*\n&ProgramStatusType_NessaryDataPreparing\x10\x07\x12(\n$ProgramStatusType_NessaryDataMissing\x10\x08\x12\'\n#ProgramStatusType_UnAgreeDisclaimer\x10\t\x12\x1b\n\x17ProgramStatusType_Ready\x10\n\x12!\n\x1dProgramStatusType_ForceLogout\x10\x0b\x12*\n&ProgramStatusType_DisclaimerPullFailed\x10\x0c\x42=\n\x13\x63om.futu.openapi.pbZ&github.com/futuopen/ftapi4go/pb/common') + serialized_pb=_b('\n\x0c\x43ommon.proto\x12\x06\x43ommon\",\n\x08PacketID\x12\x0e\n\x06\x63onnID\x18\x01 \x02(\x04\x12\x10\n\x08serialNo\x18\x02 \x02(\r\"L\n\rProgramStatus\x12\'\n\x04type\x18\x01 \x02(\x0e\x32\x19.Common.ProgramStatusType\x12\x12\n\nstrExtDesc\x18\x02 \x01(\t*\xb6\x01\n\x07RetType\x12\x13\n\x0fRetType_Succeed\x10\x00\x12\x1b\n\x0eRetType_Failed\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_TimeOut\x10\x9c\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1f\n\x12RetType_DisConnect\x10\xb8\xfe\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Unknown\x10\xf0\xfc\xff\xff\xff\xff\xff\xff\xff\x01\x12\x1c\n\x0fRetType_Invalid\x10\x8c\xfc\xff\xff\xff\xff\xff\xff\xff\x01*\x83\x01\n\rPacketEncAlgo\x12\x1b\n\x17PacketEncAlgo_FTAES_ECB\x10\x00\x12\x1f\n\x12PacketEncAlgo_None\x10\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x19\n\x15PacketEncAlgo_AES_ECB\x10\x01\x12\x19\n\x15PacketEncAlgo_AES_CBC\x10\x02*4\n\x08ProtoFmt\x12\x15\n\x11ProtoFmt_Protobuf\x10\x00\x12\x11\n\rProtoFmt_Json\x10\x01*^\n\x0fUserAttribution\x12\x1b\n\x17UserAttribution_Unknown\x10\x00\x12\x16\n\x12UserAttribution_NN\x10\x01\x12\x16\n\x12UserAttribution_MM\x10\x02*\xf0\x03\n\x11ProgramStatusType\x12\x1a\n\x16ProgramStatusType_None\x10\x00\x12\x1c\n\x18ProgramStatusType_Loaded\x10\x01\x12\x1c\n\x18ProgramStatusType_Loging\x10\x02\x12\'\n#ProgramStatusType_NeedPicVerifyCode\x10\x03\x12)\n%ProgramStatusType_NeedPhoneVerifyCode\x10\x04\x12!\n\x1dProgramStatusType_LoginFailed\x10\x05\x12!\n\x1dProgramStatusType_ForceUpdate\x10\x06\x12*\n&ProgramStatusType_NessaryDataPreparing\x10\x07\x12(\n$ProgramStatusType_NessaryDataMissing\x10\x08\x12\'\n#ProgramStatusType_UnAgreeDisclaimer\x10\t\x12\x1b\n\x17ProgramStatusType_Ready\x10\n\x12!\n\x1dProgramStatusType_ForceLogout\x10\x0b\x12*\n&ProgramStatusType_DisclaimerPullFailed\x10\x0c\x42=\n\x13\x63om.futu.openapi.pbZ&github.com/futuopen/ftapi4go/pb/common') ) _RETTYPE = _descriptor.EnumDescriptor( @@ -134,15 +134,11 @@ name='UserAttribution_MM', index=2, number=2, options=None, type=None), - _descriptor.EnumValueDescriptor( - name='UserAttribution_SG', index=3, number=3, - options=None, - type=None), ], containing_type=None, options=None, serialized_start=521, - serialized_end=639, + serialized_end=615, ) _sym_db.RegisterEnumDescriptor(_USERATTRIBUTION) @@ -208,8 +204,8 @@ ], containing_type=None, options=None, - serialized_start=642, - serialized_end=1138, + serialized_start=618, + serialized_end=1114, ) _sym_db.RegisterEnumDescriptor(_PROGRAMSTATUSTYPE) @@ -229,7 +225,6 @@ UserAttribution_Unknown = 0 UserAttribution_NN = 1 UserAttribution_MM = 2 -UserAttribution_SG = 3 ProgramStatusType_None = 0 ProgramStatusType_Loaded = 1 ProgramStatusType_Loging = 2 diff --git a/futu/common/pb/GetGlobalState.proto b/futu/common/pb/GetGlobalState.proto index deadd77..4aa7d66 100644 --- a/futu/common/pb/GetGlobalState.proto +++ b/futu/common/pb/GetGlobalState.proto @@ -20,6 +20,8 @@ message S2C required int32 marketSZ = 4; //Qot_Common.QotMarketState,深市状态 required int32 marketHKFuture = 5; //Qot_Common.QotMarketState,港股期货市场状态 optional int32 marketUSFuture = 15; //Qot_Common.QotMarketState,美国期货市场状态 + optional int32 marketSGFuture = 17; //Qot_Common.QotMarketState,新加坡期货市场状态 + optional int32 marketJPFuture = 18; //Qot_Common.QotMarketState,日本期货市场状态 required bool qotLogined = 6; //是否登陆行情服务器 required bool trdLogined = 7; //是否登陆交易服务器 required int32 serverVer = 8; //版本号 diff --git a/futu/common/pb/GetGlobalState_pb2.py b/futu/common/pb/GetGlobalState_pb2.py index 12a3b8d..8c1cf3c 100644 --- a/futu/common/pb/GetGlobalState_pb2.py +++ b/futu/common/pb/GetGlobalState_pb2.py @@ -21,7 +21,7 @@ name='GetGlobalState.proto', package='GetGlobalState', syntax='proto2', - serialized_pb=_b('\n\x14GetGlobalState.proto\x12\x0eGetGlobalState\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"\x15\n\x03\x43\x32S\x12\x0e\n\x06userID\x18\x01 \x02(\x04\"\xda\x02\n\x03S2C\x12\x10\n\x08marketHK\x18\x01 \x02(\x05\x12\x10\n\x08marketUS\x18\x02 \x02(\x05\x12\x10\n\x08marketSH\x18\x03 \x02(\x05\x12\x10\n\x08marketSZ\x18\x04 \x02(\x05\x12\x16\n\x0emarketHKFuture\x18\x05 \x02(\x05\x12\x16\n\x0emarketUSFuture\x18\x0f \x01(\x05\x12\x12\n\nqotLogined\x18\x06 \x02(\x08\x12\x12\n\ntrdLogined\x18\x07 \x02(\x08\x12\x11\n\tserverVer\x18\x08 \x02(\x05\x12\x15\n\rserverBuildNo\x18\t \x02(\x05\x12\x0c\n\x04time\x18\n \x02(\x03\x12\x11\n\tlocalTime\x18\x0b \x01(\x01\x12,\n\rprogramStatus\x18\x0c \x01(\x0b\x32\x15.Common.ProgramStatus\x12\x14\n\x0cqotSvrIpAddr\x18\r \x01(\t\x12\x14\n\x0ctrdSvrIpAddr\x18\x0e \x01(\t\x12\x0e\n\x06\x63onnID\x18\x10 \x01(\x04\"+\n\x07Request\x12 \n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x13.GetGlobalState.C2S\"d\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12 \n\x03s2c\x18\x04 \x01(\x0b\x32\x13.GetGlobalState.S2CBE\n\x13\x63om.futu.openapi.pbZ.github.com/futuopen/ftapi4go/pb/getglobalstate') + serialized_pb=_b('\n\x14GetGlobalState.proto\x12\x0eGetGlobalState\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"\x15\n\x03\x43\x32S\x12\x0e\n\x06userID\x18\x01 \x02(\x04\"\x8a\x03\n\x03S2C\x12\x10\n\x08marketHK\x18\x01 \x02(\x05\x12\x10\n\x08marketUS\x18\x02 \x02(\x05\x12\x10\n\x08marketSH\x18\x03 \x02(\x05\x12\x10\n\x08marketSZ\x18\x04 \x02(\x05\x12\x16\n\x0emarketHKFuture\x18\x05 \x02(\x05\x12\x16\n\x0emarketUSFuture\x18\x0f \x01(\x05\x12\x16\n\x0emarketSGFuture\x18\x11 \x01(\x05\x12\x16\n\x0emarketJPFuture\x18\x12 \x01(\x05\x12\x12\n\nqotLogined\x18\x06 \x02(\x08\x12\x12\n\ntrdLogined\x18\x07 \x02(\x08\x12\x11\n\tserverVer\x18\x08 \x02(\x05\x12\x15\n\rserverBuildNo\x18\t \x02(\x05\x12\x0c\n\x04time\x18\n \x02(\x03\x12\x11\n\tlocalTime\x18\x0b \x01(\x01\x12,\n\rprogramStatus\x18\x0c \x01(\x0b\x32\x15.Common.ProgramStatus\x12\x14\n\x0cqotSvrIpAddr\x18\r \x01(\t\x12\x14\n\x0ctrdSvrIpAddr\x18\x0e \x01(\t\x12\x0e\n\x06\x63onnID\x18\x10 \x01(\x04\"+\n\x07Request\x12 \n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x13.GetGlobalState.C2S\"d\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12 \n\x03s2c\x18\x04 \x01(\x0b\x32\x13.GetGlobalState.S2CBE\n\x13\x63om.futu.openapi.pbZ.github.com/futuopen/ftapi4go/pb/getglobalstate') , dependencies=[Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) @@ -109,70 +109,84 @@ is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='qotLogined', full_name='GetGlobalState.S2C.qotLogined', index=6, + name='marketSGFuture', full_name='GetGlobalState.S2C.marketSGFuture', index=6, + number=17, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='marketJPFuture', full_name='GetGlobalState.S2C.marketJPFuture', index=7, + number=18, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='qotLogined', full_name='GetGlobalState.S2C.qotLogined', index=8, number=6, type=8, cpp_type=7, label=2, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='trdLogined', full_name='GetGlobalState.S2C.trdLogined', index=7, + name='trdLogined', full_name='GetGlobalState.S2C.trdLogined', index=9, number=7, type=8, cpp_type=7, label=2, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='serverVer', full_name='GetGlobalState.S2C.serverVer', index=8, + name='serverVer', full_name='GetGlobalState.S2C.serverVer', index=10, number=8, type=5, cpp_type=1, label=2, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='serverBuildNo', full_name='GetGlobalState.S2C.serverBuildNo', index=9, + name='serverBuildNo', full_name='GetGlobalState.S2C.serverBuildNo', index=11, number=9, type=5, cpp_type=1, label=2, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='time', full_name='GetGlobalState.S2C.time', index=10, + name='time', full_name='GetGlobalState.S2C.time', index=12, number=10, type=3, cpp_type=2, label=2, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='localTime', full_name='GetGlobalState.S2C.localTime', index=11, + name='localTime', full_name='GetGlobalState.S2C.localTime', index=13, number=11, type=1, cpp_type=5, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='programStatus', full_name='GetGlobalState.S2C.programStatus', index=12, + name='programStatus', full_name='GetGlobalState.S2C.programStatus', index=14, number=12, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='qotSvrIpAddr', full_name='GetGlobalState.S2C.qotSvrIpAddr', index=13, + name='qotSvrIpAddr', full_name='GetGlobalState.S2C.qotSvrIpAddr', index=15, number=13, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='trdSvrIpAddr', full_name='GetGlobalState.S2C.trdSvrIpAddr', index=14, + name='trdSvrIpAddr', full_name='GetGlobalState.S2C.trdSvrIpAddr', index=16, number=14, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='connID', full_name='GetGlobalState.S2C.connID', index=15, + name='connID', full_name='GetGlobalState.S2C.connID', index=17, number=16, type=4, cpp_type=4, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, @@ -191,7 +205,7 @@ oneofs=[ ], serialized_start=96, - serialized_end=442, + serialized_end=490, ) @@ -221,8 +235,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=444, - serialized_end=487, + serialized_start=492, + serialized_end=535, ) @@ -273,8 +287,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=489, - serialized_end=589, + serialized_start=537, + serialized_end=637, ) _S2C.fields_by_name['programStatus'].message_type = Common__pb2._PROGRAMSTATUS diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index 910fd73..342e34f 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -470,6 +470,14 @@ enum AssetClass AssetClass_Swap = 6; //掉期 } +// 交割周期 +enum ExpirationCycle +{ + ExpirationCycle_Unknown = 0; //未知 + ExpirationCycle_Week = 1; //周期权 + ExpirationCycle_Month = 2; //月期权 +} + //两个字段确定一支股票 message Security { diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index 774a2a9..fc086e1 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xce\x04\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r\x12&\n\"PriceReminderType_3MinChangeRateUp\x10\x0e\x12(\n$PriceReminderType_3MinChangeRateDown\x10\x0f*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xce\x04\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r\x12&\n\"PriceReminderType_3MinChangeRateUp\x10\x0e\x12(\n$PriceReminderType_3MinChangeRateDown\x10\x0f*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06*c\n\x0f\x45xpirationCycle\x12\x1b\n\x17\x45xpirationCycle_Unknown\x10\x00\x12\x18\n\x14\x45xpirationCycle_Week\x10\x01\x12\x19\n\x15\x45xpirationCycle_Month\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -1763,6 +1763,33 @@ _sym_db.RegisterEnumDescriptor(_ASSETCLASS) AssetClass = enum_type_wrapper.EnumTypeWrapper(_ASSETCLASS) +_EXPIRATIONCYCLE = _descriptor.EnumDescriptor( + name='ExpirationCycle', + full_name='Qot_Common.ExpirationCycle', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='ExpirationCycle_Unknown', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ExpirationCycle_Week', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ExpirationCycle_Month', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=12972, + serialized_end=13071, +) +_sym_db.RegisterEnumDescriptor(_EXPIRATIONCYCLE) + +ExpirationCycle = enum_type_wrapper.EnumTypeWrapper(_EXPIRATIONCYCLE) QotMarket_Unknown = 0 QotMarket_HK_Security = 1 QotMarket_HK_Future = 2 @@ -2085,6 +2112,9 @@ AssetClass_CurrencyMarket = 4 AssetClass_Future = 5 AssetClass_Swap = 6 +ExpirationCycle_Unknown = 0 +ExpirationCycle_Week = 1 +ExpirationCycle_Month = 2 @@ -3878,6 +3908,7 @@ DESCRIPTOR.enum_types_by_name['PriceReminderType'] = _PRICEREMINDERTYPE DESCRIPTOR.enum_types_by_name['PriceReminderFreq'] = _PRICEREMINDERFREQ DESCRIPTOR.enum_types_by_name['AssetClass'] = _ASSETCLASS +DESCRIPTOR.enum_types_by_name['ExpirationCycle'] = _EXPIRATIONCYCLE _sym_db.RegisterFileDescriptor(DESCRIPTOR) Security = _reflection.GeneratedProtocolMessageType('Security', (_message.Message,), dict( diff --git a/futu/common/pb/Qot_GetOptionExpirationDate.proto b/futu/common/pb/Qot_GetOptionExpirationDate.proto new file mode 100644 index 0000000..0b7743d --- /dev/null +++ b/futu/common/pb/Qot_GetOptionExpirationDate.proto @@ -0,0 +1,41 @@ +syntax = "proto2"; +package Qot_GetOptionExpirationDate; +option java_package = "com.futu.openapi.pb"; +option go_package = "github.com/futuopen/ftapi4go/pb/getoptionexpirationdate"; + +import "Common.proto"; +import "Qot_Common.proto"; + + +message C2S +{ + required Qot_Common.Security owner = 1; //期权标的股,目前仅支持传入港美正股以及恒指国指 + optional int32 indexOptionType = 2; //Qot_Common.IndexOptionType,指数期权的类型,仅用于恒指国指 +} + +message OptionExpirationDate +{ + optional string strikeTime = 1; //期权链行权日(港股和 A 股市场默认是北京时间,美股市场默认是美东时间) + optional double strikeTimestamp = 2; //行权日时间戳 + required int32 optionExpiryDateDistance = 3; //距离到期日天数,负数表示已过期 + optional int32 cycle = 4; //Qot_Common.ExpirationCycle,交割周期(仅用于香港指数期权) +} + +message S2C +{ + repeated OptionExpirationDate dateList = 1; //期权链行权日 +} + +message Request +{ + required C2S c2s = 1; +} + +message Response +{ + required int32 retType = 1 [default = -400]; //RetType,返回结果 + optional string retMsg = 2; + optional int32 errCode = 3; + + optional S2C s2c = 4; +} diff --git a/futu/common/pb/Qot_GetOptionExpirationDate_pb2.py b/futu/common/pb/Qot_GetOptionExpirationDate_pb2.py new file mode 100644 index 0000000..e73ac0a --- /dev/null +++ b/futu/common/pb/Qot_GetOptionExpirationDate_pb2.py @@ -0,0 +1,283 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: Qot_GetOptionExpirationDate.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +import Common_pb2 as Common__pb2 +import Qot_Common_pb2 as Qot__Common__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='Qot_GetOptionExpirationDate.proto', + package='Qot_GetOptionExpirationDate', + syntax='proto2', + serialized_pb=_b('\n!Qot_GetOptionExpirationDate.proto\x12\x1bQot_GetOptionExpirationDate\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"C\n\x03\x43\x32S\x12#\n\x05owner\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x17\n\x0findexOptionType\x18\x02 \x01(\x05\"t\n\x14OptionExpirationDate\x12\x12\n\nstrikeTime\x18\x01 \x01(\t\x12\x17\n\x0fstrikeTimestamp\x18\x02 \x01(\x01\x12 \n\x18optionExpiryDateDistance\x18\x03 \x02(\x05\x12\r\n\x05\x63ycle\x18\x04 \x01(\x05\"J\n\x03S2C\x12\x43\n\x08\x64\x61teList\x18\x01 \x03(\x0b\x32\x31.Qot_GetOptionExpirationDate.OptionExpirationDate\"8\n\x07Request\x12-\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32 .Qot_GetOptionExpirationDate.C2S\"q\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12-\n\x03s2c\x18\x04 \x01(\x0b\x32 .Qot_GetOptionExpirationDate.S2CBN\n\x13\x63om.futu.openapi.pbZ7github.com/futuopen/ftapi4go/pb/getoptionexpirationdate') + , + dependencies=[Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) + + + + +_C2S = _descriptor.Descriptor( + name='C2S', + full_name='Qot_GetOptionExpirationDate.C2S', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='owner', full_name='Qot_GetOptionExpirationDate.C2S.owner', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='indexOptionType', full_name='Qot_GetOptionExpirationDate.C2S.indexOptionType', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=98, + serialized_end=165, +) + + +_OPTIONEXPIRATIONDATE = _descriptor.Descriptor( + name='OptionExpirationDate', + full_name='Qot_GetOptionExpirationDate.OptionExpirationDate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='strikeTime', full_name='Qot_GetOptionExpirationDate.OptionExpirationDate.strikeTime', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='strikeTimestamp', full_name='Qot_GetOptionExpirationDate.OptionExpirationDate.strikeTimestamp', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='optionExpiryDateDistance', full_name='Qot_GetOptionExpirationDate.OptionExpirationDate.optionExpiryDateDistance', index=2, + number=3, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='cycle', full_name='Qot_GetOptionExpirationDate.OptionExpirationDate.cycle', index=3, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=167, + serialized_end=283, +) + + +_S2C = _descriptor.Descriptor( + name='S2C', + full_name='Qot_GetOptionExpirationDate.S2C', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='dateList', full_name='Qot_GetOptionExpirationDate.S2C.dateList', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=285, + serialized_end=359, +) + + +_REQUEST = _descriptor.Descriptor( + name='Request', + full_name='Qot_GetOptionExpirationDate.Request', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='c2s', full_name='Qot_GetOptionExpirationDate.Request.c2s', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=361, + serialized_end=417, +) + + +_RESPONSE = _descriptor.Descriptor( + name='Response', + full_name='Qot_GetOptionExpirationDate.Response', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='retType', full_name='Qot_GetOptionExpirationDate.Response.retType', index=0, + number=1, type=5, cpp_type=1, label=2, + has_default_value=True, default_value=-400, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='retMsg', full_name='Qot_GetOptionExpirationDate.Response.retMsg', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='errCode', full_name='Qot_GetOptionExpirationDate.Response.errCode', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='s2c', full_name='Qot_GetOptionExpirationDate.Response.s2c', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=419, + serialized_end=532, +) + +_C2S.fields_by_name['owner'].message_type = Qot__Common__pb2._SECURITY +_S2C.fields_by_name['dateList'].message_type = _OPTIONEXPIRATIONDATE +_REQUEST.fields_by_name['c2s'].message_type = _C2S +_RESPONSE.fields_by_name['s2c'].message_type = _S2C +DESCRIPTOR.message_types_by_name['C2S'] = _C2S +DESCRIPTOR.message_types_by_name['OptionExpirationDate'] = _OPTIONEXPIRATIONDATE +DESCRIPTOR.message_types_by_name['S2C'] = _S2C +DESCRIPTOR.message_types_by_name['Request'] = _REQUEST +DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +C2S = _reflection.GeneratedProtocolMessageType('C2S', (_message.Message,), dict( + DESCRIPTOR = _C2S, + __module__ = 'Qot_GetOptionExpirationDate_pb2' + # @@protoc_insertion_point(class_scope:Qot_GetOptionExpirationDate.C2S) + )) +_sym_db.RegisterMessage(C2S) + +OptionExpirationDate = _reflection.GeneratedProtocolMessageType('OptionExpirationDate', (_message.Message,), dict( + DESCRIPTOR = _OPTIONEXPIRATIONDATE, + __module__ = 'Qot_GetOptionExpirationDate_pb2' + # @@protoc_insertion_point(class_scope:Qot_GetOptionExpirationDate.OptionExpirationDate) + )) +_sym_db.RegisterMessage(OptionExpirationDate) + +S2C = _reflection.GeneratedProtocolMessageType('S2C', (_message.Message,), dict( + DESCRIPTOR = _S2C, + __module__ = 'Qot_GetOptionExpirationDate_pb2' + # @@protoc_insertion_point(class_scope:Qot_GetOptionExpirationDate.S2C) + )) +_sym_db.RegisterMessage(S2C) + +Request = _reflection.GeneratedProtocolMessageType('Request', (_message.Message,), dict( + DESCRIPTOR = _REQUEST, + __module__ = 'Qot_GetOptionExpirationDate_pb2' + # @@protoc_insertion_point(class_scope:Qot_GetOptionExpirationDate.Request) + )) +_sym_db.RegisterMessage(Request) + +Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), dict( + DESCRIPTOR = _RESPONSE, + __module__ = 'Qot_GetOptionExpirationDate_pb2' + # @@protoc_insertion_point(class_scope:Qot_GetOptionExpirationDate.Response) + )) +_sym_db.RegisterMessage(Response) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023com.futu.openapi.pbZ7github.com/futuopen/ftapi4go/pb/getoptionexpirationdate')) +# @@protoc_insertion_point(module_scope) diff --git a/futu/common/pb/Trd_GetMarginRatio.proto b/futu/common/pb/Trd_GetMarginRatio.proto new file mode 100644 index 0000000..7fcdb36 --- /dev/null +++ b/futu/common/pb/Trd_GetMarginRatio.proto @@ -0,0 +1,51 @@ +syntax = "proto2"; +package Trd_GetMarginRatio; +option java_package = "com.futu.openapi.pb"; +option go_package = "github.com/futuopen/ftapi4go/pb/trdgetmarginratio"; + +import "Trd_Common.proto"; +import "Qot_Common.proto"; + +message MarginRatioInfo +{ + required Qot_Common.Security security = 1; //股票 + optional bool isLongPermit = 2; //是否允许融资 + optional bool isShortPermit = 3; //是否允许融券 + optional double shortPoolRemain = 4; //卖空池剩余量 + optional double shortFeeRate = 5; //融券参考利率 + optional double alertLongRatio = 6; //融资预警比率 + optional double alertShortRatio = 7; //融券预警比率 + optional double imLongRatio = 8; //融资初始保证金率 + optional double imShortRatio = 9; //融券初始保证金率 + optional double mcmLongRatio = 10; //融资 margin call 保证金率 + optional double mcmShortRatio = 11; //融券 margin call 保证金率 + optional double mmLongRatio = 12; //融资维持保证金率 + optional double mmShortRatio = 13; //融券维持保证金率 +} + +message C2S +{ + required Trd_Common.TrdHeader header = 1; //交易公共参数头 + repeated Qot_Common.Security securityList = 2; //股票 +} + +message S2C +{ + required Trd_Common.TrdHeader header = 1; //交易公共参数头 + repeated MarginRatioInfo marginRatioInfoList = 2; //账户资金 +} + +message Request +{ + required C2S c2s = 1; +} + +message Response +{ + //以下3个字段每条协议都有,注释说明在InitConnect.proto中 + required int32 retType = 1 [default = -400]; + optional string retMsg = 2; + optional int32 errCode = 3; + + optional S2C s2c = 4; +} diff --git a/futu/common/pb/Trd_GetMarginRatio_pb2.py b/futu/common/pb/Trd_GetMarginRatio_pb2.py new file mode 100644 index 0000000..49416de --- /dev/null +++ b/futu/common/pb/Trd_GetMarginRatio_pb2.py @@ -0,0 +1,356 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: Trd_GetMarginRatio.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +import Trd_Common_pb2 as Trd__Common__pb2 +import Qot_Common_pb2 as Qot__Common__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='Trd_GetMarginRatio.proto', + package='Trd_GetMarginRatio', + syntax='proto2', + serialized_pb=_b('\n\x18Trd_GetMarginRatio.proto\x12\x12Trd_GetMarginRatio\x1a\x10Trd_Common.proto\x1a\x10Qot_Common.proto\"\xc9\x02\n\x0fMarginRatioInfo\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x14\n\x0cisLongPermit\x18\x02 \x01(\x08\x12\x15\n\risShortPermit\x18\x03 \x01(\x08\x12\x17\n\x0fshortPoolRemain\x18\x04 \x01(\x01\x12\x14\n\x0cshortFeeRate\x18\x05 \x01(\x01\x12\x16\n\x0e\x61lertLongRatio\x18\x06 \x01(\x01\x12\x17\n\x0f\x61lertShortRatio\x18\x07 \x01(\x01\x12\x13\n\x0bimLongRatio\x18\x08 \x01(\x01\x12\x14\n\x0cimShortRatio\x18\t \x01(\x01\x12\x14\n\x0cmcmLongRatio\x18\n \x01(\x01\x12\x15\n\rmcmShortRatio\x18\x0b \x01(\x01\x12\x13\n\x0bmmLongRatio\x18\x0c \x01(\x01\x12\x14\n\x0cmmShortRatio\x18\r \x01(\x01\"X\n\x03\x43\x32S\x12%\n\x06header\x18\x01 \x02(\x0b\x32\x15.Trd_Common.TrdHeader\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"n\n\x03S2C\x12%\n\x06header\x18\x01 \x02(\x0b\x32\x15.Trd_Common.TrdHeader\x12@\n\x13marginRatioInfoList\x18\x02 \x03(\x0b\x32#.Trd_GetMarginRatio.MarginRatioInfo\"/\n\x07Request\x12$\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x17.Trd_GetMarginRatio.C2S\"h\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12$\n\x03s2c\x18\x04 \x01(\x0b\x32\x17.Trd_GetMarginRatio.S2CBH\n\x13\x63om.futu.openapi.pbZ1github.com/futuopen/ftapi4go/pb/trdgetmarginratio') + , + dependencies=[Trd__Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) + + + + +_MARGINRATIOINFO = _descriptor.Descriptor( + name='MarginRatioInfo', + full_name='Trd_GetMarginRatio.MarginRatioInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='security', full_name='Trd_GetMarginRatio.MarginRatioInfo.security', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='isLongPermit', full_name='Trd_GetMarginRatio.MarginRatioInfo.isLongPermit', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='isShortPermit', full_name='Trd_GetMarginRatio.MarginRatioInfo.isShortPermit', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='shortPoolRemain', full_name='Trd_GetMarginRatio.MarginRatioInfo.shortPoolRemain', index=3, + number=4, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='shortFeeRate', full_name='Trd_GetMarginRatio.MarginRatioInfo.shortFeeRate', index=4, + number=5, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='alertLongRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.alertLongRatio', index=5, + number=6, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='alertShortRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.alertShortRatio', index=6, + number=7, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='imLongRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.imLongRatio', index=7, + number=8, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='imShortRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.imShortRatio', index=8, + number=9, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='mcmLongRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.mcmLongRatio', index=9, + number=10, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='mcmShortRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.mcmShortRatio', index=10, + number=11, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='mmLongRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.mmLongRatio', index=11, + number=12, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='mmShortRatio', full_name='Trd_GetMarginRatio.MarginRatioInfo.mmShortRatio', index=12, + number=13, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=85, + serialized_end=414, +) + + +_C2S = _descriptor.Descriptor( + name='C2S', + full_name='Trd_GetMarginRatio.C2S', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='Trd_GetMarginRatio.C2S.header', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='securityList', full_name='Trd_GetMarginRatio.C2S.securityList', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=416, + serialized_end=504, +) + + +_S2C = _descriptor.Descriptor( + name='S2C', + full_name='Trd_GetMarginRatio.S2C', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='Trd_GetMarginRatio.S2C.header', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='marginRatioInfoList', full_name='Trd_GetMarginRatio.S2C.marginRatioInfoList', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=506, + serialized_end=616, +) + + +_REQUEST = _descriptor.Descriptor( + name='Request', + full_name='Trd_GetMarginRatio.Request', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='c2s', full_name='Trd_GetMarginRatio.Request.c2s', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=618, + serialized_end=665, +) + + +_RESPONSE = _descriptor.Descriptor( + name='Response', + full_name='Trd_GetMarginRatio.Response', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='retType', full_name='Trd_GetMarginRatio.Response.retType', index=0, + number=1, type=5, cpp_type=1, label=2, + has_default_value=True, default_value=-400, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='retMsg', full_name='Trd_GetMarginRatio.Response.retMsg', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='errCode', full_name='Trd_GetMarginRatio.Response.errCode', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='s2c', full_name='Trd_GetMarginRatio.Response.s2c', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=667, + serialized_end=771, +) + +_MARGINRATIOINFO.fields_by_name['security'].message_type = Qot__Common__pb2._SECURITY +_C2S.fields_by_name['header'].message_type = Trd__Common__pb2._TRDHEADER +_C2S.fields_by_name['securityList'].message_type = Qot__Common__pb2._SECURITY +_S2C.fields_by_name['header'].message_type = Trd__Common__pb2._TRDHEADER +_S2C.fields_by_name['marginRatioInfoList'].message_type = _MARGINRATIOINFO +_REQUEST.fields_by_name['c2s'].message_type = _C2S +_RESPONSE.fields_by_name['s2c'].message_type = _S2C +DESCRIPTOR.message_types_by_name['MarginRatioInfo'] = _MARGINRATIOINFO +DESCRIPTOR.message_types_by_name['C2S'] = _C2S +DESCRIPTOR.message_types_by_name['S2C'] = _S2C +DESCRIPTOR.message_types_by_name['Request'] = _REQUEST +DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +MarginRatioInfo = _reflection.GeneratedProtocolMessageType('MarginRatioInfo', (_message.Message,), dict( + DESCRIPTOR = _MARGINRATIOINFO, + __module__ = 'Trd_GetMarginRatio_pb2' + # @@protoc_insertion_point(class_scope:Trd_GetMarginRatio.MarginRatioInfo) + )) +_sym_db.RegisterMessage(MarginRatioInfo) + +C2S = _reflection.GeneratedProtocolMessageType('C2S', (_message.Message,), dict( + DESCRIPTOR = _C2S, + __module__ = 'Trd_GetMarginRatio_pb2' + # @@protoc_insertion_point(class_scope:Trd_GetMarginRatio.C2S) + )) +_sym_db.RegisterMessage(C2S) + +S2C = _reflection.GeneratedProtocolMessageType('S2C', (_message.Message,), dict( + DESCRIPTOR = _S2C, + __module__ = 'Trd_GetMarginRatio_pb2' + # @@protoc_insertion_point(class_scope:Trd_GetMarginRatio.S2C) + )) +_sym_db.RegisterMessage(S2C) + +Request = _reflection.GeneratedProtocolMessageType('Request', (_message.Message,), dict( + DESCRIPTOR = _REQUEST, + __module__ = 'Trd_GetMarginRatio_pb2' + # @@protoc_insertion_point(class_scope:Trd_GetMarginRatio.Request) + )) +_sym_db.RegisterMessage(Request) + +Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), dict( + DESCRIPTOR = _RESPONSE, + __module__ = 'Trd_GetMarginRatio_pb2' + # @@protoc_insertion_point(class_scope:Trd_GetMarginRatio.Response) + )) +_sym_db.RegisterMessage(Response) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023com.futu.openapi.pbZ1github.com/futuopen/ftapi4go/pb/trdgetmarginratio')) +# @@protoc_insertion_point(module_scope) diff --git a/futu/common/utils.py b/futu/common/utils.py index 11c0048..57346fc 100644 --- a/futu/common/utils.py +++ b/futu/common/utils.py @@ -208,19 +208,19 @@ def is_str(obj): def price_to_str_int1000(price): return str(int(round(float(price) * 1000, - 0))) if str(price) is not '' else '' + 0))) if str(price) != '' else '' # 1000*int price to float val def int1000_price_to_float(price): return round(float(price) / 1000.0, - 3) if str(price) is not '' else float(0) + 3) if str(price) != '' else float(0) # 10^9 int price to float val def int10_9_price_to_float(price): return round(float(price) / float(10**9), - 3) if str(price) is not '' else float(0) + 3) if str(price) != '' else float(0) # list 参数除重及规整 @@ -340,6 +340,10 @@ def __init__(self): from futu.common.pb.Trd_GetHistoryOrderFillList_pb2 import Response ProtobufMap.created_protobuf_map[ProtoId.Trd_GetHistoryOrderFillList] = Response() + """ Qot_GetReference = 2223 获取正股相关股票,暂时只有窝轮""" + from futu.common.pb.Trd_GetMarginRatio_pb2 import Response + ProtobufMap.created_protobuf_map[ProtoId.Trd_GetMarginRatio] = Response() + """ Qot_Sub = 3001 # 订阅或者反订阅 """ from futu.common.pb.Qot_Sub_pb2 import Response ProtobufMap.created_protobuf_map[ProtoId.Qot_Sub] = Response() @@ -510,6 +514,9 @@ def __init__(self): from futu.common.pb.Qot_GetMarketState_pb2 import Response ProtobufMap.created_protobuf_map[ProtoId.Qot_GetMarketState] = Response() + from futu.common.pb.Qot_GetOptionExpirationDate_pb2 import Response + ProtobufMap.created_protobuf_map[ProtoId.Qot_GetOptionExpirationDate] = Response() + def __getitem__(self, key): return ProtobufMap.created_protobuf_map[key] if key in ProtobufMap.created_protobuf_map else None diff --git a/futu/quote/open_quote_context.py b/futu/quote/open_quote_context.py index 27d1f47..06a1627 100644 --- a/futu/quote/open_quote_context.py +++ b/futu/quote/open_quote_context.py @@ -2622,3 +2622,53 @@ def get_market_state(self, code_list): else: return RET_ERROR, "empty data" + def get_option_expiration_date(self, code, index_option_type=IndexOptionType.NORMAL): + """ + 获取期权链到期日 + :param code 标的股票代码 + :param index_option_type: 指数期权类型,IndexOptionType + :return: (ret, data) + ret != RET_OK 返回错误字符串 + ret == RET_OK data为DataFrame类型,字段如下: + ============================ ================== ================================ + 参数 类型 说明 + ============================ ================== ================================ + strike_time str 期权链行权日(港股和 A 股市场默认是北京时间,美股市场默认是美东时间) + option_expiry_date_distance int 距离到期日天数,负数表示已过期 + expiration_cycle ExpirationCycle 交割周期(仅用于香港指数期权) + ============================ ================== ================================ + """ + + if code is None or is_str(code) is False: + error_str = ERROR_STR_PREFIX + "the type of code param is wrong" + return RET_ERROR, error_str + + r, n = IndexOptionType.to_number(index_option_type) + if r is False: + msg = ERROR_STR_PREFIX + "the type of index_option_type param is wrong" + return RET_ERROR, msg + + query_processor = self._get_sync_query_processor( + GetOptionExpirationDate.pack_req, + GetOptionExpirationDate.unpack, + ) + + kargs = { + "code": code, + "index_option_type": index_option_type, + "conn_id": self.get_sync_conn_id() + } + ret_code, msg, ret = query_processor(**kargs) + if ret_code == RET_ERROR: + return ret_code, msg + if isinstance(ret, list): + col_list = [ + 'strike_time', + 'option_expiry_date_distance', + 'expiration_cycle' + ] + ret_frame = pd.DataFrame(ret, columns=col_list) + return RET_OK, ret_frame + else: + return RET_ERROR, "empty data" + diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index 3ec777f..2d84fd1 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -1541,6 +1541,10 @@ def unpack_rsp(cls, rsp_pb): 'market_hk': MarketState.to_string2(state.marketHK) if state.HasField('marketHK') else 'N/A',# 初始化枚举类型 'market_hkfuture': MarketState.to_string2(state.marketHKFuture) if state.HasField('marketHKFuture') else 'N/A',# 初始化枚举类型 'market_usfuture': MarketState.to_string2(state.marketUSFuture) if state.HasField('marketUSFuture') else 'N/A',# 初始化枚举类型 + 'market_sgfuture': MarketState.to_string2(state.marketSGFuture) if state.HasField( + 'marketSGFuture') else 'N/A', # 初始化枚举类型 + 'market_jpfuture': MarketState.to_string2(state.marketJPFuture) if state.HasField( + 'marketJPFuture') else 'N/A', # 初始化枚举类型 'server_ver': str(state.serverVer), 'trd_logined': state.trdLogined, 'timestamp': str(state.time), @@ -2213,6 +2217,10 @@ def unpack_rsp(cls, rsp_pb): 'hkFutureQotRight') else "N/A" us_qot_right = rsp_pb.s2c.usQotRight if rsp_pb.s2c.HasField( 'usQotRight') else "N/A" + us_option_qot_right = rsp_pb.s2c.usOptionQotRight if rsp_pb.s2c.HasField( + 'usOptionQotRight') else "N/A" + us_future_qot_right = rsp_pb.s2c.usFutureQotRight if rsp_pb.s2c.HasField( + 'usFutureQotRight') else "N/A" cn_qot_right = rsp_pb.s2c.cnQotRight if rsp_pb.s2c.HasField( 'cnQotRight') else "N/A" is_need_agree_disclaimer = rsp_pb.s2c.isNeedAgreeDisclaimer if rsp_pb.s2c.HasField( @@ -2231,6 +2239,8 @@ def unpack_rsp(cls, rsp_pb): "hk_option_qot_right": QotRight.to_string2(hk_option_qot_right), "hk_future_qot_right": QotRight.to_string2(hk_future_qot_right), "us_qot_right": QotRight.to_string2(us_qot_right), + "us_option_qot_right": QotRight.to_string2(us_option_qot_right), + "us_future_qot_right": QotRight.to_string2(us_future_qot_right), "cn_qot_right": QotRight.to_string2(cn_qot_right), "is_need_agree_disclaimer": is_need_agree_disclaimer, "user_id": user_id, @@ -3121,4 +3131,49 @@ def unpack(cls, rsp_pb): data["stock_name"] = item.name # Qot_Common.QotMarketState,市场状态 type = int32 data["market_state"] = MarketState.to_string2(item.marketState)if item.HasField('marketState') else 'N/A' # 初始化枚举类型 + return RET_OK, "", ret_list + +class GetOptionExpirationDate: + """ + Query GetOptionExpirationDate. + """ + + def __init__(self): + pass + + @classmethod + def pack_req(cls, code, index_option_type, conn_id): + ret, content = split_stock_str(code) + if ret == RET_ERROR: + error_str = content + return RET_ERROR, error_str, None + + market_code, stock_code = content + + r, index_option_type = IndexOptionType.to_number(index_option_type) + if r is False: + index_option_type = None + + from futu.common.pb.Qot_GetOptionExpirationDate_pb2 import Request + req = Request() + req.c2s.owner.market = market_code + req.c2s.owner.code = stock_code + if index_option_type is not None: + req.c2s.indexOptionType = index_option_type + + return pack_pb_req(req, ProtoId.Qot_GetOptionExpirationDate, conn_id) + + @classmethod + def unpack(cls, rsp_pb): + if rsp_pb.retType != RET_OK: + return RET_ERROR, rsp_pb.retMsg, None + + ret_list = list() + expiration_date_list = rsp_pb.s2c.dateList + for item in expiration_date_list: + data = {} + ret_list.append(data) + data["strike_time"] = item.strikeTime if item.HasField('strikeTime') else ' ' + data["option_expiry_date_distance"] = item.optionExpiryDateDistance + data["expiration_cycle"] = ExpirationCycle.to_string2(item.cycle) if item.HasField('cycle') else 'N/A' return RET_OK, "", ret_list \ No newline at end of file diff --git a/futu/trade/open_trade_context.py b/futu/trade/open_trade_context.py index 66a7c37..bdc0dde 100644 --- a/futu/trade/open_trade_context.py +++ b/futu/trade/open_trade_context.py @@ -103,7 +103,7 @@ def unlock_trade(self, password=None, password_md5=None, is_unlock=True): return RET_OK, Err.NoNeedUnlock.text if password is None and password_md5 is None: - return RET_ERROR, make_msg(Err.ParamErr, password=password, password_md5=password_md5) + return RET_ERROR, 'Missing necessary parameter. One of the two parameters (password and password_md5) is required.' md5_val = str(password_md5) if password_md5 else md5_transform(str(password)) @@ -289,7 +289,7 @@ def accinfo_query(self, trd_env=TrdEnv.REAL, acc_id=0, acc_index=0, refresh_cach 'pending_asset', 'interest_charged_amount', 'frozen_cash', 'avl_withdrawal_cash', 'max_withdrawal', 'currency', 'available_funds', 'unrealized_pl', 'realized_pl', 'risk_level', 'risk_status', 'initial_margin', 'margin_call_margin', 'maintenance_margin', 'hk_cash', 'hk_avl_withdrawal_cash', 'us_cash', - 'us_avl_withdrawal_cash', 'jp_cash', 'jp_avl_withdrawal_cash' + 'us_avl_withdrawal_cash' ] accinfo_frame_table = pd.DataFrame(accinfo_list, columns=col_list) @@ -797,6 +797,36 @@ def acctradinginfo_query(self, order_type, code, price, order_id=None, adjust_li acctradinginfo_table = pd.DataFrame(data, columns=col_list) return RET_OK, acctradinginfo_table + def get_margin_ratio(self, code_list): + code_list = unique_and_normalize_list(code_list) + if not code_list: + error_str = ERROR_STR_PREFIX + "the type of code param is wrong" + return RET_ERROR, error_str + + ret, msg, acc_id = self._check_acc_id_and_acc_index(TrdEnv.REAL, 0, 0) + if ret != RET_OK: + return ret, msg + + query_processor = self._get_sync_query_processor( + MarginRatio.pack_req, MarginRatio.unpack_rsp) + kargs = { + "code_list": code_list, + "conn_id": self.get_sync_conn_id(), + "acc_id": acc_id, + 'trd_mkt': self.__trd_mkt, + } + + ret_code, msg, margin_ratio_list = query_processor(**kargs) + if ret_code != RET_OK: + return RET_ERROR, msg + + col_list = [ + "code", "is_long_permit", "is_short_permit", "short_pool_remain", "short_fee_rate", "alert_long_ratio", + "alert_short_ratio", "im_long_ratio", "im_short_ratio", "mcm_long_ratio", 'mcm_short_ratio', "mm_long_ratio", 'mm_short_ratio' + ] + margin_ratio_table = pd.DataFrame(margin_ratio_list, columns=col_list) + + return RET_OK, margin_ratio_table # 港股交易接口 class OpenHKTradeContext(OpenTradeContextBase): diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index 8941f50..c674618 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -157,9 +157,7 @@ def unpack_rsp(cls, rsp_pb): 'hk_cash': NoneDataValue, 'hk_avl_withdrawal_cash': NoneDataValue, 'us_cash': NoneDataValue, - 'us_avl_withdrawal_cash': NoneDataValue, - 'jp_cash': NoneDataValue, - 'jp_avl_withdrawal_cash': NoneDataValue + 'us_avl_withdrawal_cash': NoneDataValue }] for cashInfo in raw_funds.cashInfoList: if cashInfo.currency == Trd_Common_pb2.Currency_HKD: @@ -168,9 +166,6 @@ def unpack_rsp(cls, rsp_pb): elif cashInfo.currency == Trd_Common_pb2.Currency_USD: accinfo_list[0]['us_cash'] = cashInfo.cash accinfo_list[0]['us_avl_withdrawal_cash'] = cashInfo.availableBalance - elif cashInfo.currency == Trd_Common_pb2.Currency_JPY: - accinfo_list[0]['jp_cash'] = cashInfo.cash - accinfo_list[0]['jp_avl_withdrawal_cash'] = cashInfo.availableBalance return RET_OK, "", accinfo_list @@ -676,3 +671,70 @@ def unpack_rsp(cls, rsp_pb): }] return RET_OK, "", data + + +class MarginRatio: + """Class for """ + def __init__(self): + pass + + @classmethod + def pack_req(cls, code_list, conn_id, acc_id, trd_mkt): + """Convert from user request for place order to PLS request""" + stock_tuple_list = [] + failure_tuple_list = [] + for stock_str in code_list: + ret_code, content = split_stock_str(stock_str) + if ret_code != RET_OK: + error_str = content + failure_tuple_list.append((ret_code, error_str)) + continue + + market_code, stock_code = content + stock_tuple_list.append((market_code, stock_code)) + + if len(failure_tuple_list) > 0: + error_str = '\n'.join([x[1] for x in failure_tuple_list]) + return RET_ERROR, error_str, None + + from futu.common.pb.Trd_GetMarginRatio_pb2 import Request + req = Request() + + req.c2s.header.trdEnv = 1 + req.c2s.header.accID = acc_id + _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) + + for market, code in stock_tuple_list: + stock_inst = req.c2s.securityList.add() + stock_inst.market = market + stock_inst.code = code + + return pack_pb_req(req, ProtoId.Trd_GetMarginRatio, conn_id) + + @classmethod + def unpack_rsp(cls, rsp_pb): + """Convert from PLS response to user response""" + if rsp_pb.retType != RET_OK: + return RET_ERROR, rsp_pb.retMsg, None + + margin_ratio_list = rsp_pb.s2c.marginRatioInfoList + ret_margin_ratio_list = [] + for margin_info in margin_ratio_list: + margin_ratio_tmp = {} + margin_ratio_tmp['code'] = merge_qot_mkt_stock_str( + int(margin_info.security.market), margin_info.security.code) + margin_ratio_tmp['is_long_permit'] = margin_info.isLongPermit if margin_info.HasField('isLongPermit') else 'N/A' # 是否允许融资 + margin_ratio_tmp['is_short_permit'] = margin_info.isShortPermit if margin_info.HasField('isShortPermit') else 'N/A' # 是否允许融券 + margin_ratio_tmp['short_pool_remain'] = margin_info.shortPoolRemain if margin_info.HasField('shortPoolRemain') else 'N/A' # 卖空池剩余量 + margin_ratio_tmp['short_fee_rate'] = margin_info.shortFeeRate if margin_info.HasField('shortFeeRate') else 'N/A' # 融券参考利率 + margin_ratio_tmp['alert_long_ratio'] = margin_info.alertLongRatio if margin_info.HasField('alertLongRatio') else 'N/A' # 融资预警比率 + margin_ratio_tmp['alert_short_ratio'] = margin_info.alertShortRatio if margin_info.HasField('alertShortRatio') else 'N/A' # 融券预警比率 + margin_ratio_tmp['im_long_ratio'] = margin_info.imLongRatio if margin_info.HasField('imLongRatio') else 'N/A' # 融资初始保证金率 + margin_ratio_tmp['im_short_ratio'] = margin_info.imShortRatio if margin_info.HasField('imShortRatio') else 'N/A' # 融券初始保证金率 + margin_ratio_tmp['mcm_long_ratio'] = margin_info.mcmLongRatio if margin_info.HasField('mcmLongRatio') else 'N/A' # 融资 margin call 保证金率 + margin_ratio_tmp['mcm_short_ratio'] = margin_info.mcmShortRatio if margin_info.HasField('mcmShortRatio') else 'N/A' # 融券 margin call 保证金率 + margin_ratio_tmp['mm_long_ratio'] = margin_info.mmLongRatio if margin_info.HasField('mmLongRatio') else 'N/A' # 融资维持保证金率 + margin_ratio_tmp['mm_short_ratio'] = margin_info.mmShortRatio if margin_info.HasField('mmShortRatio') else 'N/A' # 融券维持保证金率 + ret_margin_ratio_list.append(margin_ratio_tmp) + + return RET_OK, "", ret_margin_ratio_list diff --git a/setup.py b/setup.py index 93c8839..93a98ae 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,7 @@ with open(join(dirname(__file__), 'futu/VERSION.txt'), 'rb') as f: version = f.read().decode('ascii').strip() -with open("README.md", "r") as fh: +with open("README.md", "r", encoding='utf-8') as fh: long_desc = fh.read() install_requires = ["pandas", From 4e9043cb6068282133deac2af7eb14b4db15cc4d Mon Sep 17 00:00:00 2001 From: byblehua Date: Thu, 17 Jun 2021 15:18:37 +0800 Subject: [PATCH 33/36] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=AD=A3=E5=BC=8F?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index c5e15ed..90d5966 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.4.1607 +5.4.1608 From 85688c646b2b9be47fa3efd92a3c35127a64727c Mon Sep 17 00:00:00 2001 From: byblehua Date: Tue, 22 Jun 2021 21:03:48 +0800 Subject: [PATCH 34/36] =?UTF-8?q?=E5=90=8C=E6=AD=A52106?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- futu/common/constant.py | 7 - futu/common/handler_context.py | 4 - futu/common/network_manager.py | 1 + futu/common/open_context_base.py | 2 +- futu/common/pb/Qot_Common.proto | 7 - futu/common/pb/Qot_Common_pb2.py | 197 +++++--------- futu/common/pb/Qot_GetOrderDetail.proto | 32 --- futu/common/pb/Qot_GetOrderDetail_pb2.py | 232 ---------------- futu/common/pb/Qot_GetTradeDate.proto | 40 --- futu/common/pb/Qot_GetTradeDate_pb2.py | 282 -------------------- futu/common/pb/Qot_UpdateOrderDetail.proto | 23 -- futu/common/pb/Qot_UpdateOrderDetail_pb2.py | 152 ----------- futu/common/utils.py | 13 - futu/quote/open_quote_context.py | 79 ------ futu/quote/quote_query.py | 125 --------- futu/quote/quote_response_handler.py | 13 - futu/trade/open_trade_context.py | 4 +- futu/trade/trade_query.py | 1 + 19 files changed, 79 insertions(+), 1137 deletions(-) delete mode 100644 futu/common/pb/Qot_GetOrderDetail.proto delete mode 100644 futu/common/pb/Qot_GetOrderDetail_pb2.py delete mode 100644 futu/common/pb/Qot_GetTradeDate.proto delete mode 100644 futu/common/pb/Qot_GetTradeDate_pb2.py delete mode 100644 futu/common/pb/Qot_UpdateOrderDetail.proto delete mode 100644 futu/common/pb/Qot_UpdateOrderDetail_pb2.py diff --git a/futu/VERSION.txt b/futu/VERSION.txt index 90d5966..f9cccf0 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.4.1608 +5.5.1708 diff --git a/futu/common/constant.py b/futu/common/constant.py index 4abad49..8ff0169 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -74,7 +74,6 @@ class ProtoId(object): Qot_RequestRehab = 3105 # 获取除权信息 # 其他行情数据 - Qot_GetTradeDate = 3200 # 获取市场交易日 Qot_GetSuspend = 3201 # 获取股票停牌信息 Qot_GetStaticInfo = 3202 # 获取股票列表 Qot_GetSecuritySnapshot = 3203 # 获取股票快照 @@ -85,9 +84,6 @@ class ProtoId(object): Qot_GetHoldingChangeList = 3208 # 获取高管持股变动 Qot_GetOptionChain = 3209 # 获取期权链 - Qot_GetOrderDetail = 3016 # 获取委托明细 - Qot_UpdateOrderDetail = 3017 # 推送委托明细 - Qot_GetWarrant = 3210 # 拉取窝轮信息 Qot_GetCapitalFlow = 3211 # 获取资金流向 Qot_GetCapitalDistribution = 3212 # 获取资金分布 @@ -470,14 +466,11 @@ class SubType(FtEnum): 分时 .. py:attribute:: BROKER 买卖经纪 - .. py:attribute:: ORDER_DETAIL - 委托明细 """ NONE = "N/A" TICKER = "TICKER" QUOTE = "QUOTE" ORDER_BOOK = "ORDER_BOOK" - # ORDER_DETAIL = "ORDER_DETAIL" K_1M = "K_1M" K_3M = "K_3M" K_5M = "K_5M" diff --git a/futu/common/handler_context.py b/futu/common/handler_context.py index e260240..54015e8 100644 --- a/futu/common/handler_context.py +++ b/futu/common/handler_context.py @@ -55,10 +55,6 @@ def __init__(self, cb_check_recv): "type": PriceReminderHandlerBase, "obj": PriceReminderHandlerBase() } - # 3017: { - # "type": OrderDetailHandlerBase, - # "obj": OrderDetailHandlerBase() - # } } def set_handler(self, handler): diff --git a/futu/common/network_manager.py b/futu/common/network_manager.py index 33d8fa6..fc99a32 100644 --- a/futu/common/network_manager.py +++ b/futu/common/network_manager.py @@ -484,6 +484,7 @@ def _on_read(self, conn): packet_count += 1 self._on_packet(conn, head_dict, Err.Ok.code, '', rsp_body) if packet_count >= 10: + self._w_sock.send(b'1') break #收10个包强制跳出循环,避免长时间解包导致无法发送心跳 if is_closed: diff --git a/futu/common/open_context_base.py b/futu/common/open_context_base.py index 72cd0a8..03f0b20 100644 --- a/futu/common/open_context_base.py +++ b/futu/common/open_context_base.py @@ -75,7 +75,7 @@ def __del__(self): self._close() def __enter__(self): - pass + return self def __exit__(self, t, v, tb): self._close() diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index 342e34f..0cd842f 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -186,7 +186,6 @@ enum SubType SubType_KL_Qurater = 15; //季K SubType_KL_Year = 16; //年K SubType_KL_3Min = 17; //3分K - SubType_OrderDetail = 18; //委托明细 } enum TickerDirection @@ -678,12 +677,6 @@ message OrderBook repeated OrderBookDetail detailList = 4; //订单信息,SF行情特有 } -message OrderDetail -{ - required int32 orderCount = 1; //委托订单个数 - repeated double orderVol = 2; //每笔委托的委托量,注意:当前只会返回最多前50笔委托的委托数量 -} - //持股变动 message ShareHoldingChange { diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index fc086e1..e016de4 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"3\n\x0bOrderDetail\x12\x12\n\norderCount\x18\x01 \x02(\x05\x12\x10\n\x08orderVol\x18\x02 \x03(\x01\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\x83\x03\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11\x12\x17\n\x13SubType_OrderDetail\x10\x12*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xce\x04\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r\x12&\n\"PriceReminderType_3MinChangeRateUp\x10\x0e\x12(\n$PriceReminderType_3MinChangeRateDown\x10\x0f*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06*c\n\x0f\x45xpirationCycle\x12\x1b\n\x17\x45xpirationCycle_Unknown\x10\x00\x12\x18\n\x14\x45xpirationCycle_Week\x10\x01\x12\x19\n\x15\x45xpirationCycle_Month\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\xea\x02\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xce\x04\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r\x12&\n\"PriceReminderType_3MinChangeRateUp\x10\x0e\x12(\n$PriceReminderType_3MinChangeRateDown\x10\x0f*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06*c\n\x0f\x45xpirationCycle\x12\x1b\n\x17\x45xpirationCycle_Unknown\x10\x00\x12\x18\n\x14\x45xpirationCycle_Week\x10\x01\x12\x19\n\x15\x45xpirationCycle_Month\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -66,8 +66,8 @@ ], containing_type=None, options=None, - serialized_start=4108, - serialized_end=4333, + serialized_start=4055, + serialized_end=4280, ) _sym_db.RegisterEnumDescriptor(_QOTMARKET) @@ -125,8 +125,8 @@ ], containing_type=None, options=None, - serialized_start=4336, - serialized_end=4618, + serialized_start=4283, + serialized_end=4565, ) _sym_db.RegisterEnumDescriptor(_SECURITYTYPE) @@ -160,8 +160,8 @@ ], containing_type=None, options=None, - serialized_start=4621, - serialized_end=4759, + serialized_start=4568, + serialized_end=4706, ) _sym_db.RegisterEnumDescriptor(_PLATESETTYPE) @@ -199,8 +199,8 @@ ], containing_type=None, options=None, - serialized_start=4762, - serialized_end=4911, + serialized_start=4709, + serialized_end=4858, ) _sym_db.RegisterEnumDescriptor(_WARRANTTYPE) @@ -226,8 +226,8 @@ ], containing_type=None, options=None, - serialized_start=4913, - serialized_end=4990, + serialized_start=4860, + serialized_end=4937, ) _sym_db.RegisterEnumDescriptor(_OPTIONTYPE) @@ -253,8 +253,8 @@ ], containing_type=None, options=None, - serialized_start=4992, - serialized_end=5093, + serialized_start=4939, + serialized_end=5040, ) _sym_db.RegisterEnumDescriptor(_INDEXOPTIONTYPE) @@ -284,8 +284,8 @@ ], containing_type=None, options=None, - serialized_start=5096, - serialized_end=5226, + serialized_start=5043, + serialized_end=5173, ) _sym_db.RegisterEnumDescriptor(_OPTIONAREATYPE) @@ -411,8 +411,8 @@ ], containing_type=None, options=None, - serialized_start=5229, - serialized_end=6165, + serialized_start=5176, + serialized_end=6112, ) _sym_db.RegisterEnumDescriptor(_QOTMARKETSTATE) @@ -450,8 +450,8 @@ ], containing_type=None, options=None, - serialized_start=6168, - serialized_end=6334, + serialized_start=6115, + serialized_end=6281, ) _sym_db.RegisterEnumDescriptor(_TRADEDATEMARKET) @@ -477,8 +477,8 @@ ], containing_type=None, options=None, - serialized_start=6336, - serialized_end=6432, + serialized_start=6283, + serialized_end=6379, ) _sym_db.RegisterEnumDescriptor(_TRADEDATETYPE) @@ -504,8 +504,8 @@ ], containing_type=None, options=None, - serialized_start=6434, - serialized_end=6512, + serialized_start=6381, + serialized_end=6459, ) _sym_db.RegisterEnumDescriptor(_REHABTYPE) @@ -567,8 +567,8 @@ ], containing_type=None, options=None, - serialized_start=6515, - serialized_end=6736, + serialized_start=6462, + serialized_end=6683, ) _sym_db.RegisterEnumDescriptor(_KLTYPE) @@ -626,8 +626,8 @@ ], containing_type=None, options=None, - serialized_start=6739, - serialized_end=6984, + serialized_start=6686, + serialized_end=6931, ) _sym_db.RegisterEnumDescriptor(_KLFIELDS) @@ -706,15 +706,11 @@ name='SubType_KL_3Min', index=16, number=17, options=None, type=None), - _descriptor.EnumValueDescriptor( - name='SubType_OrderDetail', index=17, number=18, - options=None, - type=None), ], containing_type=None, options=None, - serialized_start=6987, - serialized_end=7374, + serialized_start=6934, + serialized_end=7296, ) _sym_db.RegisterEnumDescriptor(_SUBTYPE) @@ -744,8 +740,8 @@ ], containing_type=None, options=None, - serialized_start=7376, - serialized_end=7501, + serialized_start=7298, + serialized_end=7423, ) _sym_db.RegisterEnumDescriptor(_TICKERDIRECTION) @@ -887,8 +883,8 @@ ], containing_type=None, options=None, - serialized_start=7504, - serialized_end=8428, + serialized_start=7426, + serialized_end=8350, ) _sym_db.RegisterEnumDescriptor(_TICKERTYPE) @@ -914,8 +910,8 @@ ], containing_type=None, options=None, - serialized_start=8430, - serialized_end=8507, + serialized_start=8352, + serialized_end=8429, ) _sym_db.RegisterEnumDescriptor(_DARKSTATUS) @@ -1017,8 +1013,8 @@ ], containing_type=None, options=None, - serialized_start=8510, - serialized_end=9298, + serialized_start=8432, + serialized_end=9220, ) _sym_db.RegisterEnumDescriptor(_SECURITYSTATUS) @@ -1048,8 +1044,8 @@ ], containing_type=None, options=None, - serialized_start=9301, - serialized_end=9430, + serialized_start=9223, + serialized_end=9352, ) _sym_db.RegisterEnumDescriptor(_HOLDERCATEGORY) @@ -1079,8 +1075,8 @@ ], containing_type=None, options=None, - serialized_start=9432, - serialized_end=9550, + serialized_start=9354, + serialized_end=9472, ) _sym_db.RegisterEnumDescriptor(_PUSHDATATYPE) @@ -1298,8 +1294,8 @@ ], containing_type=None, options=None, - serialized_start=9553, - serialized_end=10916, + serialized_start=9475, + serialized_end=10838, ) _sym_db.RegisterEnumDescriptor(_SORTFIELD) @@ -1413,8 +1409,8 @@ ], containing_type=None, options=None, - serialized_start=10919, - serialized_end=11306, + serialized_start=10841, + serialized_end=11228, ) _sym_db.RegisterEnumDescriptor(_ISSUER) @@ -1452,8 +1448,8 @@ ], containing_type=None, options=None, - serialized_start=11309, - serialized_end=11460, + serialized_start=11231, + serialized_end=11382, ) _sym_db.RegisterEnumDescriptor(_IPOPERIOD) @@ -1479,8 +1475,8 @@ ], containing_type=None, options=None, - serialized_start=11462, - serialized_end=11540, + serialized_start=11384, + serialized_end=11462, ) _sym_db.RegisterEnumDescriptor(_PRICETYPE) @@ -1514,8 +1510,8 @@ ], containing_type=None, options=None, - serialized_start=11543, - serialized_end=11700, + serialized_start=11465, + serialized_end=11622, ) _sym_db.RegisterEnumDescriptor(_WARRANTSTATUS) @@ -1565,8 +1561,8 @@ ], containing_type=None, options=None, - serialized_start=11703, - serialized_end=11921, + serialized_start=11625, + serialized_end=11843, ) _sym_db.RegisterEnumDescriptor(_COMPANYACT) @@ -1604,8 +1600,8 @@ ], containing_type=None, options=None, - serialized_start=11923, - serialized_end=12048, + serialized_start=11845, + serialized_end=11970, ) _sym_db.RegisterEnumDescriptor(_QOTRIGHT) @@ -1683,8 +1679,8 @@ ], containing_type=None, options=None, - serialized_start=12051, - serialized_end=12641, + serialized_start=11973, + serialized_end=12563, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERTYPE) @@ -1714,8 +1710,8 @@ ], containing_type=None, options=None, - serialized_start=12644, - serialized_end=12788, + serialized_start=12566, + serialized_end=12710, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERFREQ) @@ -1757,8 +1753,8 @@ ], containing_type=None, options=None, - serialized_start=12791, - serialized_end=12970, + serialized_start=12713, + serialized_end=12892, ) _sym_db.RegisterEnumDescriptor(_ASSETCLASS) @@ -1784,8 +1780,8 @@ ], containing_type=None, options=None, - serialized_start=12972, - serialized_end=13071, + serialized_start=12894, + serialized_end=12993, ) _sym_db.RegisterEnumDescriptor(_EXPIRATIONCYCLE) @@ -1910,7 +1906,6 @@ SubType_KL_Qurater = 15 SubType_KL_Year = 16 SubType_KL_3Min = 17 -SubType_OrderDetail = 18 TickerDirection_Unknown = 0 TickerDirection_Bid = 1 TickerDirection_Ask = 2 @@ -3415,44 +3410,6 @@ ) -_ORDERDETAIL = _descriptor.Descriptor( - name='OrderDetail', - full_name='Qot_Common.OrderDetail', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='orderCount', full_name='Qot_Common.OrderDetail.orderCount', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='orderVol', full_name='Qot_Common.OrderDetail.orderVol', index=1, - number=2, type=1, cpp_type=5, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3197, - serialized_end=3248, -) - - _SHAREHOLDINGCHANGE = _descriptor.Descriptor( name='ShareHoldingChange', full_name='Qot_Common.ShareHoldingChange', @@ -3521,8 +3478,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3251, - serialized_end=3406, + serialized_start=3198, + serialized_end=3353, ) @@ -3559,8 +3516,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3408, - serialized_end=3478, + serialized_start=3355, + serialized_end=3425, ) @@ -3604,8 +3561,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3480, - serialized_end=3577, + serialized_start=3427, + serialized_end=3524, ) @@ -3649,8 +3606,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3579, - serialized_end=3660, + serialized_start=3526, + serialized_end=3607, ) @@ -3834,8 +3791,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3663, - serialized_end=4105, + serialized_start=3610, + serialized_end=4052, ) _BASICQOT.fields_by_name['security'].message_type = _SECURITY @@ -3872,7 +3829,6 @@ DESCRIPTOR.message_types_by_name['Ticker'] = _TICKER DESCRIPTOR.message_types_by_name['OrderBookDetail'] = _ORDERBOOKDETAIL DESCRIPTOR.message_types_by_name['OrderBook'] = _ORDERBOOK -DESCRIPTOR.message_types_by_name['OrderDetail'] = _ORDERDETAIL DESCRIPTOR.message_types_by_name['ShareHoldingChange'] = _SHAREHOLDINGCHANGE DESCRIPTOR.message_types_by_name['SubInfo'] = _SUBINFO DESCRIPTOR.message_types_by_name['ConnSubInfo'] = _CONNSUBINFO @@ -4030,13 +3986,6 @@ )) _sym_db.RegisterMessage(OrderBook) -OrderDetail = _reflection.GeneratedProtocolMessageType('OrderDetail', (_message.Message,), dict( - DESCRIPTOR = _ORDERDETAIL, - __module__ = 'Qot_Common_pb2' - # @@protoc_insertion_point(class_scope:Qot_Common.OrderDetail) - )) -_sym_db.RegisterMessage(OrderDetail) - ShareHoldingChange = _reflection.GeneratedProtocolMessageType('ShareHoldingChange', (_message.Message,), dict( DESCRIPTOR = _SHAREHOLDINGCHANGE, __module__ = 'Qot_Common_pb2' diff --git a/futu/common/pb/Qot_GetOrderDetail.proto b/futu/common/pb/Qot_GetOrderDetail.proto deleted file mode 100644 index 4d1b136..0000000 --- a/futu/common/pb/Qot_GetOrderDetail.proto +++ /dev/null @@ -1,32 +0,0 @@ -syntax = "proto2"; -package Qot_GetOrderDetail; -option java_package = "com.futu.openapi.pb"; -option go_package = "github.com/futuopen/ftapi4go/pb/qotgetorderdetail"; - -import "Common.proto"; -import "Qot_Common.proto"; - -message C2S -{ - required Qot_Common.Security security = 1; //股票 -} - -message S2C -{ - required Qot_Common.Security security = 1; //股票 - required Qot_Common.OrderDetail orderDetailAsk = 2; //卖盘 - required Qot_Common.OrderDetail orderDetailBid = 3; //买盘 -} - -message Request -{ - required C2S c2s = 1; -} - -message Response -{ - required int32 retType = 1 [default = -400]; //RetType,返回结果 - optional string retMsg = 2; - optional int32 errCode = 3; - optional S2C s2c = 4; -} diff --git a/futu/common/pb/Qot_GetOrderDetail_pb2.py b/futu/common/pb/Qot_GetOrderDetail_pb2.py deleted file mode 100644 index 9a748a8..0000000 --- a/futu/common/pb/Qot_GetOrderDetail_pb2.py +++ /dev/null @@ -1,232 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: Qot_GetOrderDetail.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import Common_pb2 as Common__pb2 -import Qot_Common_pb2 as Qot__Common__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='Qot_GetOrderDetail.proto', - package='Qot_GetOrderDetail', - syntax='proto2', - serialized_pb=_b('\n\x18Qot_GetOrderDetail.proto\x12\x12Qot_GetOrderDetail\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"-\n\x03\x43\x32S\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\"\x8f\x01\n\x03S2C\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12/\n\x0eorderDetailAsk\x18\x02 \x02(\x0b\x32\x17.Qot_Common.OrderDetail\x12/\n\x0eorderDetailBid\x18\x03 \x02(\x0b\x32\x17.Qot_Common.OrderDetail\"/\n\x07Request\x12$\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x17.Qot_GetOrderDetail.C2S\"h\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12$\n\x03s2c\x18\x04 \x01(\x0b\x32\x17.Qot_GetOrderDetail.S2CBH\n\x13\x63om.futu.openapi.pbZ1github.com/futuopen/ftapi4go/pb/qotgetorderdetail') - , - dependencies=[Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) - - - - -_C2S = _descriptor.Descriptor( - name='C2S', - full_name='Qot_GetOrderDetail.C2S', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='security', full_name='Qot_GetOrderDetail.C2S.security', index=0, - number=1, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=80, - serialized_end=125, -) - - -_S2C = _descriptor.Descriptor( - name='S2C', - full_name='Qot_GetOrderDetail.S2C', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='security', full_name='Qot_GetOrderDetail.S2C.security', index=0, - number=1, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='orderDetailAsk', full_name='Qot_GetOrderDetail.S2C.orderDetailAsk', index=1, - number=2, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='orderDetailBid', full_name='Qot_GetOrderDetail.S2C.orderDetailBid', index=2, - number=3, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=128, - serialized_end=271, -) - - -_REQUEST = _descriptor.Descriptor( - name='Request', - full_name='Qot_GetOrderDetail.Request', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='c2s', full_name='Qot_GetOrderDetail.Request.c2s', index=0, - number=1, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=273, - serialized_end=320, -) - - -_RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='Qot_GetOrderDetail.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='retType', full_name='Qot_GetOrderDetail.Response.retType', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=True, default_value=-400, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='retMsg', full_name='Qot_GetOrderDetail.Response.retMsg', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='errCode', full_name='Qot_GetOrderDetail.Response.errCode', index=2, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='s2c', full_name='Qot_GetOrderDetail.Response.s2c', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=322, - serialized_end=426, -) - -_C2S.fields_by_name['security'].message_type = Qot__Common__pb2._SECURITY -_S2C.fields_by_name['security'].message_type = Qot__Common__pb2._SECURITY -_S2C.fields_by_name['orderDetailAsk'].message_type = Qot__Common__pb2._ORDERDETAIL -_S2C.fields_by_name['orderDetailBid'].message_type = Qot__Common__pb2._ORDERDETAIL -_REQUEST.fields_by_name['c2s'].message_type = _C2S -_RESPONSE.fields_by_name['s2c'].message_type = _S2C -DESCRIPTOR.message_types_by_name['C2S'] = _C2S -DESCRIPTOR.message_types_by_name['S2C'] = _S2C -DESCRIPTOR.message_types_by_name['Request'] = _REQUEST -DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -C2S = _reflection.GeneratedProtocolMessageType('C2S', (_message.Message,), dict( - DESCRIPTOR = _C2S, - __module__ = 'Qot_GetOrderDetail_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetOrderDetail.C2S) - )) -_sym_db.RegisterMessage(C2S) - -S2C = _reflection.GeneratedProtocolMessageType('S2C', (_message.Message,), dict( - DESCRIPTOR = _S2C, - __module__ = 'Qot_GetOrderDetail_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetOrderDetail.S2C) - )) -_sym_db.RegisterMessage(S2C) - -Request = _reflection.GeneratedProtocolMessageType('Request', (_message.Message,), dict( - DESCRIPTOR = _REQUEST, - __module__ = 'Qot_GetOrderDetail_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetOrderDetail.Request) - )) -_sym_db.RegisterMessage(Request) - -Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), dict( - DESCRIPTOR = _RESPONSE, - __module__ = 'Qot_GetOrderDetail_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetOrderDetail.Response) - )) -_sym_db.RegisterMessage(Response) - - -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023com.futu.openapi.pbZ1github.com/futuopen/ftapi4go/pb/qotgetorderdetail')) -# @@protoc_insertion_point(module_scope) diff --git a/futu/common/pb/Qot_GetTradeDate.proto b/futu/common/pb/Qot_GetTradeDate.proto deleted file mode 100644 index d0c5365..0000000 --- a/futu/common/pb/Qot_GetTradeDate.proto +++ /dev/null @@ -1,40 +0,0 @@ -syntax = "proto2"; -package Qot_GetTradeDate; -option java_package = "com.futu.openapi.pb"; -option go_package = "github.com/futuopen/ftapi4go/pb/qotgettradedate"; - -import "Common.proto"; -import "Qot_Common.proto"; - -message C2S -{ - required int32 market = 1; //Qot_Common.QotMarket,股票市场 - required string beginTime = 2; //开始时间字符串 - required string endTime = 3; //结束时间字符串 -} - -message TradeDate -{ - required string time = 1; //时间字符串 - optional double timestamp = 2; //时间戳 - optional int32 tradeDateType = 3; //Qot_Common.TradeDateType,交易时间类型 -} - -message S2C -{ - repeated TradeDate tradeDateList = 1; //交易日,注意该交易日是通过自然日去除周末以及节假日得到,不包括临时休市数据。 -} - -message Request -{ - required C2S c2s = 1; -} - -message Response -{ - required int32 retType = 1 [default = -400]; //RetType,返回结果 - optional string retMsg = 2; - optional int32 errCode = 3; - - optional S2C s2c = 4; -} diff --git a/futu/common/pb/Qot_GetTradeDate_pb2.py b/futu/common/pb/Qot_GetTradeDate_pb2.py deleted file mode 100644 index 377fac4..0000000 --- a/futu/common/pb/Qot_GetTradeDate_pb2.py +++ /dev/null @@ -1,282 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: Qot_GetTradeDate.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import Common_pb2 as Common__pb2 -import Qot_Common_pb2 as Qot__Common__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='Qot_GetTradeDate.proto', - package='Qot_GetTradeDate', - syntax='proto2', - serialized_pb=_b('\n\x16Qot_GetTradeDate.proto\x12\x10Qot_GetTradeDate\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"9\n\x03\x43\x32S\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x11\n\tbeginTime\x18\x02 \x02(\t\x12\x0f\n\x07\x65ndTime\x18\x03 \x02(\t\"C\n\tTradeDate\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x01\x12\x15\n\rtradeDateType\x18\x03 \x01(\x05\"9\n\x03S2C\x12\x32\n\rtradeDateList\x18\x01 \x03(\x0b\x32\x1b.Qot_GetTradeDate.TradeDate\"-\n\x07Request\x12\"\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x15.Qot_GetTradeDate.C2S\"f\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12\"\n\x03s2c\x18\x04 \x01(\x0b\x32\x15.Qot_GetTradeDate.S2CBF\n\x13\x63om.futu.openapi.pbZ/github.com/futuopen/ftapi4go/pb/qotgettradedate') - , - dependencies=[Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) - - - - -_C2S = _descriptor.Descriptor( - name='C2S', - full_name='Qot_GetTradeDate.C2S', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='market', full_name='Qot_GetTradeDate.C2S.market', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='beginTime', full_name='Qot_GetTradeDate.C2S.beginTime', index=1, - number=2, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='endTime', full_name='Qot_GetTradeDate.C2S.endTime', index=2, - number=3, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=76, - serialized_end=133, -) - - -_TRADEDATE = _descriptor.Descriptor( - name='TradeDate', - full_name='Qot_GetTradeDate.TradeDate', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='time', full_name='Qot_GetTradeDate.TradeDate.time', index=0, - number=1, type=9, cpp_type=9, label=2, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='timestamp', full_name='Qot_GetTradeDate.TradeDate.timestamp', index=1, - number=2, type=1, cpp_type=5, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='tradeDateType', full_name='Qot_GetTradeDate.TradeDate.tradeDateType', index=2, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=135, - serialized_end=202, -) - - -_S2C = _descriptor.Descriptor( - name='S2C', - full_name='Qot_GetTradeDate.S2C', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='tradeDateList', full_name='Qot_GetTradeDate.S2C.tradeDateList', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=204, - serialized_end=261, -) - - -_REQUEST = _descriptor.Descriptor( - name='Request', - full_name='Qot_GetTradeDate.Request', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='c2s', full_name='Qot_GetTradeDate.Request.c2s', index=0, - number=1, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=263, - serialized_end=308, -) - - -_RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='Qot_GetTradeDate.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='retType', full_name='Qot_GetTradeDate.Response.retType', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=True, default_value=-400, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='retMsg', full_name='Qot_GetTradeDate.Response.retMsg', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='errCode', full_name='Qot_GetTradeDate.Response.errCode', index=2, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='s2c', full_name='Qot_GetTradeDate.Response.s2c', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=310, - serialized_end=412, -) - -_S2C.fields_by_name['tradeDateList'].message_type = _TRADEDATE -_REQUEST.fields_by_name['c2s'].message_type = _C2S -_RESPONSE.fields_by_name['s2c'].message_type = _S2C -DESCRIPTOR.message_types_by_name['C2S'] = _C2S -DESCRIPTOR.message_types_by_name['TradeDate'] = _TRADEDATE -DESCRIPTOR.message_types_by_name['S2C'] = _S2C -DESCRIPTOR.message_types_by_name['Request'] = _REQUEST -DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -C2S = _reflection.GeneratedProtocolMessageType('C2S', (_message.Message,), dict( - DESCRIPTOR = _C2S, - __module__ = 'Qot_GetTradeDate_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetTradeDate.C2S) - )) -_sym_db.RegisterMessage(C2S) - -TradeDate = _reflection.GeneratedProtocolMessageType('TradeDate', (_message.Message,), dict( - DESCRIPTOR = _TRADEDATE, - __module__ = 'Qot_GetTradeDate_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetTradeDate.TradeDate) - )) -_sym_db.RegisterMessage(TradeDate) - -S2C = _reflection.GeneratedProtocolMessageType('S2C', (_message.Message,), dict( - DESCRIPTOR = _S2C, - __module__ = 'Qot_GetTradeDate_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetTradeDate.S2C) - )) -_sym_db.RegisterMessage(S2C) - -Request = _reflection.GeneratedProtocolMessageType('Request', (_message.Message,), dict( - DESCRIPTOR = _REQUEST, - __module__ = 'Qot_GetTradeDate_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetTradeDate.Request) - )) -_sym_db.RegisterMessage(Request) - -Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), dict( - DESCRIPTOR = _RESPONSE, - __module__ = 'Qot_GetTradeDate_pb2' - # @@protoc_insertion_point(class_scope:Qot_GetTradeDate.Response) - )) -_sym_db.RegisterMessage(Response) - - -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023com.futu.openapi.pbZ/github.com/futuopen/ftapi4go/pb/qotgettradedate')) -# @@protoc_insertion_point(module_scope) diff --git a/futu/common/pb/Qot_UpdateOrderDetail.proto b/futu/common/pb/Qot_UpdateOrderDetail.proto deleted file mode 100644 index a995224..0000000 --- a/futu/common/pb/Qot_UpdateOrderDetail.proto +++ /dev/null @@ -1,23 +0,0 @@ -syntax = "proto2"; -package Qot_UpdateOrderDetail; -option java_package = "com.futu.openapi.pb"; -option go_package = "github.com/futuopen/ftapi4go/pb/qotupdateorderdetail"; - -import "Common.proto"; -import "Qot_Common.proto"; - -message S2C -{ - required Qot_Common.Security security = 1; //股票 - required Qot_Common.OrderDetail orderDetailAsk = 2; //卖盘 - required Qot_Common.OrderDetail orderDetailBid = 3; //买盘 -} - -message Response -{ - required int32 retType = 1 [default = -400]; //RetType,返回结果 - optional string retMsg = 2; - optional int32 errCode = 3; - - optional S2C s2c = 4; -} diff --git a/futu/common/pb/Qot_UpdateOrderDetail_pb2.py b/futu/common/pb/Qot_UpdateOrderDetail_pb2.py deleted file mode 100644 index 6927af8..0000000 --- a/futu/common/pb/Qot_UpdateOrderDetail_pb2.py +++ /dev/null @@ -1,152 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: Qot_UpdateOrderDetail.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import Common_pb2 as Common__pb2 -import Qot_Common_pb2 as Qot__Common__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='Qot_UpdateOrderDetail.proto', - package='Qot_UpdateOrderDetail', - syntax='proto2', - serialized_pb=_b('\n\x1bQot_UpdateOrderDetail.proto\x12\x15Qot_UpdateOrderDetail\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"\x8f\x01\n\x03S2C\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12/\n\x0eorderDetailAsk\x18\x02 \x02(\x0b\x32\x17.Qot_Common.OrderDetail\x12/\n\x0eorderDetailBid\x18\x03 \x02(\x0b\x32\x17.Qot_Common.OrderDetail\"k\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12\'\n\x03s2c\x18\x04 \x01(\x0b\x32\x1a.Qot_UpdateOrderDetail.S2CBK\n\x13\x63om.futu.openapi.pbZ4github.com/futuopen/ftapi4go/pb/qotupdateorderdetail') - , - dependencies=[Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) - - - - -_S2C = _descriptor.Descriptor( - name='S2C', - full_name='Qot_UpdateOrderDetail.S2C', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='security', full_name='Qot_UpdateOrderDetail.S2C.security', index=0, - number=1, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='orderDetailAsk', full_name='Qot_UpdateOrderDetail.S2C.orderDetailAsk', index=1, - number=2, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='orderDetailBid', full_name='Qot_UpdateOrderDetail.S2C.orderDetailBid', index=2, - number=3, type=11, cpp_type=10, label=2, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=87, - serialized_end=230, -) - - -_RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='Qot_UpdateOrderDetail.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='retType', full_name='Qot_UpdateOrderDetail.Response.retType', index=0, - number=1, type=5, cpp_type=1, label=2, - has_default_value=True, default_value=-400, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='retMsg', full_name='Qot_UpdateOrderDetail.Response.retMsg', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='errCode', full_name='Qot_UpdateOrderDetail.Response.errCode', index=2, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='s2c', full_name='Qot_UpdateOrderDetail.Response.s2c', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto2', - extension_ranges=[], - oneofs=[ - ], - serialized_start=232, - serialized_end=339, -) - -_S2C.fields_by_name['security'].message_type = Qot__Common__pb2._SECURITY -_S2C.fields_by_name['orderDetailAsk'].message_type = Qot__Common__pb2._ORDERDETAIL -_S2C.fields_by_name['orderDetailBid'].message_type = Qot__Common__pb2._ORDERDETAIL -_RESPONSE.fields_by_name['s2c'].message_type = _S2C -DESCRIPTOR.message_types_by_name['S2C'] = _S2C -DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -S2C = _reflection.GeneratedProtocolMessageType('S2C', (_message.Message,), dict( - DESCRIPTOR = _S2C, - __module__ = 'Qot_UpdateOrderDetail_pb2' - # @@protoc_insertion_point(class_scope:Qot_UpdateOrderDetail.S2C) - )) -_sym_db.RegisterMessage(S2C) - -Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), dict( - DESCRIPTOR = _RESPONSE, - __module__ = 'Qot_UpdateOrderDetail_pb2' - # @@protoc_insertion_point(class_scope:Qot_UpdateOrderDetail.Response) - )) -_sym_db.RegisterMessage(Response) - - -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023com.futu.openapi.pbZ4github.com/futuopen/ftapi4go/pb/qotupdateorderdetail')) -# @@protoc_insertion_point(module_scope) diff --git a/futu/common/utils.py b/futu/common/utils.py index 57346fc..9318057 100644 --- a/futu/common/utils.py +++ b/futu/common/utils.py @@ -408,11 +408,6 @@ def __init__(self): from futu.common.pb.Qot_UpdatePriceReminder_pb2 import Response ProtobufMap.created_protobuf_map[ProtoId.Qot_UpdatePriceReminder] = Response() - - """ Qot_GetTradeDate = 3200 # 获取市场交易日 """ - from futu.common.pb.Qot_GetTradeDate_pb2 import Response - ProtobufMap.created_protobuf_map[ProtoId.Qot_GetTradeDate] = Response() - """ Qot_GetSuspend = 3201 # 获取股票停牌信息 """ from futu.common.pb.Qot_GetSuspend_pb2 import Response ProtobufMap.created_protobuf_map[ProtoId.Qot_GetSuspend] = Response() @@ -455,14 +450,6 @@ def __init__(self): from futu.common.pb.Qot_GetOptionChain_pb2 import Response ProtobufMap.created_protobuf_map[ProtoId.Qot_GetOptionChain] = Response() - """ Qot_GetOrderDetail = 3016 获取委托明细 """ - from futu.common.pb.Qot_GetOrderDetail_pb2 import Response - ProtobufMap.created_protobuf_map[ProtoId.Qot_GetOrderDetail] = Response() - - """ Qot_UpdateOrderDetail = 3017 推送委托明细 """ - from futu.common.pb.Qot_UpdateOrderDetail_pb2 import Response - ProtobufMap.created_protobuf_map[ProtoId.Qot_UpdateOrderDetail] = Response() - """ Qot_GetWarrantData = 3210 获取窝轮 """ from futu.common.pb.Qot_GetWarrant_pb2 import Response as GetWarrantPBResponse ProtobufMap.created_protobuf_map[ProtoId.Qot_GetWarrant] = GetWarrantPBResponse() diff --git a/futu/quote/open_quote_context.py b/futu/quote/open_quote_context.py index 06a1627..e5ccc84 100644 --- a/futu/quote/open_quote_context.py +++ b/futu/quote/open_quote_context.py @@ -156,47 +156,6 @@ def on_api_socket_reconnected(self): self._wait_reconnect() return ret_code, ret_msg - def get_trading_days(self, market, start=None, end=None): - """获取交易日 - :param market: 市场类型,Market_ - :param start: 起始日期。例如'2018-01-01'。 - :param end: 结束日期。例如'2018-01-01'。 - start和end的组合如下: - ========== ========== ======================================== - start类型 end类型 说明 - ========== ========== ======================================== - str str start和end分别为指定的日期 - None str start为end往前365天 - str None end为start往后365天 - None None end为当前日期,start为end往前365天 - ========== ========== ======================================== - :return: 成功时返回(RET_OK, data),data是[{'trade_date_type': 0, 'time': '2018-01-05'}]数组;失败时返回(RET_ERROR, data),其中data是错误描述字符串 - """ - if market is None or is_str(market) is False: - error_str = ERROR_STR_PREFIX + "the type of market param is wrong" - return RET_ERROR, error_str - - ret, msg, start, end = normalize_start_end_date(start, end, 365) - if ret != RET_OK: - return ret, msg - - query_processor = self._get_sync_query_processor( - TradeDayQuery.pack_req, TradeDayQuery.unpack_rsp) - - # the keys of kargs should be corresponding to the actual function arguments - kargs = { - 'market': market, - 'start_date': start, - 'end_date': end, - 'conn_id': self.get_sync_conn_id() - } - ret_code, msg, trade_day_list = query_processor(**kargs) - - if ret_code != RET_OK: - return RET_ERROR, msg - - return RET_OK, trade_day_list - def request_trading_days(self, market, start=None, end=None): """获取交易日 :param market: 市场类型,TradeDateMarket_ @@ -1811,44 +1770,6 @@ def get_option_chain(self, code, index_option_type=IndexOptionType.NORMAL, start return RET_OK, option_chain - def get_order_detail(self, code): - return RET_ERROR, "this service has been cancelled" - - """ - 查询A股Level 2权限下提供的委托明细 - - :param code: 股票代码,例如:'HK.02318' - :return: (ret, data) - - ret == RET_OK data为1个dict,包含以下数据 - - ret != RET_OK data为错误字符串 - - {‘code’: 股票代码 - ‘Ask’:[ order_num, [order_volume1, order_volume2] ] - ‘Bid’: [ order_num, [order_volume1, order_volume2] ] - } - - 'Ask':卖盘, 'Bid'买盘。order_num指委托订单数量,order_volume是每笔委托的委托量,当前最多返回前50笔委托的委托数量。即order_num有可能多于后面的order_volume - """ - - if code is None or is_str(code) is False: - error_str = ERROR_STR_PREFIX + "the type of code param is wrong" - return RET_ERROR, error_str - - query_processor = self._get_sync_query_processor( - OrderDetail.pack_req, OrderDetail.unpack_rsp) - kargs = { - "code": code, - "conn_id": self.get_sync_conn_id() - } - - ret_code, msg, order_detail = query_processor(**kargs) - if ret_code == RET_ERROR: - return ret_code, msg - - return RET_OK, order_detail - def get_warrant(self, stock_owner='', req=None): """ :param stock_owner:所属正股 diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index 2d84fd1..fd41ac6 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -198,75 +198,6 @@ def unpack_rsp(cls, rsp_pb): return RET_ERROR, "rsp_pb error", None return RET_OK, "", res - - -class TradeDayQuery: - """ - Query Conversion for getting trading days. - """ - - def __init__(self): - pass - - @classmethod - def pack_req(cls, market, conn_id, start_date=None, end_date=None): - - # '''Parameter check''' - r, mkt = Market.to_number(market) - if not r: - error_str = ERROR_STR_PREFIX + " market is %s, which is not valid. (%s)" \ - % (market, Market.get_all_keys()) - return RET_ERROR, error_str, None - - if start_date is None: - today = datetime.today() - start = today - timedelta(days=365) - - start_date = start.strftime("%Y-%m-%d") - else: - ret, msg = normalize_date_format(start_date) - if ret != RET_OK: - return ret, msg, None - start_date = msg - - if end_date is None: - today = datetime.today() - end_date = today.strftime("%Y-%m-%d") - else: - ret, msg = normalize_date_format(end_date) - if ret != RET_OK: - return ret, msg, None - end_date = msg - - # pack to json - from futu.common.pb.Qot_GetTradeDate_pb2 import Request - req = Request() - req.c2s.market = mkt - req.c2s.beginTime = start_date - req.c2s.endTime = end_date - - return pack_pb_req(req, ProtoId.Qot_GetTradeDate, conn_id) - - @classmethod - def unpack_rsp(cls, rsp_pb): - - # response check and unpack response json to objects - ret_type = rsp_pb.retType - ret_msg = rsp_pb.retMsg - - if ret_type != RET_OK: - return RET_ERROR, ret_msg, None - - raw_trading_day_list = rsp_pb.s2c.tradeDateList - trading_day_list = list() - - for x in raw_trading_day_list: - if x.time is not None and len(x.time) > 0: - trading_day_list.append( - {"time": x.time, "trade_date_type": TradeDateType.to_string2(x.tradeDateType) if x.HasField('tradeDateType') else 'N/A'})# 初始化枚举类型 - - return RET_OK, "", trading_day_list - class RequestTradeDayQuery: """ Query Conversion for getting trading days. @@ -1979,62 +1910,6 @@ def unpack_rsp(cls, rsp_pb): return RET_OK, "", data_list - -class OrderDetail: - """ - Query Conversion for getting order detail information. - """ - - def __init__(self): - pass - - @classmethod - def pack_req(cls, code, conn_id): - - ret, content = split_stock_str(code) - if ret == RET_ERROR: - error_str = content - return RET_ERROR, error_str, None - - market_code, stock_code = content - - from futu.common.pb.Qot_GetOrderDetail_pb2 import Request - req = Request() - req.c2s.security.market = market_code - req.c2s.security.code = stock_code - - return pack_pb_req(req, ProtoId.Qot_GetOrderDetail, conn_id) - - @classmethod - def unpack_rsp(cls, rsp_pb): - if rsp_pb.retType != RET_OK: - return RET_ERROR, rsp_pb.retMsg, None - - code = merge_qot_mkt_stock_str( - int(rsp_pb.s2c.security.market), rsp_pb.s2c.security.code) - ask = [0, []] - bid = [0, []] - svr_recv_time_bid = rsp_pb.s2c.svrRecvTimeBid - svr_recv_time_ask = rsp_pb.s2c.svrRecvTimeAsk - - ask[0] = rsp_pb.s2c.orderDetailAsk.orderCount - for vol in rsp_pb.s2c.orderDetailAsk.orderVol: - ask[1].append(vol) - - bid[0] = rsp_pb.s2c.orderDetailBid.orderCount - for vol in rsp_pb.s2c.orderDetailBid.orderVol: - bid[1].append(vol) - - data = { - 'code': code, - 'Ask': ask, - 'Bid': bid, - 'svr_recv_time_ask': svr_recv_time_ask, - 'svr_recv_time_bid': svr_recv_time_bid - } - return RET_OK, "", data - - class QuoteWarrant: """ 拉取窝轮 diff --git a/futu/quote/quote_response_handler.py b/futu/quote/quote_response_handler.py index 5d79b94..c193f33 100644 --- a/futu/quote/quote_response_handler.py +++ b/futu/quote/quote_response_handler.py @@ -334,19 +334,6 @@ def on_recv_rsp(self, rsp_pb): return ret_code, content -# -# class OrderDetailHandlerBase(RspHandlerBase): -# def __init__(self): -# super(OrderDetailHandlerBase, self).__init__() -# -# def on_recv_rsp(self, rsp_pb): -# """receive response callback function""" -# ret_code, msg, data = OrderDetail.unpack_rsp(rsp_pb) -# -# if ret_code != RET_OK: -# return ret_code, msg -# else: -# return ret_code, data class PriceReminderHandlerBase(RspHandlerBase): """ diff --git a/futu/trade/open_trade_context.py b/futu/trade/open_trade_context.py index bdc0dde..0533ee3 100644 --- a/futu/trade/open_trade_context.py +++ b/futu/trade/open_trade_context.py @@ -358,8 +358,8 @@ def position_list_query(self, code='', pl_ratio_min=None, "code", "stock_name", "qty", "can_sell_qty", "cost_price", "cost_price_valid", "market_val", "nominal_price", "pl_ratio", "pl_ratio_valid", "pl_val", "pl_val_valid", "today_buy_qty", - "today_buy_val", "today_pl_val", "today_sell_qty", "today_sell_val", - "position_side", "unrealized_pl", "realized_pl" + "today_buy_val", "today_pl_val", "today_trd_val", "today_sell_qty", + "today_sell_val", "position_side", "unrealized_pl", "realized_pl" ] position_list_table = pd.DataFrame(position_list, columns=col_list) diff --git a/futu/trade/trade_query.py b/futu/trade/trade_query.py index c674618..1985361 100644 --- a/futu/trade/trade_query.py +++ b/futu/trade/trade_query.py @@ -219,6 +219,7 @@ def unpack_rsp(cls, rsp_pb): "today_buy_qty": position.td_buyQty if position.HasField('td_buyQty') else NoneDataValue, "today_buy_val": position.td_buyVal if position.HasField('td_buyVal') else NoneDataValue, "today_pl_val": position.td_plVal if position.HasField('td_plVal') else NoneDataValue, + "today_trd_val": position.td_plVal if position.HasField('td_trdVal') else NoneDataValue, "today_sell_qty": position.td_sellQty if position.HasField('td_sellQty') else NoneDataValue, "today_sell_val": position.td_sellVal if position.HasField('td_sellVal') else NoneDataValue, "position_side": PositionSide.to_string2(position.positionSide) if position.HasField('positionSide') else 'N/A',# 初始化枚举类型 From 80f322fca8409f4147e31c2818b50e9a4c5a0044 Mon Sep 17 00:00:00 2001 From: byblehua Date: Thu, 15 Jul 2021 20:28:23 +0800 Subject: [PATCH 35/36] =?UTF-8?q?=E5=90=8C=E6=AD=A55.6.1808?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/common/constant.py | 8 +- futu/common/ft_logger.py | 2 +- futu/common/network_manager.py | 10 +- futu/common/pb/Qot_Common.proto | 18 ++-- futu/common/pb/Qot_Common_pb2.py | 102 +++++++++++---------- futu/common/pb/Qot_RequestTradeDate.proto | 2 + futu/common/pb/Qot_RequestTradeDate_pb2.py | 28 ++++-- futu/examples/simple_filter_demo.py | 79 ++++++++++------ futu/quote/open_quote_context.py | 36 +++++--- futu/quote/quote_query.py | 20 +++- 10 files changed, 192 insertions(+), 113 deletions(-) diff --git a/futu/common/constant.py b/futu/common/constant.py index 8ff0169..1542dc6 100644 --- a/futu/common/constant.py +++ b/futu/common/constant.py @@ -24,7 +24,7 @@ class ProtoId(object): InitConnect = 1001 # 初始化连接 GetGlobalState = 1002 # 获取全局状态 Notify = 1003 # 通知推送 - KeepAlive = 1004 # 通知推送 + KeepAlive = 1004 # 心跳保活 GetUserInfo = 1005 # 获取用户信息 Verification = 1006 # 请求或输入验证码 GetDelayStatistics = 1007 # 获取延迟统计 @@ -2291,6 +2291,8 @@ class TradeDateMarket(FtEnum): CN = 'CN' # A股市场 NT = 'NT' # 深(沪)股通 ST = 'ST' # 港股通(深、沪) + JP_FUTURE = 'JP_FUTURE' # 日本期货 + SG_FUTURE = 'SG_FUTURE' # 新加坡期货 def load_dic(self): return { @@ -2299,7 +2301,9 @@ def load_dic(self): self.US: Qot_Common_pb2.TradeDateMarket_US, self.CN: Qot_Common_pb2.TradeDateMarket_CN, self.NT: Qot_Common_pb2.TradeDateMarket_NT, - self.ST: Qot_Common_pb2.TradeDateMarket_ST + self.ST: Qot_Common_pb2.TradeDateMarket_ST, + self.JP_FUTURE: Qot_Common_pb2.TradeDateMarket_JP_Future, + self.SG_FUTURE: Qot_Common_pb2.TradeDateMarket_SG_Future, } class SetPriceReminderOp(FtEnum): diff --git a/futu/common/ft_logger.py b/futu/common/ft_logger.py index 37de0f7..6c41a92 100644 --- a/futu/common/ft_logger.py +++ b/futu/common/ft_logger.py @@ -88,7 +88,7 @@ def __init__(self, **args): self.console_logger.setLevel(self._console_level) self.console_logger.propagate = False - self.formatter = logging.Formatter('%(asctime)s %(message)s') + self.formatter = logging.Formatter('%(asctime)s | %(process)d | %(message)s') if not hasattr(self, 'fileHandler'): file_name = 'py_' + datetime.now().strftime('%Y_%m_%d') + '.log' diff --git a/futu/common/network_manager.py b/futu/common/network_manager.py index fc99a32..3406afe 100644 --- a/futu/common/network_manager.py +++ b/futu/common/network_manager.py @@ -122,6 +122,7 @@ def __init__(self): self._next_conn_id = 1 self._lock = threading.RLock() self._mgr_lock = threading.Lock() # Used to control start and stop + self._pending_read_conns = set() self._create_all() def _close_all(self): @@ -178,8 +179,8 @@ def work(): return RET_OK, '', conn_id def poll(self): - now = datetime.now() events = self._selector.select(0.02) + now = datetime.now() for key, evt_mask in events: if key.fileobj == self._r_sock: self._r_sock.recv(1024) @@ -195,8 +196,14 @@ def poll(self): self._on_write(conn) if evt_mask & selectors.EVENT_READ != 0: + self._pending_read_conns.discard(conn) self._on_read(conn) + for conn in self._pending_read_conns: + self._on_read(conn) + + self._pending_read_conns.clear() + activate_elapsed_time = now - self._last_activate_time check_req_elapsed_time = now - self._last_check_req_time is_activate = activate_elapsed_time.total_seconds() >= 0.05 @@ -484,6 +491,7 @@ def _on_read(self, conn): packet_count += 1 self._on_packet(conn, head_dict, Err.Ok.code, '', rsp_body) if packet_count >= 10: + self._pending_read_conns.add(conn) self._w_sock.send(b'1') break #收10个包强制跳出循环,避免长时间解包导致无法发送心跳 diff --git a/futu/common/pb/Qot_Common.proto b/futu/common/pb/Qot_Common.proto index 0cd842f..c5f0ef2 100644 --- a/futu/common/pb/Qot_Common.proto +++ b/futu/common/pb/Qot_Common.proto @@ -75,7 +75,7 @@ enum OptionAreaType enum QotMarketState { - QotMarketState_None = 0; // 无交易,美股未开盘 + QotMarketState_None = 0; // 无交易 QotMarketState_Auction = 1; // 竞价 QotMarketState_WaitingOpen = 2; // 早盘前等待开盘 QotMarketState_Morning = 3; // 早盘 @@ -85,7 +85,7 @@ enum QotMarketState QotMarketState_PreMarketBegin = 8; // 盘前 QotMarketState_PreMarketEnd = 9; // 盘前结束 QotMarketState_AfterHoursBegin = 10; // 盘后 - QotMarketState_AfterHoursEnd = 11; // 盘后结束 + QotMarketState_AfterHoursEnd = 11; // 盘后结束 QotMarketState_NightOpen = 13; // 夜市开盘 QotMarketState_NightEnd = 14; // 夜市收盘 QotMarketState_FutureDayOpen = 15; // 期货日市开盘 @@ -93,18 +93,18 @@ enum QotMarketState QotMarketState_FutureDayClose = 17; // 期货日市收盘 QotMarketState_FutureDayWaitForOpen = 18; // 期货日市等待开盘 QotMarketState_HkCas = 19; // 盘后竞价,港股市场增加CAS机制对应的市场状态 - QotMarketState_FutureNightWait = 20; // 夜市等待开盘 - QotMarketState_FutureAfternoon = 21; // 期货下午开盘 + QotMarketState_FutureNightWait = 20; // 夜市等待开盘(已废弃) + QotMarketState_FutureAfternoon = 21; // 期货下午开盘(已废弃) //美国期货新增加状态 - QotMarketState_FutureSwitchDate = 22; // 期货切交易日 + QotMarketState_FutureSwitchDate = 22; // 期货切交易日(已废弃) QotMarketState_FutureOpen = 23; // 期货开盘 QotMarketState_FutureBreak = 24; // 期货中盘休息 QotMarketState_FutureBreakOver = 25; // 期货休息后开盘 QotMarketState_FutureClose = 26; // 期货收盘 //科创板新增状态 - QotMarketState_StibAfterHoursWait = 27; // 科创板的盘后撮合时段 - QotMarketState_StibAfterHoursBegin = 28; // 科创板的盘后交易开始 - QotMarketState_StibAfterHoursEnd = 29; // 科创板的盘后交易结束 + QotMarketState_StibAfterHoursWait = 27; // 科创板的盘后撮合时段(已废弃) + QotMarketState_StibAfterHoursBegin = 28; // 科创板的盘后交易开始(已废弃) + QotMarketState_StibAfterHoursEnd = 29; // 科创板的盘后交易结束(已废弃) } //交易日查询市场 @@ -116,6 +116,8 @@ enum TradeDateMarket TradeDateMarket_CN = 3; //A股市场 TradeDateMarket_NT = 4; //深(沪)股通 TradeDateMarket_ST = 5; //港股通(深、沪) + TradeDateMarket_JP_Future = 6; //日本期货 + TradeDateMarket_SG_Future = 7; //新加坡期货 } //交易日类型 diff --git a/futu/common/pb/Qot_Common_pb2.py b/futu/common/pb/Qot_Common_pb2.py index e016de4..08dc14e 100644 --- a/futu/common/pb/Qot_Common_pb2.py +++ b/futu/common/pb/Qot_Common_pb2.py @@ -21,7 +21,7 @@ name='Qot_Common.proto', package='Qot_Common', syntax='proto2', - serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xa6\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\xea\x02\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xce\x04\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r\x12&\n\"PriceReminderType_3MinChangeRateUp\x10\x0e\x12(\n$PriceReminderType_3MinChangeRateDown\x10\x0f*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06*c\n\x0f\x45xpirationCycle\x12\x1b\n\x17\x45xpirationCycle_Unknown\x10\x00\x12\x18\n\x14\x45xpirationCycle_Week\x10\x01\x12\x19\n\x15\x45xpirationCycle_Month\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') + serialized_pb=_b('\n\x10Qot_Common.proto\x12\nQot_Common\x1a\x0c\x43ommon.proto\"(\n\x08Security\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x0c\n\x04\x63ode\x18\x02 \x02(\t\"\xf5\x01\n\x05KLine\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0f\n\x07isBlank\x18\x02 \x02(\x08\x12\x11\n\thighPrice\x18\x03 \x01(\x01\x12\x11\n\topenPrice\x18\x04 \x01(\x01\x12\x10\n\x08lowPrice\x18\x05 \x01(\x01\x12\x12\n\nclosePrice\x18\x06 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x07 \x01(\x01\x12\x0e\n\x06volume\x18\x08 \x01(\x03\x12\x10\n\x08turnover\x18\t \x01(\x01\x12\x14\n\x0cturnoverRate\x18\n \x01(\x01\x12\n\n\x02pe\x18\x0b \x01(\x01\x12\x12\n\nchangeRate\x18\x0c \x01(\x01\x12\x11\n\ttimestamp\x18\r \x01(\x01\"\xa2\x03\n\x14OptionBasicQotExData\x12\x13\n\x0bstrikePrice\x18\x01 \x02(\x01\x12\x14\n\x0c\x63ontractSize\x18\x02 \x02(\x05\x12\x19\n\x11\x63ontractSizeFloat\x18\x11 \x01(\x01\x12\x14\n\x0copenInterest\x18\x03 \x02(\x05\x12\x19\n\x11impliedVolatility\x18\x04 \x02(\x01\x12\x0f\n\x07premium\x18\x05 \x02(\x01\x12\r\n\x05\x64\x65lta\x18\x06 \x02(\x01\x12\r\n\x05gamma\x18\x07 \x02(\x01\x12\x0c\n\x04vega\x18\x08 \x02(\x01\x12\r\n\x05theta\x18\t \x02(\x01\x12\x0b\n\x03rho\x18\n \x02(\x01\x12\x17\n\x0fnetOpenInterest\x18\x0b \x01(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x0c \x01(\x05\x12\x1c\n\x14\x63ontractNominalValue\x18\r \x01(\x01\x12\x1a\n\x12ownerLotMultiplier\x18\x0e \x01(\x01\x12\x16\n\x0eoptionAreaType\x18\x0f \x01(\x05\x12\x1a\n\x12\x63ontractMultiplier\x18\x10 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x12 \x01(\x05\"\xa4\x01\n\x12PreAfterMarketData\x12\r\n\x05price\x18\x01 \x01(\x01\x12\x11\n\thighPrice\x18\x02 \x01(\x01\x12\x10\n\x08lowPrice\x18\x03 \x01(\x01\x12\x0e\n\x06volume\x18\x04 \x01(\x03\x12\x10\n\x08turnover\x18\x05 \x01(\x01\x12\x11\n\tchangeVal\x18\x06 \x01(\x01\x12\x12\n\nchangeRate\x18\x07 \x01(\x01\x12\x11\n\tamplitude\x18\x08 \x01(\x01\"u\n\x14\x46utureBasicQotExData\x12\x17\n\x0flastSettlePrice\x18\x01 \x02(\x01\x12\x10\n\x08position\x18\x02 \x02(\x05\x12\x16\n\x0epositionChange\x18\x03 \x02(\x05\x12\x1a\n\x12\x65xpiryDateDistance\x18\x04 \x01(\x05\"R\n\x15WarrantBasicQotExData\x12\r\n\x05\x64\x65lta\x18\x01 \x01(\x01\x12\x19\n\x11impliedVolatility\x18\x02 \x01(\x01\x12\x0f\n\x07premium\x18\x03 \x02(\x01\"\x98\x05\n\x08\x42\x61sicQot\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x13\n\x0bisSuspended\x18\x02 \x02(\x08\x12\x10\n\x08listTime\x18\x03 \x02(\t\x12\x13\n\x0bpriceSpread\x18\x04 \x02(\x01\x12\x12\n\nupdateTime\x18\x05 \x02(\t\x12\x11\n\thighPrice\x18\x06 \x02(\x01\x12\x11\n\topenPrice\x18\x07 \x02(\x01\x12\x10\n\x08lowPrice\x18\x08 \x02(\x01\x12\x10\n\x08\x63urPrice\x18\t \x02(\x01\x12\x16\n\x0elastClosePrice\x18\n \x02(\x01\x12\x0e\n\x06volume\x18\x0b \x02(\x03\x12\x10\n\x08turnover\x18\x0c \x02(\x01\x12\x14\n\x0cturnoverRate\x18\r \x02(\x01\x12\x11\n\tamplitude\x18\x0e \x02(\x01\x12\x12\n\ndarkStatus\x18\x0f \x01(\x05\x12\x36\n\x0coptionExData\x18\x10 \x01(\x0b\x32 .Qot_Common.OptionBasicQotExData\x12\x15\n\rlistTimestamp\x18\x11 \x01(\x01\x12\x17\n\x0fupdateTimestamp\x18\x12 \x01(\x01\x12\x31\n\tpreMarket\x18\x13 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x33\n\x0b\x61\x66terMarket\x18\x14 \x01(\x0b\x32\x1e.Qot_Common.PreAfterMarketData\x12\x11\n\tsecStatus\x18\x15 \x01(\x05\x12\x36\n\x0c\x66utureExData\x18\x16 \x01(\x0b\x32 .Qot_Common.FutureBasicQotExData\x12\x38\n\rwarrantExData\x18\x17 \x01(\x0b\x32!.Qot_Common.WarrantBasicQotExData\"\xa8\x01\n\tTimeShare\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x0e\n\x06minute\x18\x02 \x02(\x05\x12\x0f\n\x07isBlank\x18\x03 \x02(\x08\x12\r\n\x05price\x18\x04 \x01(\x01\x12\x16\n\x0elastClosePrice\x18\x05 \x01(\x01\x12\x10\n\x08\x61vgPrice\x18\x06 \x01(\x01\x12\x0e\n\x06volume\x18\x07 \x01(\x03\x12\x10\n\x08turnover\x18\x08 \x01(\x01\x12\x11\n\ttimestamp\x18\t \x01(\x01\"\xb5\x01\n\x13SecurityStaticBasic\x12&\n\x08security\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\n\n\x02id\x18\x02 \x02(\x03\x12\x0f\n\x07lotSize\x18\x03 \x02(\x05\x12\x0f\n\x07secType\x18\x04 \x02(\x05\x12\x0c\n\x04name\x18\x05 \x02(\t\x12\x10\n\x08listTime\x18\x06 \x02(\t\x12\x11\n\tdelisting\x18\x07 \x01(\x08\x12\x15\n\rlistTimestamp\x18\x08 \x01(\x01\"H\n\x13WarrantStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\"\xc3\x01\n\x12OptionStaticExData\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12#\n\x05owner\x18\x02 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x12\n\nstrikeTime\x18\x03 \x02(\t\x12\x13\n\x0bstrikePrice\x18\x04 \x02(\x01\x12\x0f\n\x07suspend\x18\x05 \x02(\x08\x12\x0e\n\x06market\x18\x06 \x02(\t\x12\x17\n\x0fstrikeTimestamp\x18\x07 \x01(\x01\x12\x17\n\x0findexOptionType\x18\x08 \x01(\x05\"_\n\x12\x46utureStaticExData\x12\x15\n\rlastTradeTime\x18\x01 \x02(\t\x12\x1a\n\x12lastTradeTimestamp\x18\x02 \x01(\x01\x12\x16\n\x0eisMainContract\x18\x03 \x02(\x08\"\xe8\x01\n\x12SecurityStaticInfo\x12.\n\x05\x62\x61sic\x18\x01 \x02(\x0b\x32\x1f.Qot_Common.SecurityStaticBasic\x12\x36\n\rwarrantExData\x18\x02 \x01(\x0b\x32\x1f.Qot_Common.WarrantStaticExData\x12\x34\n\x0coptionExData\x18\x03 \x01(\x0b\x32\x1e.Qot_Common.OptionStaticExData\x12\x34\n\x0c\x66utureExData\x18\x04 \x01(\x0b\x32\x1e.Qot_Common.FutureStaticExData\"P\n\x06\x42roker\x12\n\n\x02id\x18\x01 \x02(\x03\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x0b\n\x03pos\x18\x03 \x02(\x05\x12\x0f\n\x07orderID\x18\x04 \x01(\x03\x12\x0e\n\x06volume\x18\x05 \x01(\x03\"\xc1\x01\n\x06Ticker\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x10\n\x08sequence\x18\x02 \x02(\x03\x12\x0b\n\x03\x64ir\x18\x03 \x02(\x05\x12\r\n\x05price\x18\x04 \x02(\x01\x12\x0e\n\x06volume\x18\x05 \x02(\x03\x12\x10\n\x08turnover\x18\x06 \x02(\x01\x12\x10\n\x08recvTime\x18\x07 \x01(\x01\x12\x0c\n\x04type\x18\x08 \x01(\x05\x12\x10\n\x08typeSign\x18\t \x01(\x05\x12\x14\n\x0cpushDataType\x18\n \x01(\x05\x12\x11\n\ttimestamp\x18\x0b \x01(\x01\"2\n\x0fOrderBookDetail\x12\x0f\n\x07orderID\x18\x01 \x02(\x03\x12\x0e\n\x06volume\x18\x02 \x02(\x03\"p\n\tOrderBook\x12\r\n\x05price\x18\x01 \x02(\x01\x12\x0e\n\x06volume\x18\x02 \x02(\x03\x12\x13\n\x0borederCount\x18\x03 \x02(\x05\x12/\n\ndetailList\x18\x04 \x03(\x0b\x32\x1b.Qot_Common.OrderBookDetail\"\x9b\x01\n\x12ShareHoldingChange\x12\x12\n\nholderName\x18\x01 \x02(\t\x12\x12\n\nholdingQty\x18\x02 \x02(\x01\x12\x14\n\x0choldingRatio\x18\x03 \x02(\x01\x12\x11\n\tchangeQty\x18\x04 \x02(\x01\x12\x13\n\x0b\x63hangeRatio\x18\x05 \x02(\x01\x12\x0c\n\x04time\x18\x06 \x02(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x01\"F\n\x07SubInfo\x12\x0f\n\x07subType\x18\x01 \x02(\x05\x12*\n\x0csecurityList\x18\x02 \x03(\x0b\x32\x14.Qot_Common.Security\"a\n\x0b\x43onnSubInfo\x12(\n\x0bsubInfoList\x18\x01 \x03(\x0b\x32\x13.Qot_Common.SubInfo\x12\x11\n\tusedQuota\x18\x02 \x02(\x05\x12\x15\n\risOwnConnData\x18\x03 \x02(\x08\"Q\n\tPlateInfo\x12#\n\x05plate\x18\x01 \x02(\x0b\x32\x14.Qot_Common.Security\x12\x0c\n\x04name\x18\x02 \x02(\t\x12\x11\n\tplateType\x18\x03 \x01(\x05\"\xba\x03\n\x05Rehab\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x16\n\x0e\x63ompanyActFlag\x18\x02 \x02(\x03\x12\x12\n\nfwdFactorA\x18\x03 \x02(\x01\x12\x12\n\nfwdFactorB\x18\x04 \x02(\x01\x12\x12\n\nbwdFactorA\x18\x05 \x02(\x01\x12\x12\n\nbwdFactorB\x18\x06 \x02(\x01\x12\x11\n\tsplitBase\x18\x07 \x01(\x05\x12\x10\n\x08splitErt\x18\x08 \x01(\x05\x12\x10\n\x08joinBase\x18\t \x01(\x05\x12\x0f\n\x07joinErt\x18\n \x01(\x05\x12\x11\n\tbonusBase\x18\x0b \x01(\x05\x12\x10\n\x08\x62onusErt\x18\x0c \x01(\x05\x12\x14\n\x0ctransferBase\x18\r \x01(\x05\x12\x13\n\x0btransferErt\x18\x0e \x01(\x05\x12\x11\n\tallotBase\x18\x0f \x01(\x05\x12\x10\n\x08\x61llotErt\x18\x10 \x01(\x05\x12\x12\n\nallotPrice\x18\x11 \x01(\x01\x12\x0f\n\x07\x61\x64\x64\x42\x61se\x18\x12 \x01(\x05\x12\x0e\n\x06\x61\x64\x64\x45rt\x18\x13 \x01(\x05\x12\x10\n\x08\x61\x64\x64Price\x18\x14 \x01(\x01\x12\x10\n\x08\x64ividend\x18\x15 \x01(\x01\x12\x12\n\nspDividend\x18\x16 \x01(\x01\x12\x11\n\ttimestamp\x18\x17 \x01(\x01*\xe1\x01\n\tQotMarket\x12\x15\n\x11QotMarket_Unknown\x10\x00\x12\x19\n\x15QotMarket_HK_Security\x10\x01\x12\x17\n\x13QotMarket_HK_Future\x10\x02\x12\x19\n\x15QotMarket_US_Security\x10\x0b\x12\x1b\n\x17QotMarket_CNSH_Security\x10\x15\x12\x1b\n\x17QotMarket_CNSZ_Security\x10\x16\x12\x19\n\x15QotMarket_SG_Security\x10\x1f\x12\x19\n\x15QotMarket_JP_Security\x10)*\x9a\x02\n\x0cSecurityType\x12\x18\n\x14SecurityType_Unknown\x10\x00\x12\x15\n\x11SecurityType_Bond\x10\x01\x12\x15\n\x11SecurityType_Bwrt\x10\x02\x12\x15\n\x11SecurityType_Eqty\x10\x03\x12\x16\n\x12SecurityType_Trust\x10\x04\x12\x18\n\x14SecurityType_Warrant\x10\x05\x12\x16\n\x12SecurityType_Index\x10\x06\x12\x16\n\x12SecurityType_Plate\x10\x07\x12\x15\n\x11SecurityType_Drvt\x10\x08\x12\x19\n\x15SecurityType_PlateSet\x10\t\x12\x17\n\x13SecurityType_Future\x10\n*\x8a\x01\n\x0cPlateSetType\x12\x14\n\x10PlateSetType_All\x10\x00\x12\x19\n\x15PlateSetType_Industry\x10\x01\x12\x17\n\x13PlateSetType_Region\x10\x02\x12\x18\n\x14PlateSetType_Concept\x10\x03\x12\x16\n\x12PlateSetType_Other\x10\x04*\x95\x01\n\x0bWarrantType\x12\x17\n\x13WarrantType_Unknown\x10\x00\x12\x13\n\x0fWarrantType_Buy\x10\x01\x12\x14\n\x10WarrantType_Sell\x10\x02\x12\x14\n\x10WarrantType_Bull\x10\x03\x12\x14\n\x10WarrantType_Bear\x10\x04\x12\x16\n\x12WarrantType_InLine\x10\x05*M\n\nOptionType\x12\x16\n\x12OptionType_Unknown\x10\x00\x12\x13\n\x0fOptionType_Call\x10\x01\x12\x12\n\x0eOptionType_Put\x10\x02*e\n\x0fIndexOptionType\x12\x1b\n\x17IndexOptionType_Unknown\x10\x00\x12\x1a\n\x16IndexOptionType_Normal\x10\x01\x12\x19\n\x15IndexOptionType_Small\x10\x02*\x82\x01\n\x0eOptionAreaType\x12\x1a\n\x16OptionAreaType_Unknown\x10\x00\x12\x1b\n\x17OptionAreaType_American\x10\x01\x12\x1b\n\x17OptionAreaType_European\x10\x02\x12\x1a\n\x16OptionAreaType_Bermuda\x10\x03*\xa8\x07\n\x0eQotMarketState\x12\x17\n\x13QotMarketState_None\x10\x00\x12\x1a\n\x16QotMarketState_Auction\x10\x01\x12\x1e\n\x1aQotMarketState_WaitingOpen\x10\x02\x12\x1a\n\x16QotMarketState_Morning\x10\x03\x12\x17\n\x13QotMarketState_Rest\x10\x04\x12\x1c\n\x18QotMarketState_Afternoon\x10\x05\x12\x19\n\x15QotMarketState_Closed\x10\x06\x12!\n\x1dQotMarketState_PreMarketBegin\x10\x08\x12\x1f\n\x1bQotMarketState_PreMarketEnd\x10\t\x12\"\n\x1eQotMarketState_AfterHoursBegin\x10\n\x12 \n\x1cQotMarketState_AfterHoursEnd\x10\x0b\x12\x1c\n\x18QotMarketState_NightOpen\x10\r\x12\x1b\n\x17QotMarketState_NightEnd\x10\x0e\x12 \n\x1cQotMarketState_FutureDayOpen\x10\x0f\x12!\n\x1dQotMarketState_FutureDayBreak\x10\x10\x12!\n\x1dQotMarketState_FutureDayClose\x10\x11\x12\'\n#QotMarketState_FutureDayWaitForOpen\x10\x12\x12\x18\n\x14QotMarketState_HkCas\x10\x13\x12\"\n\x1eQotMarketState_FutureNightWait\x10\x14\x12\"\n\x1eQotMarketState_FutureAfternoon\x10\x15\x12#\n\x1fQotMarketState_FutureSwitchDate\x10\x16\x12\x1d\n\x19QotMarketState_FutureOpen\x10\x17\x12\x1e\n\x1aQotMarketState_FutureBreak\x10\x18\x12\"\n\x1eQotMarketState_FutureBreakOver\x10\x19\x12\x1e\n\x1aQotMarketState_FutureClose\x10\x1a\x12%\n!QotMarketState_StibAfterHoursWait\x10\x1b\x12&\n\"QotMarketState_StibAfterHoursBegin\x10\x1c\x12$\n QotMarketState_StibAfterHoursEnd\x10\x1d*\xe4\x01\n\x0fTradeDateMarket\x12\x1b\n\x17TradeDateMarket_Unknown\x10\x00\x12\x16\n\x12TradeDateMarket_HK\x10\x01\x12\x16\n\x12TradeDateMarket_US\x10\x02\x12\x16\n\x12TradeDateMarket_CN\x10\x03\x12\x16\n\x12TradeDateMarket_NT\x10\x04\x12\x16\n\x12TradeDateMarket_ST\x10\x05\x12\x1d\n\x19TradeDateMarket_JP_Future\x10\x06\x12\x1d\n\x19TradeDateMarket_SG_Future\x10\x07*`\n\rTradeDateType\x12\x17\n\x13TradeDateType_Whole\x10\x00\x12\x19\n\x15TradeDateType_Morning\x10\x01\x12\x1b\n\x17TradeDateType_Afternoon\x10\x02*N\n\tRehabType\x12\x12\n\x0eRehabType_None\x10\x00\x12\x15\n\x11RehabType_Forward\x10\x01\x12\x16\n\x12RehabType_Backward\x10\x02*\xdd\x01\n\x06KLType\x12\x12\n\x0eKLType_Unknown\x10\x00\x12\x0f\n\x0bKLType_1Min\x10\x01\x12\x0e\n\nKLType_Day\x10\x02\x12\x0f\n\x0bKLType_Week\x10\x03\x12\x10\n\x0cKLType_Month\x10\x04\x12\x0f\n\x0bKLType_Year\x10\x05\x12\x0f\n\x0bKLType_5Min\x10\x06\x12\x10\n\x0cKLType_15Min\x10\x07\x12\x10\n\x0cKLType_30Min\x10\x08\x12\x10\n\x0cKLType_60Min\x10\t\x12\x0f\n\x0bKLType_3Min\x10\n\x12\x12\n\x0eKLType_Quarter\x10\x0b*\xf5\x01\n\x08KLFields\x12\x11\n\rKLFields_None\x10\x00\x12\x11\n\rKLFields_High\x10\x01\x12\x11\n\rKLFields_Open\x10\x02\x12\x10\n\x0cKLFields_Low\x10\x04\x12\x12\n\x0eKLFields_Close\x10\x08\x12\x16\n\x12KLFields_LastClose\x10\x10\x12\x13\n\x0fKLFields_Volume\x10 \x12\x15\n\x11KLFields_Turnover\x10@\x12\x1a\n\x15KLFields_TurnoverRate\x10\x80\x01\x12\x10\n\x0bKLFields_PE\x10\x80\x02\x12\x18\n\x13KLFields_ChangeRate\x10\x80\x04*\xea\x02\n\x07SubType\x12\x10\n\x0cSubType_None\x10\x00\x12\x11\n\rSubType_Basic\x10\x01\x12\x15\n\x11SubType_OrderBook\x10\x02\x12\x12\n\x0eSubType_Ticker\x10\x04\x12\x0e\n\nSubType_RT\x10\x05\x12\x12\n\x0eSubType_KL_Day\x10\x06\x12\x13\n\x0fSubType_KL_5Min\x10\x07\x12\x14\n\x10SubType_KL_15Min\x10\x08\x12\x14\n\x10SubType_KL_30Min\x10\t\x12\x14\n\x10SubType_KL_60Min\x10\n\x12\x13\n\x0fSubType_KL_1Min\x10\x0b\x12\x13\n\x0fSubType_KL_Week\x10\x0c\x12\x14\n\x10SubType_KL_Month\x10\r\x12\x12\n\x0eSubType_Broker\x10\x0e\x12\x16\n\x12SubType_KL_Qurater\x10\x0f\x12\x13\n\x0fSubType_KL_Year\x10\x10\x12\x13\n\x0fSubType_KL_3Min\x10\x11*}\n\x0fTickerDirection\x12\x1b\n\x17TickerDirection_Unknown\x10\x00\x12\x17\n\x13TickerDirection_Bid\x10\x01\x12\x17\n\x13TickerDirection_Ask\x10\x02\x12\x1b\n\x17TickerDirection_Neutral\x10\x03*\x9c\x07\n\nTickerType\x12\x16\n\x12TickerType_Unknown\x10\x00\x12\x18\n\x14TickerType_Automatch\x10\x01\x12\x13\n\x0fTickerType_Late\x10\x02\x12\x1c\n\x18TickerType_NoneAutomatch\x10\x03\x12\x1d\n\x19TickerType_InterAutomatch\x10\x04\x12!\n\x1dTickerType_InterNoneAutomatch\x10\x05\x12\x15\n\x11TickerType_OddLot\x10\x06\x12\x16\n\x12TickerType_Auction\x10\x07\x12\x13\n\x0fTickerType_Bulk\x10\x08\x12\x14\n\x10TickerType_Crash\x10\t\x12\x1a\n\x16TickerType_CrossMarket\x10\n\x12\x17\n\x13TickerType_BulkSold\x10\x0b\x12\x1a\n\x16TickerType_FreeOnBoard\x10\x0c\x12\x1b\n\x17TickerType_Rule127Or155\x10\r\x12\x14\n\x10TickerType_Delay\x10\x0e\x12%\n!TickerType_MarketCenterClosePrice\x10\x0f\x12\x16\n\x12TickerType_NextDay\x10\x10\x12\"\n\x1eTickerType_MarketCenterOpening\x10\x11\x12\"\n\x1eTickerType_PriorReferencePrice\x10\x12\x12$\n TickerType_MarketCenterOpenPrice\x10\x13\x12\x15\n\x11TickerType_Seller\x10\x14\x12\x10\n\x0cTickerType_T\x10\x15\x12#\n\x1fTickerType_ExtendedTradingHours\x10\x16\x12\x19\n\x15TickerType_Contingent\x10\x17\x12\x17\n\x13TickerType_AvgPrice\x10\x18\x12\x16\n\x12TickerType_OTCSold\x10\x19\x12 \n\x1cTickerType_OddLotCrossMarket\x10\x1a\x12!\n\x1dTickerType_DerivativelyPriced\x10\x1b\x12\x1e\n\x1aTickerType_ReOpeningPriced\x10\x1c\x12\x1c\n\x18TickerType_ClosingPriced\x10\x1d\x12&\n\"TickerType_ComprehensiveDelayPrice\x10\x1e\x12\x17\n\x13TickerType_Overseas\x10\x1f*M\n\nDarkStatus\x12\x13\n\x0f\x44\x61rkStatus_None\x10\x00\x12\x16\n\x12\x44\x61rkStatus_Trading\x10\x01\x12\x12\n\x0e\x44\x61rkStatus_End\x10\x02*\x94\x06\n\x0eSecurityStatus\x12\x1a\n\x16SecurityStatus_Unknown\x10\x00\x12\x19\n\x15SecurityStatus_Normal\x10\x01\x12\x1a\n\x16SecurityStatus_Listing\x10\x02\x12\x1d\n\x19SecurityStatus_Purchasing\x10\x03\x12\x1e\n\x1aSecurityStatus_Subscribing\x10\x04\x12)\n%SecurityStatus_BeforeDrakTradeOpening\x10\x05\x12\x1e\n\x1aSecurityStatus_DrakTrading\x10\x06\x12\x1f\n\x1bSecurityStatus_DrakTradeEnd\x10\x07\x12\x1b\n\x17SecurityStatus_ToBeOpen\x10\x08\x12\x1c\n\x18SecurityStatus_Suspended\x10\t\x12\x19\n\x15SecurityStatus_Called\x10\n\x12)\n%SecurityStatus_ExpiredLastTradingDate\x10\x0b\x12\x1a\n\x16SecurityStatus_Expired\x10\x0c\x12\x1b\n\x17SecurityStatus_Delisted\x10\r\x12(\n$SecurityStatus_ChangeToTemporaryCode\x10\x0e\x12(\n$SecurityStatus_TemporaryCodeTradeEnd\x10\x0f\x12\'\n#SecurityStatus_ChangedPlateTradeEnd\x10\x10\x12&\n\"SecurityStatus_ChangedCodeTradeEnd\x10\x11\x12,\n(SecurityStatus_RecoverableCircuitBreaker\x10\x12\x12.\n*SecurityStatus_UnRecoverableCircuitBreaker\x10\x13\x12#\n\x1fSecurityStatus_AfterCombination\x10\x14\x12\"\n\x1eSecurityStatus_AfterTransation\x10\x15*\x81\x01\n\x0eHolderCategory\x12\x19\n\x15HolderCategory_Unknow\x10\x00\x12\x19\n\x15HolderCategory_Agency\x10\x01\x12\x17\n\x13HolderCategory_Fund\x10\x02\x12 \n\x1cHolderCategory_SeniorManager\x10\x03*v\n\x0cPushDataType\x12\x17\n\x13PushDataType_Unknow\x10\x00\x12\x19\n\x15PushDataType_Realtime\x10\x01\x12\x1a\n\x16PushDataType_ByDisConn\x10\x02\x12\x16\n\x12PushDataType_Cache\x10\x03*\xd3\n\n\tSortField\x12\x14\n\x10SortField_Unknow\x10\x00\x12\x12\n\x0eSortField_Code\x10\x01\x12\x16\n\x12SortField_CurPrice\x10\x02\x12\x1c\n\x18SortField_PriceChangeVal\x10\x03\x12\x18\n\x14SortField_ChangeRate\x10\x04\x12\x14\n\x10SortField_Status\x10\x05\x12\x16\n\x12SortField_BidPrice\x10\x06\x12\x16\n\x12SortField_AskPrice\x10\x07\x12\x14\n\x10SortField_BidVol\x10\x08\x12\x14\n\x10SortField_AskVol\x10\t\x12\x14\n\x10SortField_Volume\x10\n\x12\x16\n\x12SortField_Turnover\x10\x0b\x12\x17\n\x13SortField_Amplitude\x10\x1e\x12\x13\n\x0fSortField_Score\x10\x0c\x12\x15\n\x11SortField_Premium\x10\r\x12\x1f\n\x1bSortField_EffectiveLeverage\x10\x0e\x12\x13\n\x0fSortField_Delta\x10\x0f\x12\x1f\n\x1bSortField_ImpliedVolatility\x10\x10\x12\x12\n\x0eSortField_Type\x10\x11\x12\x19\n\x15SortField_StrikePrice\x10\x12\x12\x1c\n\x18SortField_BreakEvenPoint\x10\x13\x12\x1a\n\x16SortField_MaturityTime\x10\x14\x12\x16\n\x12SortField_ListTime\x10\x15\x12\x1b\n\x17SortField_LastTradeTime\x10\x16\x12\x16\n\x12SortField_Leverage\x10\x17\x12\x18\n\x14SortField_InOutMoney\x10\x18\x12\x1b\n\x17SortField_RecoveryPrice\x10\x19\x12\x19\n\x15SortField_ChangePrice\x10\x1a\x12\x14\n\x10SortField_Change\x10\x1b\x12\x18\n\x14SortField_StreetRate\x10\x1c\x12\x17\n\x13SortField_StreetVol\x10\x1d\x12\x19\n\x15SortField_WarrantName\x10\x1f\x12\x14\n\x10SortField_Issuer\x10 \x12\x15\n\x11SortField_LotSize\x10!\x12\x17\n\x13SortField_IssueSize\x10\"\x12\x1e\n\x1aSortField_UpperStrikePrice\x10-\x12\x1e\n\x1aSortField_LowerStrikePrice\x10.\x12\x1f\n\x1bSortField_InLinePriceStatus\x10/\x12\x19\n\x15SortField_PreCurPrice\x10#\x12\x1b\n\x17SortField_AfterCurPrice\x10$\x12\x1f\n\x1bSortField_PrePriceChangeVal\x10%\x12!\n\x1dSortField_AfterPriceChangeVal\x10&\x12\x1b\n\x17SortField_PreChangeRate\x10\'\x12\x1d\n\x19SortField_AfterChangeRate\x10(\x12\x1a\n\x16SortField_PreAmplitude\x10)\x12\x1c\n\x18SortField_AfterAmplitude\x10*\x12\x19\n\x15SortField_PreTurnover\x10+\x12\x1b\n\x17SortField_AfterTurnover\x10,\x12\x1d\n\x19SortField_LastSettlePrice\x10\x30\x12\x16\n\x12SortField_Position\x10\x31\x12\x1c\n\x18SortField_PositionChange\x10\x32*\x83\x03\n\x06Issuer\x12\x11\n\rIssuer_Unknow\x10\x00\x12\r\n\tIssuer_SG\x10\x01\x12\r\n\tIssuer_BP\x10\x02\x12\r\n\tIssuer_CS\x10\x03\x12\r\n\tIssuer_CT\x10\x04\x12\r\n\tIssuer_EA\x10\x05\x12\r\n\tIssuer_GS\x10\x06\x12\r\n\tIssuer_HS\x10\x07\x12\r\n\tIssuer_JP\x10\x08\x12\r\n\tIssuer_MB\x10\t\x12\r\n\tIssuer_SC\x10\n\x12\r\n\tIssuer_UB\x10\x0b\x12\r\n\tIssuer_BI\x10\x0c\x12\r\n\tIssuer_DB\x10\r\x12\r\n\tIssuer_DC\x10\x0e\x12\r\n\tIssuer_ML\x10\x0f\x12\r\n\tIssuer_NM\x10\x10\x12\r\n\tIssuer_RB\x10\x11\x12\r\n\tIssuer_RS\x10\x12\x12\r\n\tIssuer_BC\x10\x13\x12\r\n\tIssuer_HT\x10\x14\x12\r\n\tIssuer_VT\x10\x15\x12\r\n\tIssuer_KC\x10\x16\x12\r\n\tIssuer_MS\x10\x17\x12\r\n\tIssuer_GJ\x10\x18*\x97\x01\n\tIpoPeriod\x12\x14\n\x10IpoPeriod_Unknow\x10\x00\x12\x13\n\x0fIpoPeriod_Today\x10\x01\x12\x16\n\x12IpoPeriod_Tomorrow\x10\x02\x12\x16\n\x12IpoPeriod_Nextweek\x10\x03\x12\x16\n\x12IpoPeriod_Lastweek\x10\x04\x12\x17\n\x13IpoPeriod_Lastmonth\x10\x05*N\n\tPriceType\x12\x14\n\x10PriceType_Unknow\x10\x00\x12\x15\n\x11PriceType_Outside\x10\x01\x12\x14\n\x10PriceType_WithIn\x10\x02*\x9d\x01\n\rWarrantStatus\x12\x18\n\x14WarrantStatus_Unknow\x10\x00\x12\x18\n\x14WarrantStatus_Normal\x10\x01\x12\x19\n\x15WarrantStatus_Suspend\x10\x02\x12\x1b\n\x17WarrantStatus_StopTrade\x10\x03\x12 \n\x1cWarrantStatus_PendingListing\x10\x04*\xda\x01\n\nCompanyAct\x12\x13\n\x0f\x43ompanyAct_None\x10\x00\x12\x14\n\x10\x43ompanyAct_Split\x10\x01\x12\x13\n\x0f\x43ompanyAct_Join\x10\x02\x12\x14\n\x10\x43ompanyAct_Bonus\x10\x04\x12\x17\n\x13\x43ompanyAct_Transfer\x10\x08\x12\x14\n\x10\x43ompanyAct_Allot\x10\x10\x12\x12\n\x0e\x43ompanyAct_Add\x10 \x12\x17\n\x13\x43ompanyAct_Dividend\x10@\x12\x1a\n\x15\x43ompanyAct_SPDividend\x10\x80\x01*}\n\x08QotRight\x12\x13\n\x0fQotRight_Unknow\x10\x00\x12\x10\n\x0cQotRight_Bmp\x10\x01\x12\x13\n\x0fQotRight_Level1\x10\x02\x12\x13\n\x0fQotRight_Level2\x10\x03\x12\x0f\n\x0bQotRight_SF\x10\x04\x12\x0f\n\x0bQotRight_No\x10\x05*\xce\x04\n\x11PriceReminderType\x12\x1d\n\x19PriceReminderType_Unknown\x10\x00\x12\x1d\n\x19PriceReminderType_PriceUp\x10\x01\x12\x1f\n\x1bPriceReminderType_PriceDown\x10\x02\x12\"\n\x1ePriceReminderType_ChangeRateUp\x10\x03\x12$\n PriceReminderType_ChangeRateDown\x10\x04\x12&\n\"PriceReminderType_5MinChangeRateUp\x10\x05\x12(\n$PriceReminderType_5MinChangeRateDown\x10\x06\x12\x1e\n\x1aPriceReminderType_VolumeUp\x10\x07\x12 \n\x1cPriceReminderType_TurnoverUp\x10\x08\x12$\n PriceReminderType_TurnoverRateUp\x10\t\x12 \n\x1cPriceReminderType_BidPriceUp\x10\n\x12\"\n\x1ePriceReminderType_AskPriceDown\x10\x0b\x12\x1e\n\x1aPriceReminderType_BidVolUp\x10\x0c\x12\x1e\n\x1aPriceReminderType_AskVolUp\x10\r\x12&\n\"PriceReminderType_3MinChangeRateUp\x10\x0e\x12(\n$PriceReminderType_3MinChangeRateDown\x10\x0f*\x90\x01\n\x11PriceReminderFreq\x12\x1d\n\x19PriceReminderFreq_Unknown\x10\x00\x12\x1c\n\x18PriceReminderFreq_Always\x10\x01\x12\x1e\n\x1aPriceReminderFreq_OnceADay\x10\x02\x12\x1e\n\x1aPriceReminderFreq_OnlyOnce\x10\x03*\xb3\x01\n\nAssetClass\x12\x15\n\x11\x41ssetClass_Unknow\x10\x00\x12\x14\n\x10\x41ssetClass_Stock\x10\x01\x12\x13\n\x0f\x41ssetClass_Bond\x10\x02\x12\x18\n\x14\x41ssetClass_Commodity\x10\x03\x12\x1d\n\x19\x41ssetClass_CurrencyMarket\x10\x04\x12\x15\n\x11\x41ssetClass_Future\x10\x05\x12\x13\n\x0f\x41ssetClass_Swap\x10\x06*c\n\x0f\x45xpirationCycle\x12\x1b\n\x17\x45xpirationCycle_Unknown\x10\x00\x12\x18\n\x14\x45xpirationCycle_Week\x10\x01\x12\x19\n\x15\x45xpirationCycle_Month\x10\x02\x42@\n\x13\x63om.futu.openapi.pbZ)github.com/futuopen/ftapi4go/pb/qotcommon') , dependencies=[Common__pb2.DESCRIPTOR,]) @@ -447,11 +447,19 @@ name='TradeDateMarket_ST', index=5, number=5, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='TradeDateMarket_JP_Future', index=6, number=6, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TradeDateMarket_SG_Future', index=7, number=7, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=6115, - serialized_end=6281, + serialized_end=6343, ) _sym_db.RegisterEnumDescriptor(_TRADEDATEMARKET) @@ -477,8 +485,8 @@ ], containing_type=None, options=None, - serialized_start=6283, - serialized_end=6379, + serialized_start=6345, + serialized_end=6441, ) _sym_db.RegisterEnumDescriptor(_TRADEDATETYPE) @@ -504,8 +512,8 @@ ], containing_type=None, options=None, - serialized_start=6381, - serialized_end=6459, + serialized_start=6443, + serialized_end=6521, ) _sym_db.RegisterEnumDescriptor(_REHABTYPE) @@ -567,8 +575,8 @@ ], containing_type=None, options=None, - serialized_start=6462, - serialized_end=6683, + serialized_start=6524, + serialized_end=6745, ) _sym_db.RegisterEnumDescriptor(_KLTYPE) @@ -626,8 +634,8 @@ ], containing_type=None, options=None, - serialized_start=6686, - serialized_end=6931, + serialized_start=6748, + serialized_end=6993, ) _sym_db.RegisterEnumDescriptor(_KLFIELDS) @@ -709,8 +717,8 @@ ], containing_type=None, options=None, - serialized_start=6934, - serialized_end=7296, + serialized_start=6996, + serialized_end=7358, ) _sym_db.RegisterEnumDescriptor(_SUBTYPE) @@ -740,8 +748,8 @@ ], containing_type=None, options=None, - serialized_start=7298, - serialized_end=7423, + serialized_start=7360, + serialized_end=7485, ) _sym_db.RegisterEnumDescriptor(_TICKERDIRECTION) @@ -883,8 +891,8 @@ ], containing_type=None, options=None, - serialized_start=7426, - serialized_end=8350, + serialized_start=7488, + serialized_end=8412, ) _sym_db.RegisterEnumDescriptor(_TICKERTYPE) @@ -910,8 +918,8 @@ ], containing_type=None, options=None, - serialized_start=8352, - serialized_end=8429, + serialized_start=8414, + serialized_end=8491, ) _sym_db.RegisterEnumDescriptor(_DARKSTATUS) @@ -1013,8 +1021,8 @@ ], containing_type=None, options=None, - serialized_start=8432, - serialized_end=9220, + serialized_start=8494, + serialized_end=9282, ) _sym_db.RegisterEnumDescriptor(_SECURITYSTATUS) @@ -1044,8 +1052,8 @@ ], containing_type=None, options=None, - serialized_start=9223, - serialized_end=9352, + serialized_start=9285, + serialized_end=9414, ) _sym_db.RegisterEnumDescriptor(_HOLDERCATEGORY) @@ -1075,8 +1083,8 @@ ], containing_type=None, options=None, - serialized_start=9354, - serialized_end=9472, + serialized_start=9416, + serialized_end=9534, ) _sym_db.RegisterEnumDescriptor(_PUSHDATATYPE) @@ -1294,8 +1302,8 @@ ], containing_type=None, options=None, - serialized_start=9475, - serialized_end=10838, + serialized_start=9537, + serialized_end=10900, ) _sym_db.RegisterEnumDescriptor(_SORTFIELD) @@ -1409,8 +1417,8 @@ ], containing_type=None, options=None, - serialized_start=10841, - serialized_end=11228, + serialized_start=10903, + serialized_end=11290, ) _sym_db.RegisterEnumDescriptor(_ISSUER) @@ -1448,8 +1456,8 @@ ], containing_type=None, options=None, - serialized_start=11231, - serialized_end=11382, + serialized_start=11293, + serialized_end=11444, ) _sym_db.RegisterEnumDescriptor(_IPOPERIOD) @@ -1475,8 +1483,8 @@ ], containing_type=None, options=None, - serialized_start=11384, - serialized_end=11462, + serialized_start=11446, + serialized_end=11524, ) _sym_db.RegisterEnumDescriptor(_PRICETYPE) @@ -1510,8 +1518,8 @@ ], containing_type=None, options=None, - serialized_start=11465, - serialized_end=11622, + serialized_start=11527, + serialized_end=11684, ) _sym_db.RegisterEnumDescriptor(_WARRANTSTATUS) @@ -1561,8 +1569,8 @@ ], containing_type=None, options=None, - serialized_start=11625, - serialized_end=11843, + serialized_start=11687, + serialized_end=11905, ) _sym_db.RegisterEnumDescriptor(_COMPANYACT) @@ -1600,8 +1608,8 @@ ], containing_type=None, options=None, - serialized_start=11845, - serialized_end=11970, + serialized_start=11907, + serialized_end=12032, ) _sym_db.RegisterEnumDescriptor(_QOTRIGHT) @@ -1679,8 +1687,8 @@ ], containing_type=None, options=None, - serialized_start=11973, - serialized_end=12563, + serialized_start=12035, + serialized_end=12625, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERTYPE) @@ -1710,8 +1718,8 @@ ], containing_type=None, options=None, - serialized_start=12566, - serialized_end=12710, + serialized_start=12628, + serialized_end=12772, ) _sym_db.RegisterEnumDescriptor(_PRICEREMINDERFREQ) @@ -1753,8 +1761,8 @@ ], containing_type=None, options=None, - serialized_start=12713, - serialized_end=12892, + serialized_start=12775, + serialized_end=12954, ) _sym_db.RegisterEnumDescriptor(_ASSETCLASS) @@ -1780,8 +1788,8 @@ ], containing_type=None, options=None, - serialized_start=12894, - serialized_end=12993, + serialized_start=12956, + serialized_end=13055, ) _sym_db.RegisterEnumDescriptor(_EXPIRATIONCYCLE) @@ -1860,6 +1868,8 @@ TradeDateMarket_CN = 3 TradeDateMarket_NT = 4 TradeDateMarket_ST = 5 +TradeDateMarket_JP_Future = 6 +TradeDateMarket_SG_Future = 7 TradeDateType_Whole = 0 TradeDateType_Morning = 1 TradeDateType_Afternoon = 2 diff --git a/futu/common/pb/Qot_RequestTradeDate.proto b/futu/common/pb/Qot_RequestTradeDate.proto index 313c3f7..334325b 100644 --- a/futu/common/pb/Qot_RequestTradeDate.proto +++ b/futu/common/pb/Qot_RequestTradeDate.proto @@ -8,9 +8,11 @@ import "Qot_Common.proto"; message C2S { + // 当 market 和 security 同时存在,会忽略 market,仅对 security 进行查询。 required int32 market = 1; //Qot_Common.TradeDateMarket,要查询的市场 required string beginTime = 2; //开始时间字符串 required string endTime = 3; //结束时间字符串 + optional Qot_Common.Security security = 4; // 指定标的 } message TradeDate diff --git a/futu/common/pb/Qot_RequestTradeDate_pb2.py b/futu/common/pb/Qot_RequestTradeDate_pb2.py index abde0e5..07daefd 100644 --- a/futu/common/pb/Qot_RequestTradeDate_pb2.py +++ b/futu/common/pb/Qot_RequestTradeDate_pb2.py @@ -21,7 +21,7 @@ name='Qot_RequestTradeDate.proto', package='Qot_RequestTradeDate', syntax='proto2', - serialized_pb=_b('\n\x1aQot_RequestTradeDate.proto\x12\x14Qot_RequestTradeDate\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"9\n\x03\x43\x32S\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x11\n\tbeginTime\x18\x02 \x02(\t\x12\x0f\n\x07\x65ndTime\x18\x03 \x02(\t\"C\n\tTradeDate\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x01\x12\x15\n\rtradeDateType\x18\x03 \x01(\x05\"=\n\x03S2C\x12\x36\n\rtradeDateList\x18\x01 \x03(\x0b\x32\x1f.Qot_RequestTradeDate.TradeDate\"1\n\x07Request\x12&\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x19.Qot_RequestTradeDate.C2S\"j\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12&\n\x03s2c\x18\x04 \x01(\x0b\x32\x19.Qot_RequestTradeDate.S2CBJ\n\x13\x63om.futu.openapi.pbZ3github.com/futuopen/ftapi4go/pb/qotrequesttradedate') + serialized_pb=_b('\n\x1aQot_RequestTradeDate.proto\x12\x14Qot_RequestTradeDate\x1a\x0c\x43ommon.proto\x1a\x10Qot_Common.proto\"a\n\x03\x43\x32S\x12\x0e\n\x06market\x18\x01 \x02(\x05\x12\x11\n\tbeginTime\x18\x02 \x02(\t\x12\x0f\n\x07\x65ndTime\x18\x03 \x02(\t\x12&\n\x08security\x18\x04 \x01(\x0b\x32\x14.Qot_Common.Security\"C\n\tTradeDate\x12\x0c\n\x04time\x18\x01 \x02(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x01\x12\x15\n\rtradeDateType\x18\x03 \x01(\x05\"=\n\x03S2C\x12\x36\n\rtradeDateList\x18\x01 \x03(\x0b\x32\x1f.Qot_RequestTradeDate.TradeDate\"1\n\x07Request\x12&\n\x03\x63\x32s\x18\x01 \x02(\x0b\x32\x19.Qot_RequestTradeDate.C2S\"j\n\x08Response\x12\x15\n\x07retType\x18\x01 \x02(\x05:\x04-400\x12\x0e\n\x06retMsg\x18\x02 \x01(\t\x12\x0f\n\x07\x65rrCode\x18\x03 \x01(\x05\x12&\n\x03s2c\x18\x04 \x01(\x0b\x32\x19.Qot_RequestTradeDate.S2CBJ\n\x13\x63om.futu.openapi.pbZ3github.com/futuopen/ftapi4go/pb/qotrequesttradedate') , dependencies=[Common__pb2.DESCRIPTOR,Qot__Common__pb2.DESCRIPTOR,]) @@ -56,6 +56,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='security', full_name='Qot_RequestTradeDate.C2S.security', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -69,7 +76,7 @@ oneofs=[ ], serialized_start=84, - serialized_end=141, + serialized_end=181, ) @@ -113,8 +120,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=143, - serialized_end=210, + serialized_start=183, + serialized_end=250, ) @@ -144,8 +151,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=212, - serialized_end=273, + serialized_start=252, + serialized_end=313, ) @@ -175,8 +182,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=275, - serialized_end=324, + serialized_start=315, + serialized_end=364, ) @@ -227,10 +234,11 @@ extension_ranges=[], oneofs=[ ], - serialized_start=326, - serialized_end=432, + serialized_start=366, + serialized_end=472, ) +_C2S.fields_by_name['security'].message_type = Qot__Common__pb2._SECURITY _S2C.fields_by_name['tradeDateList'].message_type = _TRADEDATE _REQUEST.fields_by_name['c2s'].message_type = _C2S _RESPONSE.fields_by_name['s2c'].message_type = _S2C diff --git a/futu/examples/simple_filter_demo.py b/futu/examples/simple_filter_demo.py index 41c6f5f..3ddf7b9 100644 --- a/futu/examples/simple_filter_demo.py +++ b/futu/examples/simple_filter_demo.py @@ -2,32 +2,55 @@ """演示如何使用股票筛选功能""" -from futu import * -quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111) -simple_filter = SimpleFilter() -simple_filter.filter_min = 2 -simple_filter.filter_max = 1000 -simple_filter.stock_field = StockField.CUR_PRICE -simple_filter.is_no_filter = False -# simple_filter.sort = SortDir.ASCEND -financial_filter = FinancialFilter() -financial_filter.filter_min = 0.5 -financial_filter.filter_max = 50 -financial_filter.stock_field = StockField.CURRENT_RATIO -financial_filter.is_no_filter = False -financial_filter.sort = SortDir.ASCEND -financial_filter.quarter = FinancialQuarter.ANNUAL -ret, ls = quote_ctx.get_stock_filter(market=Market.HK, filter_list=[simple_filter, financial_filter]) # 对香港市场的股票做简单和财务筛选 -if ret == RET_OK: - last_page, all_count, ret_list = ls - print(len(ret_list), all_count, ret_list) - for item in ret_list: - print(item.stock_code) # 取股票代码 - print(item.stock_name) # 取股票名称 - print(item[simple_filter]) # 取 simple_filter 对应的变量值 - print(item.cur_price) # 效果同上,也是取 simple_filter 对应的变量值 - print(item[financial_filter]) # 取 financial_filter 对应的变量值 -else: - print('error: ', ls) -quote_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽 +import futu as ft +def simple_financial_filter(api_svr_ip, api_svr_port): + """ + 验证接口:条件选股功能 get_stock_filter + 这里只设置了“简单属性”和“财务属性”作为筛选条件,。 + :param api_svr_ip: (string)ip + :param api_svr_port: (int)port + :return: + """ + # 创建行情api + quote_ctx = ft.OpenQuoteContext(host=api_svr_ip, port=api_svr_port) + + # 简单属性 + simple_filter = ft.SimpleFilter() + simple_filter.filter_min = 2 + simple_filter.filter_max = 1000 + simple_filter.stock_field = ft.StockField.CUR_PRICE + simple_filter.is_no_filter = False + # simple_filter.sort = SortDir.ASCEND + + # 财务属性 + financial_filter = ft.FinancialFilter() + financial_filter.filter_min = 0.5 + financial_filter.filter_max = 50 + financial_filter.stock_field = ft.StockField.CURRENT_RATIO + financial_filter.is_no_filter = False + financial_filter.sort = ft.SortDir.ASCEND # 多个筛选条件,只能有一个排序方向。 + financial_filter.quarter = ft.FinancialQuarter.ANNUAL + + # 对香港市场的股票做简单和财务筛选 + ret, ls = quote_ctx.get_stock_filter(market=ft.Market.HK, + filter_list=[simple_filter, financial_filter]) + if ret == ft.RET_OK: + last_page, all_count, ret_list = ls + print(len(ret_list), all_count, ret_list) + for item in ret_list: + print(item.stock_code) # 取股票代码 + print(item.stock_name) # 取股票名称 + print(item[simple_filter]) # 取 simple_filter 对应的变量值 + print(item.cur_price) # 效果同上,也是取 simple_filter 对应的变量值 + print(item[financial_filter]) # 取 financial_filter 对应的变量值 + else: + print('error: ', ls) + + quote_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽 + +if __name__ == "__main__": + ip = '127.0.0.1' + port = 11111 + + simple_financial_filter(ip, port) diff --git a/futu/quote/open_quote_context.py b/futu/quote/open_quote_context.py index e5ccc84..075f1b9 100644 --- a/futu/quote/open_quote_context.py +++ b/futu/quote/open_quote_context.py @@ -156,11 +156,12 @@ def on_api_socket_reconnected(self): self._wait_reconnect() return ret_code, ret_msg - def request_trading_days(self, market, start=None, end=None): + def request_trading_days(self, market=None, start=None, end=None, code=None): """获取交易日 :param market: 市场类型,TradeDateMarket_ :param start: 起始日期。例如'2018-01-01'。 :param end: 结束日期。例如'2018-01-01'。 + :param code: 股票代码。例如'HK.00700','US.APPL'。 start和end的组合如下: ========== ========== ======================================== start类型 end类型 说明 @@ -172,7 +173,9 @@ def request_trading_days(self, market, start=None, end=None): ========== ========== ======================================== :return: 成功时返回(RET_OK, data),data是[{'trade_date_type': 0, 'time': '2018-01-05'}]数组;失败时返回(RET_ERROR, data),其中data是错误描述字符串 """ - if market is None or is_str(market) is False: + if market is None: + market = TradeDateMarket.NONE # 当market入参是空,设置为TradeDateMarket.NONE + if is_str(market) is False: error_str = ERROR_STR_PREFIX + "the type of market param is wrong" return RET_ERROR, error_str @@ -180,6 +183,10 @@ def request_trading_days(self, market, start=None, end=None): if ret != RET_OK: return ret, msg + if code is not None and is_str(code) is False: + error_str = ERROR_STR_PREFIX + "the type of code is wrong" + return RET_ERROR, error_str + query_processor = self._get_sync_query_processor( RequestTradeDayQuery.pack_req, RequestTradeDayQuery.unpack_rsp) @@ -188,7 +195,8 @@ def request_trading_days(self, market, start=None, end=None): 'market': market, 'start_date': start, 'end_date': end, - 'conn_id': self.get_sync_conn_id() + 'conn_id': self.get_sync_conn_id(), + 'code': code } ret_code, msg, trade_day_list = query_processor(**kargs) @@ -484,16 +492,16 @@ def get_market_snapshot(self, code_list): wrt_inline_price_status str 界内界外,仅界内证支持该字段,参见PriceType lot_size int 每手股数 price_spread float 当前摆盘价差亦即摆盘数据的买档或卖档的相邻档位的报价差 - ask_price float 卖价 - bid_price float 买价 - ask_vol float 卖量 - bid_vol float 买量 - enable_margin bool 是否可融资,如果为true,后两个字段才有意义 - mortgage_ratio float 股票抵押率(该字段为百分比字段,默认不展示%) + ask_price float 卖价 + bid_price float 买价 + ask_vol float 卖量 + bid_vol float 买量 + enable_margin bool 是否可融资,如果为true,后两个字段才有意义 + mortgage_ratio float 股票抵押率(该字段为百分比字段,默认不展示%) long_margin_initial_ratio float 融资初始保证金率(该字段为百分比字段,默认不展示%) - enable_short_sell bool 是否可卖空,如果为true,后三个字段才有意义 - short_sell_rate float 卖空参考利率(该字段为百分比字段,默认不展示%) - short_available_volume int 剩余可卖空数量 + enable_short_sell bool 是否可卖空,如果为true,后三个字段才有意义 + short_sell_rate float 卖空参考利率(该字段为百分比字段,默认不展示%) + short_available_volume int 剩余可卖空数量 short_margin_initial_ratio float 卖空(融券)初始保证金率(该字段为百分比字段,默认不展示% amplitude float 振幅(该字段为百分比字段,默认不展示%) avg_price float 平均价 @@ -516,8 +524,8 @@ def get_market_snapshot(self, code_list): option_vega float 希腊值 Vega option_theta float 希腊值 Theta option_rho float 希腊值 Rho - option_net_open_interest int 净未平仓合约数 - option_expiry_date_distance int 距离到期日天数 + option_net_open_interest int 净未平仓合约数 + option_expiry_date_distance int 距离到期日天数 option_contract_nominal_value float 合约名义金额 option_owner_lot_multiplier float 相等正股手数,指数期权无该字段 option_area_type str 期权地区类型,见 OptionAreaType_ diff --git a/futu/quote/quote_query.py b/futu/quote/quote_query.py index fd41ac6..203e2e2 100644 --- a/futu/quote/quote_query.py +++ b/futu/quote/quote_query.py @@ -207,7 +207,7 @@ def __init__(self): pass @classmethod - def pack_req(cls, market, conn_id, start_date=None, end_date=None): + def pack_req(cls, market, conn_id, start_date=None, end_date=None, code=None): # '''Parameter check''' r, v = TradeDateMarket.to_number(market) @@ -216,7 +216,7 @@ def pack_req(cls, market, conn_id, start_date=None, end_date=None): % (market) return RET_ERROR, error_str, None - if start_date is None: + if start_date is None: # start为往前365天 today = datetime.today() start = today - timedelta(days=365) @@ -227,7 +227,7 @@ def pack_req(cls, market, conn_id, start_date=None, end_date=None): return ret, msg, None start_date = msg - if end_date is None: + if end_date is None: # end为当前时间 today = datetime.today() end_date = today.strftime("%Y-%m-%d") else: @@ -236,12 +236,26 @@ def pack_req(cls, market, conn_id, start_date=None, end_date=None): return ret, msg, None end_date = msg + """check stock_code 股票""" + market_code = None + stock_code = None + if code is not None: + ret, content = split_stock_str(code) + if ret == RET_ERROR: + error_str = content + return RET_ERROR, error_str, None + market_code, stock_code = content + # pack to json from futu.common.pb.Qot_RequestTradeDate_pb2 import Request req = Request() req.c2s.market = v req.c2s.beginTime = start_date req.c2s.endTime = end_date + if market_code is not None: + req.c2s.security.market = market_code + if stock_code is not None: + req.c2s.security.code = stock_code return pack_pb_req(req, ProtoId.Qot_RequestTradeDate, conn_id) From caa2f136ee07a2b123c79b2d75bbb524d7873e53 Mon Sep 17 00:00:00 2001 From: byblehua Date: Thu, 15 Jul 2021 20:34:53 +0800 Subject: [PATCH 36/36] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- futu/VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/futu/VERSION.txt b/futu/VERSION.txt index f9cccf0..89908a4 100644 --- a/futu/VERSION.txt +++ b/futu/VERSION.txt @@ -1 +1 @@ -5.5.1708 +5.6.1808