Skip to content

Commit

Permalink
条件选二期接口实现,待联调
Browse files Browse the repository at this point in the history
  • Loading branch information
FutunnOpen committed Oct 16, 2019
1 parent c7f056b commit 571b4af
Show file tree
Hide file tree
Showing 6 changed files with 792 additions and 81 deletions.
111 changes: 79 additions & 32 deletions futu/common/constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -1937,6 +1937,8 @@ def load_dic(self):

class StockField(FtEnum):
NONE = "N/A" # 未知
# 以下是简单数据过滤所支持的枚举
simple_enum_begin = 0
STOCK_CODE = "STOCK_CODE" # 股票代码,不能填区间上下限值。
STOCK_NAME = "STOCK_NAME" # 股票名称,不能填区间上下限值。
CUR_PRICE = "CUR_PRICE" # 最新价 例如填写[10,20]值区间
Expand All @@ -1958,46 +1960,91 @@ class StockField(FtEnum):
# 市盈率TTM 例如填写[-10,20.5]值区间
PE_TTM = "PE_TTM"
PB_RATE = "PB_RATE" # 市净率 例如填写[0,0.8]值区间
CHANGE_RATE_5MIN = "CHANGE_RATE_5MIN" # 五分钟价格涨跌幅
CHANGE_RATE_BEGIN_YEAR = "CHANGE_RATE_BEGIN_YEAR" # 年初至今价格涨跌幅

# 以下是累积数据过滤所支持的枚举
acc_enum_begin = 100
CHANGE_RATE = "CHANGE_RATE" # 涨跌幅
CHANGE_VAL = "CHANGE_VAL" # 涨跌额
AMPLITUDE = "AMPLITUDE" # 振幅
VOLUME = "VOLUME" # 成交量
TURNOVER = "TURNOVER" # 成交额
TURNOVER_RATE = "TURNOVER_RATE" # 换手率

# 以下是财务数据过滤所支持的枚举
financial_enum_begin = 200
NET_PROFIT = "NET_PROFIT" # 净利润
NET_PROFIX_GROWTH = "NET_PROFIX_GROWTH" # 净利润增长率
GROSS_PROFIT = "GROSS_PROFIT" # 毛利润
GROSS_PROFIT_GROWTH = "GROSS_PROFIT_GROWTH" # 毛利润增长率
SUM_OF_BUSINESS = "SUM_OF_BUSINESS" # 营业额
TURNOVER_GROWTH = "TURNOVER_GROWTH" # 营业额增长率
NET_PROFIT_RATE = "NET_PROFIT_RATE" # 净利率
GROSS_PROFIT_RATE = "GROSS_PROFIT_RATE" # 毛利率
DEBT_ASSET_RATE = "DEBT_ASSET_RATE" # 资产负债率
RETURN_ON_EQUITY_RATE = "RETURN_ON_EQUITY_RATE" # 净资产收益率

def load_dic(self):
return {
self.NONE: Qot_StockFilter_pb2.StockField_Unknown,
self.STOCK_CODE: Qot_StockFilter_pb2.StockField_StockCode,
self.STOCK_NAME: Qot_StockFilter_pb2.StockField_StockName,
self.CUR_PRICE: Qot_StockFilter_pb2.StockField_CurPrice,
self.CUR_PRICE_TO_HIGHEST52_WEEKS_RATIO: Qot_StockFilter_pb2.StockField_CurPriceToHighest52WeeksRatio,
self.CUR_PRICE_TO_LOWEST52_WEEKS_RATIO: Qot_StockFilter_pb2.StockField_CurPriceToLowest52WeeksRatio,
self.HIGH_PRICE_TO_HIGHEST52_WEEKS_RATIO: Qot_StockFilter_pb2.StockField_HighPriceToHighest52WeeksRatio,
self.LOW_PRICE_TO_LOWEST52_WEEKS_RATIO: Qot_StockFilter_pb2.StockField_LowPriceToLowest52WeeksRatio,
self.VOLUME_RATIO: Qot_StockFilter_pb2.StockField_VolumeRatio,
self.BID_ASK_RATIO: Qot_StockFilter_pb2.StockField_BidAskRatio,
self.LOT_PRICE: Qot_StockFilter_pb2.StockField_LotPrice,
self.MARKET_VAL: Qot_StockFilter_pb2.StockField_MarketVal,
self.PE_ANNUAL: Qot_StockFilter_pb2.StockField_PeAnnual,
self.PE_TTM: Qot_StockFilter_pb2.StockField_PeTTM,
self.PB_RATE: Qot_StockFilter_pb2.StockField_PbRate
self.NONE: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_Unknown,
self.STOCK_CODE: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_StockCode,
self.STOCK_NAME: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_StockName,
self.CUR_PRICE: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_CurPrice,
self.CUR_PRICE_TO_HIGHEST52_WEEKS_RATIO: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_CurPriceToHighest52WeeksRatio,
self.CUR_PRICE_TO_LOWEST52_WEEKS_RATIO: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_CurPriceToLowest52WeeksRatio,
self.HIGH_PRICE_TO_HIGHEST52_WEEKS_RATIO: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_HighPriceToHighest52WeeksRatio,
self.LOW_PRICE_TO_LOWEST52_WEEKS_RATIO: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_LowPriceToLowest52WeeksRatio,
self.VOLUME_RATIO: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_VolumeRatio,
self.BID_ASK_RATIO: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_BidAskRatio,
self.LOT_PRICE: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_LotPrice,
self.MARKET_VAL: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_MarketVal,
self.PE_ANNUAL: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_PeAnnual,
self.PE_TTM: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_PeTTM,
self.PB_RATE: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_PbRate,
self.CHANGE_RATE_5MIN: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_ChangeRate5min,
self.CHANGE_RATE_BEGIN_YEAR: self.simple_enum_begin + Qot_StockFilter_pb2.StockField_ChangeRateBeginYear,

self.CHANGE_RATE: self.acc_enum_begin + Qot_StockFilter_pb2.AccumulateField_ChangeRate,
self.CHANGE_VAL: self.acc_enum_begin + Qot_StockFilter_pb2.AccumulateField_ChangeVal,
self.AMPLITUDE: self.acc_enum_begin + Qot_StockFilter_pb2.AccumulateField_Amplitude,
self.VOLUME: self.acc_enum_begin + Qot_StockFilter_pb2.AccumulateField_Volume,
self.TURNOVER: self.acc_enum_begin + Qot_StockFilter_pb2.AccumulateField_Turnover,
self.TURNOVER_RATE: self.acc_enum_begin + Qot_StockFilter_pb2.AccumulateField_TurnoverRate,

self.NET_PROFIT: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_NetProfit,
self.NET_PROFIX_GROWTH: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_NetProfitGrowth,
self.GROSS_PROFIT: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_GrossProfit,
self.GROSS_PROFIT_GROWTH: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_GrossProfitGrowth,
self.SUM_OF_BUSINESS: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_Turnover,
self.TURNOVER_GROWTH: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_TurnoverGrowth,
self.NET_PROFIT_RATE: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_NetProfitRate,
self.GROSS_PROFIT_RATE: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_GrossProfitRate,
self.DEBT_ASSET_RATE: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_DebtAssetRate,
self.RETURN_ON_EQUITY_RATE: self.financial_enum_begin + Qot_StockFilter_pb2.FinancialField_ReturnOnEquityRate,
}

# 选股使用,因为选股不分沪深


# class StockMarket(FtEnum):
# NONE = "N/A" # 未知
# HK = "HK" # 港股
# US = "US" # 美股
# CN = "CN" # A股
#
# def load_dic(self):
# return {
# self.NONE: Qot_StockFilter_pb2.StockMarket_Unknown,
# self.HK: Qot_StockFilter_pb2.StockMarket_HK,
# self.US: Qot_StockFilter_pb2.StockMarket_US,
# self.CN: Qot_StockFilter_pb2.StockMarket_CN
# }
#财务指标的周期
class FinancialQuarter(FtEnum):
NONE = "N/A"
ANNUAL = "ANNUAL" # 年报
LATEST = "LATEST" # 最新一季报
SIX_QUARTER = "SIX_QUARTER" # Q6中期报
NINE_QUARTER = "NINE_QUARTER" # Q9三季报

def load_dic(self):
return {
self.NONE: Qot_StockFilter_pb2.FinancialQuarter_Unknown,
self.ANNUAL: Qot_StockFilter_pb2.FinancialQuarter_Annual,
self.LATEST: Qot_StockFilter_pb2.FinancialQuarter_Latest,
self.SIX_QUARTER: Qot_StockFilter_pb2.FinancialQuarter_SixQuarter,
self.NINE_QUARTER: Qot_StockFilter_pb2.FinancialQuarter_NineQuarter,
}

#
class CodeChangeType(FtEnum):
UNKOWN = "UNKOWN" # 未知
NONE = "N/A"
GEM_TO_MAIN = "GEM_TO_MAIN" # 创业板转主板
UNPAID = "UNPAID" # 买卖未缴款供股权
CHANGE_LOT = "CHANGE_LOT" # 更改买卖单位
Expand All @@ -2009,7 +2056,7 @@ class CodeChangeType(FtEnum):

def load_dic(self):
return {
self.UNKOWN: Qot_GetCodeChange_pb2.CodeChangeType_Unkown,
self.NONE: Qot_GetCodeChange_pb2.CodeChangeType_Unkown,
self.GEM_TO_MAIN: Qot_GetCodeChange_pb2.CodeChangeType_GemToMain,
self.UNPAID: Qot_GetCodeChange_pb2.CodeChangeType_Unpaid,
self.CHANGE_LOT: Qot_GetCodeChange_pb2.CodeChangeType_ChangeLot,
Expand Down
82 changes: 82 additions & 0 deletions futu/common/pb/Qot_StockFilter.proto
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,48 @@ enum StockField
StockField_PeAnnual = 12; // 市盈率 (静态) 例如填写[-8,65.3]值区间
StockField_PeTTM = 13; // 市盈率TTM 例如填写[-10,20.5]值区间
StockField_PbRate = 14; // 市净率 例如填写[0,0.8]值区间
StockField_ChangeRate5min = 15; // 五分钟价格涨跌幅
StockField_ChangeRateBeginYear = 16; // 年初至今价格涨跌幅
};

// 累积属性
enum AccumulateField
{
AccumulateField_Unknown = 0; // 未知
AccumulateField_ChangeRate = 1; // 涨跌幅
AccumulateField_ChangeVal = 2; // 涨跌额
AccumulateField_Amplitude = 3; // 振幅
AccumulateField_Volume = 4; // 成交量
AccumulateField_Turnover = 5; // 成交额
AccumulateField_TurnoverRate = 6; // 换手率
}

// 财务属性
enum FinancialField
{
FinancialField_Unknown = 0; // 未知
FinancialField_NetProfit = 1; // 净利润
FinancialField_NetProfitGrowth = 2; // 净利润增长率
FinancialField_GrossProfit = 3; // 毛利润
FinancialField_GrossProfitGrowth = 4; // 毛利润增长率
FinancialField_Turnover = 5; // 营业额
FinancialField_TurnoverGrowth = 6; // 营业额增长率
FinancialField_NetProfitRate = 7; // 净利率
FinancialField_GrossProfitRate = 8; // 毛利率
FinancialField_DebtAssetRate = 9; // 资产负债率
FinancialField_ReturnOnEquityRate = 10; // 净资产收益率
}

// 财报时间
enum FinancialQuarter
{
FinancialQuarter_Unknown = 0; // 未知
FinancialQuarter_Annual = 1; // 年报
FinancialQuarter_Latest = 2; // 最新一季报
FinancialQuarter_SixQuarter = 3; // Q6中期报
FinancialQuarter_NineQuarter = 4; // Q9三季报
}

// 排序方向
enum SortDir
{
Expand All @@ -43,19 +83,59 @@ message BaseFilter
optional int32 sortDir = 5; // SortDir 排序方向,默认不排序。
};

// 累积属性筛选
message AccumulateFilter
{
required int32 field = 1; // AccumulateField 累积属性
optional double filterMin = 2; // 区间下限,闭区间
optional double filterMax = 3; // 区间上限,闭区间
optional bool isNoFilter = 4; // 该字段是否需要筛选。当该字段为true时,表示不需要筛选,以上filterMin,filterMax区间两个字段无效。默认True,不需要筛选。
optional int32 sortDir = 5; // SortDir 排序方向,默认不排序。
required int32 days = 6; // 近几日,累积时间
}

// 财务属性筛选
message FinancialFilter
{
required int32 field = 1; // FinancialField 财务属性
optional double filterMin = 2; // 区间下限,闭区间
optional double filterMax = 3; // 区间上限,闭区间
optional bool isNoFilter = 4; // 该字段是否需要筛选。当该字段为true时,表示不需要筛选,以上filterMin,filterMax区间两个字段无效。默认True,不需要筛选。
optional int32 sortDir = 5; // SortDir 排序方向,默认不排序。
required int32 quarter = 6; // FinancialQuarter 财报累积时间
}

// 简单属性数据
message BaseData
{
required int32 field = 1; // StockField 简单属性
required double value = 2;
};

// 累积指标数据
message AccumulateData
{
required int32 field = 1; // AccumulateField 累积属性
required double value = 2;
required int32 days = 3; // 近几日,累积时间
}

// 财务属性数据
message FinancialData
{
required int32 field = 1; // FinancialField 财务属性
required double value = 2;
required int32 quarter = 3; // FinancialQuarter 财报累积时间
}

// 返回的股票数据
message StockData
{
required Qot_Common.Security security = 1; // 股票
required string name = 2; // 股票名称
repeated BaseData baseDataList = 3; // 筛选后的简单属性数据
repeated AccumulateData accumulateDataList = 4; // 筛选后的累积属性数据
repeated FinancialData financialDataList = 5; // 筛选后的财务属性数据
};

message C2S
Expand All @@ -66,6 +146,8 @@ message C2S
// 以下为筛选条件,可选字段,不填表示不过滤
optional Qot_Common.Security plate = 4; // 板块
repeated BaseFilter baseFilterList = 5; // 简单行情过滤器
repeated AccumulateFilter accumulateFilterList = 6; // 累积行情过滤器
repeated FinancialFilter financialFilterList = 7; // 财务行情过滤器
}

message S2C
Expand Down
Loading

0 comments on commit 571b4af

Please sign in to comment.