# neurostats_API
- [檔案架構](#檔案架構)
- [使用方法](#使用方法)
- [下載](#下載)
- [價值投資](#得到最新一期的評價資料與歷年評價)
- [歷史評價](#得到指定公司的歷來評價)
- [財務分析-重要指標](#財務分析-重要指標)
- [月營收表](#回傳月營收表)
- [損益表](#損益表)
- [資產負債表](#資產負債表)
- [現金流量表](#現金流量表)
- [法人交易](#法人交易)
- [資券餘額](#資券餘額)
- [版本紀錄](#版本紀錄)
## 檔案架構
```
├── neurostats_API
│ ├── __init__.py
│ ├── cli.py
│ ├── main.py
│ ├── fetchers
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── balance_sheet.py
│ │ ├── cash_flow.py
│ │ ├── finance_overview.py
│ │ ├── profit_lose.py
│ │ ├── tech.py
│ │ ├── value_invest.py
│ ├── tools
│ │ ├── balance_sheet.yaml
│ │ ├── cash_flow_percentage.yaml
│ │ ├── finance_overview_dict.yaml
│ │ ├── profit_lose.yaml
│ │ └── seasonal_data_field_dict.txt
│ └── utils
│ ├──__init__.py
│ ├── data_process.py
│ ├── datetime.py
│ ├── db_client.py
│ └── fetcher.py
├── test
│ ├── __init__.py
│ └── test_fetchers.py
├── Makefile
├── MANIFEST.in
├── README.md
├── requirement.txt
├── setup.py
```
- `neurostats_API`: 主要的package運行內容
- `fetchers`: 回傳service內容的fetcher檔案夾
- `base.py`: 基本架構
- `value_invest.py`: iFa.ai -> 價值投資
- `finance_overview.py`: iFa.ai -> 財務分析 -> 重要指標
- `tech.py`: iFa.ai -> 技術指標
- `tools`: 存放各種設定檔與資料庫index對應領域的dictionary
- `utils`:
- `fetcher.py`: Service的舊主架構, 月營收, 損益表, 資產負債表, 資產收益表目前在這裡
- `data_process.py`: config資料的讀取
- `datetime.py`: 時間格式,包括日期,年度,月份,日,季度
## 下載
```
pip install neurostats-API
```
### 確認下載成功
```Python
>>> import neurostats_API
>>> print(neurostats_API.__version__)
0.0.25
```
### 得到最新一期的評價資料與歷年評價
``` Python
from neurostats_API.utils import ValueFetcher, DBClient
db_client = DBClient("<連接的DB位置>").get_client()
ticker = "2330" # 換成tw50內任意ticker
fetcher = ValueFetcher(ticker, db_client)
fetcher.query_data()
```
#### 回傳(2330為例)
```Python
{
"ticker": 股票代碼,
"company_name": 公司中文名稱,
"daily_data":{
## 以下八個是iFa項目
"P_E": 本益比,
"P_B": 股價,
"P_FCF": 股價自由現金流比,
"P_S": 股價營收比,
"EV_EBIT: ,
"EV_EBITDA": ,
"EV_OPI": ,
"EV_S";
## 以上八個是iFa項目
"close": 收盤價,
}
"yearly_data": pd.DataFrame (下表格為範例)
year P_E P_FCF P_B P_S EV_OPI EV_EBIT EV_EBITDA EV_S
0 107 16.68 29.155555 3.71 11.369868 29.837201 28.798274 187.647704 11.107886
1 108 26.06 67.269095 5.41 17.025721 50.145736 47.853790 302.526388 17.088863
2 109 27.98 95.650723 7.69 22.055379 53.346615 51.653834 205.847232 22.481951
3 110 27.83 149.512474 7.68 22.047422 55.398018 54.221387 257.091893 22.615355
4 111 13.11 48.562021 4.25 11.524975 24.683850 24.226554 66.953260 12.129333
5 112 17.17 216.371410 4.59 16.419533 40.017707 37.699267 105.980652 17.127656
6 過去4季 NaN -24.929987 NaN 4.300817 83.102921 55.788996 -1073.037084 7.436656
}
```
> 這裡有Nan是因為本益比與P/B等資料沒有爬到最新的時間
### 得到指定公司的歷來評價
``` Python
from neurostats_API.utils import ValueFetcher, DBClient
db_client = DBClient("<連接的DB位置>").get_client()
ticker = "2330" # 換成tw50內任意ticker
fetcher = ValueFetcher(ticker, db_client)
fetcher.query_value_serie()
```
#### 回傳(2330為例)
```Python
{
'EV_EBIT': EV_EBIT
2014-01-02 NaN
2014-01-03 NaN
... ...
2024-12-12 15.021431
2024-12-13 15.088321
,
'EV_OPI': EV_OPI
2014-01-03 NaN
... ...
2024-12-12 15.999880
2024-12-13 16.071128
,
'EV_S': EV_S
2014-01-02 NaN
2014-01-03 NaN
... ...
2024-12-12 6.945457
2024-12-13 6.976385
,
'P_B': P_B
2014-01-02 NaN
2014-01-03 NaN
... ...
2024-12-12 6.79
2024-12-13 6.89
,
'P_E': P_E
2014-01-02 NaN
2014-01-03 NaN
... ...
2024-12-12 26.13
2024-12-13 26.50
,
'P_FCF': P_FCF
2014-01-02 NaN
2014-01-03 NaN
... ...
2024-12-12 45.302108
2024-12-13 45.515797
,
'P_S': P_S
2014-01-02 NaN
2014-01-03 NaN
... ...
2024-12-12 6.556760
2024-12-13 6.587688
}
```
### 回傳月營收表
``` Python
from neurostats_API.fetchers import MonthRevenueFetcher, DBClient
db_client = DBClient("<連接的DB位置>").get_client()
ticker = "2330" # 換成tw50內任意ticker
fetcher = MonthRevenueFetcherFetcher(ticker, db_client)
data = fetcher.query_data()
```
#### 回傳
```Python
{
"ticker": "2330",
"company_name": "台積電",
"month_revenue":
year 2024 ... 2014
month ...
grand_total 2.025847e+09 ... NaN
12 NaN ... 69510190.0
... ... ... ...
2 1.816483e+08 ... 46829051.0
1 2.157851e+08 ... 51429993.0
"this_month_revenue_over_years":
year 2024 ... 2015
revenue 2.518727e+08 ... 64514083.0
revenue_increment_ratio 3.960000e+01 ... -13.8
... ... ... ...
YoY_5 1.465200e+02 ... NaN
YoY_10 NaN ... NaN
"grand_total_over_years":
year 2024 ... 2015
grand_total 2.025847e+09 ... 6.399788e+08
grand_total_increment_ratio 3.187000e+01 ... 1.845000e+01
... ... ... ...
grand_total_YoY_5 1.691300e+02 ... NaN
grand_total_YoY_10 NaN ... NaN
"recent_month_revenue":
date 2024/11 2024/10 ... 2024/1 2023/12
revenue 51243946000 45451116000 ... 56451418000 55329015000
MoM 12.75% -14.77% ... 2.03% -0.52%
YoY -7.87% -30.00% ... -7.36% -11.13%
total_YoY -6.93% -6.84% ... -7.36% -15.97%
accum_YoY 85.84% 78.65% ... 7.92% 84.03%
# total_YoY為當月累計營收 / 上一年的當月累計營收
# accum_YoY為當月累計營收 / 上一年的總營收
}
```
- `'ticker'`: 股票代碼
- `'company_name'`: 公司名稱
- `'month_revenue'`: 歷年的月營收以及到今年最新月份累計的月營收表格
- `'this_month_revenue_over_years'`: 今年這個月的月營收與歷年同月份的營收比較
- `'grand_total_over_years'`: 累計至今年這個月的月營收與歷年的比較
> 大部分資料(成長率)缺失是因為尚未計算,僅先填上已經有的資料
### 財務分析: 重要指標
對應https://ifa.ai/tw-stock/2330/finance-overview
```Python
from neurostats_API.fetchers import FinanceOverviewFetcher, DBClient
db_client = DBClient("<連接的DB位置>").get_client()
ticker = "2330"
fetcher = FinanceOverviewFetcher(ticker = "2330", db_client = db_client)
data = fetcher.query_data()
```
#### 回傳
型態為Dict:
```Python
{
ticker: str #股票代碼,
company_name: str #公司名稱,
seasonal_data: Dict # 回傳資料
}
```
以下為seasonal_data目前回傳的key的中英對應(中文皆參照iFa.ai)
markdown
複製程式碼
| 英文 | 中文 |
|-----------------------------------|-----------------------------|
|**財務概況**|
| revenue | 營業收入 |
| gross_profit | 營業毛利 |
| operating_income | 營業利益 |
| net_income | 淨利 |
| operating_cash_flow | 營業活動之現金流 |
| invest_cash_flow | 投資活動之淨現金流 |
| financing_cash_flow | 籌資活動之淨現金流 |
|**每股財務狀況**|
| revenue_per_share | 每股營收 |
| gross_per_share | 每股營業毛利 |
| operating_income_per_share | 每股營業利益 |
| eps | 每股盈餘(EPS) |
| operating_cash_flow_per_share | 每股營業現金流 |
| fcf_per_share | 每股自由現金流 |
| debt_to_operating_cash_flow | 每股有息負債 |
| equity | 每股淨值 |
|**獲利能力**|
| roa | 資產報酬率 |
| roe | 股東權益報酬率 |
| gross_over_asset | 營業毛利÷總資產 |
| roce | ROCE |
| gross_profit_margin | 營業毛利率 |
| operation_profit_rate | 營業利益率 |
| net_income_rate | 淨利率 |
| operating_cash_flow_profit_rate | 營業現金流利潤率 |
|**成長動能**|
| revenue_YoY | 營收年成長率 |
| gross_prof_YoY | 營業毛利年成長率 |
| operating_income_YoY | 營業利益年成長率 |
| net_income_YoY | 淨利年成長率 |
|**營運指標**|
| dso | 應收帳款收現天數 |
| account_receive_over_revenue | 應收帳款佔營收比率 |
| dio | 平均售貨天數 |
| inventories_revenue_ratio | 存貨佔營收比率 |
| dpo | 應付帳款付現日天數 |
| cash_of_conversion_cycle | 現金循環週期 |
| asset_turnover | 總資產週轉率 |
| applcation_turnover | 不動產、廠房及設備週轉率 |
|**財務韌性**|
| current_ratio | 流動比率 |
| quick_ratio | 速動比率 |
| debt_to_equity_ratio | 負債權益比率 |
| net_debt_to_equity_ratio | 淨負債權益比率 |
| interest_coverage_ratio | 利息保障倍數 |
| debt_to_operating_cash_flow | 有息負債÷營業活動現金流 |
| debt_to_free_cash_flow | 有息負債÷自由現金流 |
| cash_flow_ratio | 現金流量比率 |
|**資產負債表**|
| current_assets | 流動資產 |
| current_liabilities | 流動負債 |
| non_current_assets | 非流動資產 |
| non_current_liabilities| 非流動負債 |
| total_asset | 資產總額 |
| total_liabilities | 負債總額 |
| equity | 權益 |
#### 以下數值未在回傳資料中,待資料庫更新
|英文|中文|
|---|----|
|**成長動能**|
| operating_cash_flow_YoY | 營業現金流年成長率 |
| fcf_YoY | 自由現金流年成長率 |
| operating_cash_flow_per_share_YoY | 每股營業現金流年成長率 |
| fcf_per_share_YoY | 每股自由現金流年成長率 |
### 損益表
```Python
from neurostats_API.fetchers import ProfitLoseFetcher, DBClient
db_client = DBClient("<連接的DB位置>").get_client()
fetcher = ProfitLoseFetcher(db_client)
ticker = "2330" # 換成tw50內任意ticker
data = fetcher.query_data()
```
#### 回傳
因項目眾多,不列出詳細內容,僅列出目前會回傳的項目
```Python
{
"ticker": "2330"
"company_name": "台積電"
# 以下皆為pd.DataFrame
"profit_lose": #損益表,
"grand_total_profit_lose": #今年度累計損益表,
# 營業收入
"revenue": # 營收成長率
"grand_total_revenue": # 營收累計成場濾
# 毛利
"gross_profit": # 毛利成長率
"grand_total_gross_profit": # 累計毛利成長率
"gross_profit_percentage": # 毛利率
"grand_total_gross_profit_percentage" # 累計毛利率
# 營利
"operating_income": # 營利成長率
"grand_total_operating_income": # 累計營利成長率
"operating_income_percentage": # 營利率
"grand_total_operating_income_percentage": # 累計營利率
# 稅前淨利
"net_income_before_tax": # 稅前淨利成長率
"grand_total_net_income_before_tax": # 累計稅前淨利成長率
"net_income_before_tax_percentage": # 稅前淨利率
"grand_total_net_income_before_tax_percentage": # 累計稅前淨利率
# 本期淨利
"net_income": # 本期淨利成長率
"grand_total_net_income": # 累計本期淨利成長率
"net_income_percentage": # 本期淨利率
"grand_total_income_percentage": # 累計本期淨利率
# EPS
"EPS": # EPS
"EPS_growth": # EPS成長率
"grand_total_EPS": # 累計EPS
"grand_total_EPS_growth": # 累計EPS成長率
}
```
### 資產負債表
``` Python
from neurostats_API.fetchers import BalanceSheetFetcher, DBClient
db_client = DBClient("<連接的DB位置>").get_client()
ticker = "2330" # 換成tw50內任意ticker
fetcher = BalanceSheetFetcher(ticker, db_client)
fetcher.query_data()
```
#### 回傳
```Python
{
"ticker": "2330"
"company_name":"台積電"
"balance_sheet":
2024Q2_value ... 2018Q2_percentage
流動資產 NaN ... NaN
現金及約當現金 1.799127e+09 ... 30.79
... ... ... ...
避險之衍生金融負債-流動 NaN ... 0.00
負債準備-流動 NaN ... 0.00
"total_asset":
2024Q2_value ... 2018Q2_percentage
資產總額 5.982364e+09 ... 100.00
負債總額 2.162216e+09 ... 27.41
權益總額 3.820148e+09 ... 72.59
"current_asset":
2024Q2_value ... 2018Q2_percentage
流動資產合計 2.591658e+09 ... 46.7
"non_current_asset":
2024Q2_value ... 2018Q2_percentage
非流動資產合計 3.390706e+09 ... 53.3
"current_debt":
2024Q2_value ... 2018Q2_percentage
流動負債合計 1.048916e+09 ... 22.55
"non_current_debt":
2024Q2_value ... 2018Q2_percentage
非流動負債合計 1.113300e+09 ... 4.86
"equity":
2024Q2_value ... 2018Q2_percentage
權益總額 3.820148e+09 ... 72.59
}
```
- `'ticker'`: 股票代碼
- `'company_name'`: 公司名稱
- `'balance_sheet'`: 歷年當季資場負債表"全表"
- `'total_asset'`: 歷年當季資產總額
- `'current_asset'`: 歷年當季流動資產總額
- `'non_current_asset'`: 歷年當季非流動資產
- `'current_debt'`: 歷年當季流動負債
- `'non_current_debt'`: 歷年當季非流動負債
- `'equity'`: 歷年當季權益
### 現金流量表
``` Python
from neurostats_API.fetchers import CashFlowFetcher
db_client = DBClient("<連接的DB位置>").get_client()
ticker = 2330 # 換成tw50內任意ticker
fetcher = StatsFetcher(ticker, db_client)
fetcher.query()
```
#### 回傳
```Python
{
"ticker": "2330"
"company_name": "台積電"
"cash_flow":
2023Q3_value ... 2018Q3_percentage
營業活動之現金流量-間接法 NaN ... NaN
繼續營業單位稅前淨利(淨損) 700890335.0 ... 0.744778
... ... ... ...
以成本衡量之金融資產減資退回股款 NaN ... NaN
除列避險之金融負債∕避險 之衍生金融負債 NaN ... -0.000770
"CASHO":
2023Q3_value ... 2018Q3_percentage
營業活動之現金流量-間接法 NaN ... NaN
繼續營業單位稅前淨利(淨損) 700890335.0 ... 0.744778
... ... ... ...
持有供交易之金融資產(增加)減少 NaN ... 0.001664
負債準備增加(減少) NaN ... NaN
"CASHI":
2023Q3_value ... 2018Q3_percentage
投資活動之現金流量 NaN ... NaN
取得透過其他綜合損益按公允價值衡量之金融資產 -54832622.0 ... 0.367413
... ... ... ...
持有至到期日金融資產到期還本 NaN ... NaN
取得以成本衡量之金融資產 NaN ... NaN
"CASHF":
2023Q3_value ... 2018Q3_percentage
籌資活動之現金流量 NaN ... NaN
短期借款減少 0.0 ... NaN
... ... ... ...
以成本衡量之金融資產減資退回股款 NaN ... NaN
除列避險之金融負債∕避險 之衍生金融負債 NaN ... -0.00077
}
```
- `'ticker'`: 股票代碼
- `'company_name'`: 公司名稱
- `'cash_flow'`: 歷年當季現金流量表"全表"
- `'CASHO'`: 歷年當季營運活動之現金流量
- `'CASHI'`: 歷年當季投資活動之現金流量
- `'CASHF'`: 歷年當季籌資活動之現金流量
> 大部分資料缺失是因為尚未計算,僅先填上已經有的資料
## 籌碼面
### 法人交易
``` Python
from neurostats_API.fetchers import InstitutionFetcher
db_client = DBClient("<連接的DB位置>").get_client()
ticker = 2330 # 換成tw50內任意ticker
fetcher = StatsFetcher(ticker, db_client)
fetcher.query()
```
### 回傳
```Python
{ 'annual_trading':
close volume ... 自營商買賣超股數(避險) 三大法人買賣超股數
2024-12-02 1035.000000 31168404.0 ... -133215.0 11176252.0
2024-11-29 996.000000 40094983.0 ... 401044.0 -7880519.0
... ... ... ... ... ...
2023-12-05 559.731873 22229723.0 ... 33,400 -5,988,621
2023-12-04 563.659790 26847171.0 ... -135,991 -5,236,743
,
'latest_trading':
{ 'date': datetime.datetime(2024, 12, 2, 0, 0),
'table':
category variable ... over_buy_sell sell
0 foreign average_price ... 0.00 0.0
1 foreign percentage ... 0.00 0.0
.. ... ... ... ... ...
14 prop price ... 0.00 0.0
15 prop stock ... -133.22 217.2
}
,
'price':
{
'52weeks_range': '555.8038940429688-1100.0', # str
'close': 1035.0, # float
'last_close': 996.0, # float
'last_open': 995.0, # float
'last_range': '994.0-1010.0', # str
'last_volume': 40094.983, # float
'open': 1020.0, # float
'range': '1015.0-1040.0', # str
'volume': 32238.019 # float
}
}
```
- `annual_trading`: 對應一年內每日的交易量
- `latest_trading`: 對應當日交易
##### 欄位項目名稱
|英文|中文對應|
|----|-------|
|buy|買進|
|sell|賣出|
|over_buy_sell|買賣超|
##### category項目名稱
|英文|中文對應|
|----|-------|
|foreign|外資|
|prop|自營商|
|mutual|投信|
|institutional_investor|三大法人|
##### variable項目名稱
|英文|中文對應|
|----|-------|
|stock|股票張數|
|price|成交金額|
|average_price|均價|
|percetage|佔成交比重|
**成交金額以及均價因為資料沒有爬到而無法計算**
**仍然先將這項目加入,只是數值都會是0**
- `price`: 對應法人買賣頁面的今日與昨日交易價
請注意`range`, `last_range`, `52week_range`這三個項目型態為字串,其餘為float
##### 項目名稱
|英文|中文對應|
|----|-------|
|open|開盤價|
|close|收盤價|
|range|當日範圍|
|volume|成交張數|
|last_open|開盤價(昨)|
|last_close|收盤價(昨)|
|last_range|昨日範圍|
|last_volume|成交張數(昨)|
|52weeks_range|52週範圍|
## 資券餘額
對應iFa.ai -> 交易資訊 -> 資券變化
```Python
from neurostats_API.fetchers import MarginTradingFetcher
db_client = DBClient("<連接的DB位置>").get_client()
ticker = 2330 # 換成tw50內任意ticker
fetcher = MarginTradingFetcher(ticker, db_client)
fetcher.query()
```
### 回傳
```Python
{ 'annual_margin':
close volume ... 借券_次一營業日可限額 資券互抵
2024-12-03 1060.000000 29637.0 ... 12222.252 0.0
2024-12-02 1035.000000 31168.0 ... 12156.872 1.0
... ... ... ... ... ...
2023-12-05 559.731873 22230.0 ... 7838.665 1.0
2023-12-04 563.659790 26847.0 ... 7722.725 2.0
'latest_trading': {
'date': datetime.datetime(2024, 12, 3, 0, 0),
'margin_trading':
financing short_selling
買進 761.0 34.0
賣出 1979.0 44.0
... ... ...
次一營業日限額 6483183.0 6483183.0
現償 3.0 12.0
'security_offset': 0.0,
'stock_lending': stock_lending
當日賣出 10
當日還券 0
當日調整 0
當日餘額 14688
次一營業日可限額 12222
},
'price': { '52weeks_range': '555.8038940429688 - 1100.0',
'close': 1060.0,
'last_close': 1035.0,
'last_open': 1020.0,
'last_range': '1015.0 - 1040.0',
'last_volume': 31168.404,
'open': 1060.0,
'range': '1055.0 - 1065.0',
'volume': 29636.523}}
```
- `annual_trading`: 對應一年內每日的資券變化量
- `latest_trading`: 對應當日交易
##### 欄位項目名稱
|英文|中文對應|
|----|-------|
|financing|融資|
|short_selling|融券|
- `price`: 對應法人買賣頁面的今日與昨日交易價
##### 項目名稱
|英文|中文對應|
|----|-------|
|open|開盤價|
|close|收盤價|
|range|當日範圍|
|volume|成交張數|
|last_open|開盤價(昨)|
|last_close|收盤價(昨)|
|last_range|昨日範圍|
|last_volume|成交張數(昨)|
|52weeks_range|52週範圍|
請注意`range`, `last_range`, `52week_range`這三個項目型態為字串,其餘為float
## TEJ 相關
### 會計師簽證財務資料
```Python
from neurostats_API import FinanceReportFetcher
mongo_uri = <MongoDB 的 URI>
db_name = 'company' # 連接的DB名稱
collection_name = "TWN/AINVFQ1" # 連接的collection對象
fetcher = FinanceReportFetcher(
mongo_uri = mongo_uri,
db_name = db_name,
collection_name = collection_name
)
data = fetcher.get(
ticker = "2330" # 任意的股票代碼
fetch_mode = fetcher.FetchMode.QOQ_NOCAL # 取得模式
start_date = "2005-01-01",
end_date = "2024-12-31",
report_type = "Q",
indexes = []
) # -> pd.DataFrame or Dict[pd.DataFrame]
```
- `ticker`: 股票代碼
- `fetch_mode` : 取得模式,為`fetcher.YOY_NOCAL` 或 `fetcher.QOQ_NOCAL`
- `YOY_NOCAL`: 以end_date為準,取得與end_date同季的歷年資料,時間範圍以start_date為起始
> 例如`start_date = "2020-07-01"`, `end_date = "2024-01-01"`,會回傳2020~2024的第一季資料
- `QOQ_NOCAL`: 時間範圍內的每季資料
- `QOQ`: 時間範圍內每季的每個index的數值以及QoQ
- `YoY`: 以end_date為準,取得與end_date同季的歷年資料以及成長率,時間範圍以start_date為起始
- `start_date`: 開始日期,不設定時預設為`2005-01-01`
- `end_date`: 結束日期,不設定時預設為資料庫最新資料的日期
- `report_type`: 選擇哪種報告,預設為`Q`
- `A`: 當年累計
- `Q`: 當季數值
- `TTM`: 移動四季 (包括當季在內,往前累計四個季度)
- `indexes`: 選擇的column,需要以TEJ提供的欄位名稱為準,不提供時或提供`[]`會回傳全部column
- 範例輸入: `['bp41', 'bp51']`
[TEJ資料集連結](https://tquant.tejwin.com/%E8%B3%87%E6%96%99%E9%9B%86/)
請看 `會計師簽證財務資料`
#### 回傳資料
##### `YOY_NOCAL` 與 `QOQ_NOCAL`
為回傳`pd.DataFrame`,column名稱為<年份>Q<季>, row名稱為指定財報項目
```Python
# fetch_mode = fetcher.FetchMode.QOQ_NOCAL
2024Q3 2024Q2 2024Q1
bp41 7.082005e+07 6.394707e+07 5.761001e+07
bp51 3.111298e+09 3.145373e+09 3.091985e+09
# fetch_mode = fetcher.FetchMode.YOY_NOCAL
2024Q3 2023Q3 2022Q3
bp41 7.082005e+07 5.377231e+07 6.201822e+07
bp51 3.111298e+09 3.173919e+09 2.453840e+09
```
##### `YOY` 與 `QOQ`
回傳為`Dict[pd.DataFrame]`, key 為指定的index, DataFrame中則是該index歷年的數值與成長率
成長率單位為`%`
```Python
# fetch_mode = fetcher.FetchMode.QOQ
{
'bp41':
2024Q3 2024Q2 2024Q1
value 7.082005e+07 6.394707e+07 5.761001e+07
growth 10.75% 11.00% 0.55%,
'bp51':
2024Q3 2024Q2 2024Q1
value 3.111298e+09 3.145373e+09 3.091985e+09
growth -1.08% 1.73% -0.42%
}
# fetch_mode = fetcher.FetchMode.YOY
{
'bp41':
2024Q3 2023Q3 2022Q3
value 7.082005e+07 5.377231e+07 6.201822e+07
YoY_1 31.70% -13.30% 41.31%
YoY_3 17.29% 9.56% 18.83%
YoY_5 13.89% 12.15% 16.43%
YoY_10 12.55% 13.56% 15.60% ,
'bp51':
2024Q3 2023Q3 2022Q3
value 3.111298e+09 3.173919e+09 2.453840e+09
YoY_1 -1.97% 29.34% 31.80%
YoY_3 18.67% 27.67% 26.39%
YoY_5 20.68% 24.80% 18.15%
YoY_10 14.20% 15.87% 15.51%
}
```
### 公司自結資料
```Python
from neurostats_API import FinanceReportFetcher
fetcher = FinanceReportFetcher(
mongo_uri = mongo_uri,
db_name = db_name,
collection_name = collection_name
)
data = fetcher.get(
ticker = "2330" # 任意的股票代碼
fetch_mode = fetcher.FetchMode.QOQ_NOCAL # 取得模式
start_date = "2005-01-01",
end_date = "2024-12-31",
report_type = "Q",
indexes = []
) # -> pd.DataFrame or Dict[pd.DataFrame]
```
- `ticker`: 股票代碼
- `fetch_mode` : 取得模式,為`fetcher.YOY_NOCAL` 或 `fetcher.QOQ_NOCAL`
- `YOY_NOCAL`: 以end_date為準,取得與end_date同季的歷年資料,時間範圍以start_date為起始
> 例如`start_date = "2020-07-01"`, `end_date = "2024-01-01"`,會回傳2020~2024的第一季資料
- `QOQ_NOCAL`: 時間範圍內的每季資料
- `QOQ`: 時間範圍內每季的每個index的數值以及QoQ
- `YoY`: 以end_date為準,取得與end_date同季的歷年資料以及成長率,時間範圍以start_date為起始
- `start_date`: 開始日期,不設定時預設為`2005-01-01`
- `end_date`: 結束日期,不設定時預設為資料庫最新資料的日期
- `report_type`: 選擇哪種報告,預設為`Q`
- `A`: 當年累計
- `Q`: 當季數值
- `TTM`: 移動四季 (包括當季在內,往前累計四個季度)
- `indexes`: 選擇的column,需要以TEJ提供的欄位名稱為準,不提供時或提供`[]`會回傳全部column
- 範例輸入: `['bp41', 'bp51']`
[TEJ資料集連結](https://tquant.tejwin.com/%E8%B3%87%E6%96%99%E9%9B%86/)
請看 `公司自結數`
### 開高低收
```Python
mongo_uri = <MongoDB 的 URI>
db_name = 'company' # 連接的DB名稱
collection_name = "TWN/APIPRCD" # 連接的collection對象
from neurostats_API import TEJStockPriceFetcher
fetcher = TEJStockPriceFetcher(
mongo_uri = mongo_uri,
db_name = db_name,
collection_name = collection_name
)
data = fetcher.get(
ticker = "2330" # 任意的股票代碼
start_date = "2005-01-01",
period = "3m"
) # -> pd.DataFrame
```
- `ticker`: 股票代碼
- `start_date`: 搜尋範圍的開始日期
- `period`: 搜尋的時間範圍長度
`period`與`start_date`同時存在時以period優先
Raw data
{
"_id": null,
"home_page": "https://github.com/NeurowattStats/NeuroStats_API.git",
"name": "neurostats-API",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": null,
"author": "JasonWang@Neurowatt",
"author_email": "jason@neurowatt.ai",
"download_url": "https://files.pythonhosted.org/packages/09/89/aa9be746b0dad93269d9f7862d1dc65ea03dcba25bc1596aee6b12ecd826/neurostats_api-0.0.25.tar.gz",
"platform": null,
"description": "# neurostats_API\n\n- [\u6a94\u6848\u67b6\u69cb](#\u6a94\u6848\u67b6\u69cb)\n- [\u4f7f\u7528\u65b9\u6cd5](#\u4f7f\u7528\u65b9\u6cd5)\n - [\u4e0b\u8f09](#\u4e0b\u8f09)\n - [\u50f9\u503c\u6295\u8cc7](#\u5f97\u5230\u6700\u65b0\u4e00\u671f\u7684\u8a55\u50f9\u8cc7\u6599\u8207\u6b77\u5e74\u8a55\u50f9)\n - [\u6b77\u53f2\u8a55\u50f9](#\u5f97\u5230\u6307\u5b9a\u516c\u53f8\u7684\u6b77\u4f86\u8a55\u50f9)\n - [\u8ca1\u52d9\u5206\u6790-\u91cd\u8981\u6307\u6a19](#\u8ca1\u52d9\u5206\u6790-\u91cd\u8981\u6307\u6a19)\n - [\u6708\u71df\u6536\u8868](#\u56de\u50b3\u6708\u71df\u6536\u8868)\n - [\u640d\u76ca\u8868](#\u640d\u76ca\u8868)\n - [\u8cc7\u7522\u8ca0\u50b5\u8868](#\u8cc7\u7522\u8ca0\u50b5\u8868)\n - [\u73fe\u91d1\u6d41\u91cf\u8868](#\u73fe\u91d1\u6d41\u91cf\u8868)\n - [\u6cd5\u4eba\u4ea4\u6613](#\u6cd5\u4eba\u4ea4\u6613)\n - [\u8cc7\u5238\u9918\u984d](#\u8cc7\u5238\u9918\u984d)\n - [\u7248\u672c\u7d00\u9304](#\u7248\u672c\u7d00\u9304)\n\n\n## \u6a94\u6848\u67b6\u69cb\n\n```\n\u251c\u2500\u2500 neurostats_API\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 cli.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 main.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 fetchers\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 base.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 balance_sheet.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 cash_flow.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 finance_overview.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 profit_lose.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 tech.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 value_invest.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 tools\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 balance_sheet.yaml\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 cash_flow_percentage.yaml\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 finance_overview_dict.yaml\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 profit_lose.yaml\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 seasonal_data_field_dict.txt\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 utils\n\u2502\u00a0\u00a0 \u251c\u2500\u2500__init__.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 data_process.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 datetime.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 db_client.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 fetcher.py\n\u251c\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2514\u2500\u2500 test_fetchers.py\n\u251c\u2500\u2500 Makefile\n\u251c\u2500\u2500 MANIFEST.in\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 requirement.txt\n\u251c\u2500\u2500 setup.py\n\n```\n- `neurostats_API`: \u4e3b\u8981\u7684package\u904b\u884c\u5167\u5bb9\n - `fetchers`: \u56de\u50b3service\u5167\u5bb9\u7684fetcher\u6a94\u6848\u593e\n - `base.py`: \u57fa\u672c\u67b6\u69cb\n - `value_invest.py`: iFa.ai -> \u50f9\u503c\u6295\u8cc7\n - `finance_overview.py`: iFa.ai -> \u8ca1\u52d9\u5206\u6790 -> \u91cd\u8981\u6307\u6a19\n - `tech.py`: iFa.ai -> \u6280\u8853\u6307\u6a19\n - `tools`: \u5b58\u653e\u5404\u7a2e\u8a2d\u5b9a\u6a94\u8207\u8cc7\u6599\u5eabindex\u5c0d\u61c9\u9818\u57df\u7684dictionary\n - `utils`: \n - `fetcher.py`: Service\u7684\u820a\u4e3b\u67b6\u69cb, \u6708\u71df\u6536, \u640d\u76ca\u8868, \u8cc7\u7522\u8ca0\u50b5\u8868, \u8cc7\u7522\u6536\u76ca\u8868\u76ee\u524d\u5728\u9019\u88e1\n - `data_process.py`: config\u8cc7\u6599\u7684\u8b80\u53d6\n - `datetime.py`: \u6642\u9593\u683c\u5f0f\uff0c\u5305\u62ec\u65e5\u671f,\u5e74\u5ea6,\u6708\u4efd,\u65e5,\u5b63\u5ea6\n\n## \u4e0b\u8f09\n```\npip install neurostats-API\n```\n### \u78ba\u8a8d\u4e0b\u8f09\u6210\u529f\n```Python \n>>> import neurostats_API\n>>> print(neurostats_API.__version__)\n0.0.25\n```\n\n### \u5f97\u5230\u6700\u65b0\u4e00\u671f\u7684\u8a55\u50f9\u8cc7\u6599\u8207\u6b77\u5e74\u8a55\u50f9\n``` Python\nfrom neurostats_API.utils import ValueFetcher, DBClient\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = \"2330\" # \u63db\u6210tw50\u5167\u4efb\u610fticker\nfetcher = ValueFetcher(ticker, db_client)\n\nfetcher.query_data()\n```\n\n#### \u56de\u50b3(2330\u70ba\u4f8b)\n```Python\n{\n \"ticker\": \u80a1\u7968\u4ee3\u78bc,\n \"company_name\": \u516c\u53f8\u4e2d\u6587\u540d\u7a31,\n \"daily_data\":{\n ## \u4ee5\u4e0b\u516b\u500b\u662fiFa\u9805\u76ee\n \"P_E\": \u672c\u76ca\u6bd4,\n \"P_B\": \u80a1\u50f9,\n \"P_FCF\": \u80a1\u50f9\u81ea\u7531\u73fe\u91d1\u6d41\u6bd4,\n \"P_S\": \u80a1\u50f9\u71df\u6536\u6bd4,\n \"EV_EBIT: ,\n \"EV_EBITDA\": ,\n \"EV_OPI\": ,\n \"EV_S\"; \n ## \u4ee5\u4e0a\u516b\u500b\u662fiFa\u9805\u76ee\n \"close\": \u6536\u76e4\u50f9,\n }\n\n \"yearly_data\": pd.DataFrame (\u4e0b\u8868\u683c\u70ba\u7bc4\u4f8b)\n year P_E P_FCF P_B P_S EV_OPI EV_EBIT EV_EBITDA EV_S\n 0 107 16.68 29.155555 3.71 11.369868 29.837201 28.798274 187.647704 11.107886\n 1 108 26.06 67.269095 5.41 17.025721 50.145736 47.853790 302.526388 17.088863\n 2 109 27.98 95.650723 7.69 22.055379 53.346615 51.653834 205.847232 22.481951\n 3 110 27.83 149.512474 7.68 22.047422 55.398018 54.221387 257.091893 22.615355\n 4 111 13.11 48.562021 4.25 11.524975 24.683850 24.226554 66.953260 12.129333\n 5 112 17.17 216.371410 4.59 16.419533 40.017707 37.699267 105.980652 17.127656\n 6 \u904e\u53bb4\u5b63 NaN -24.929987 NaN 4.300817 83.102921 55.788996 -1073.037084 7.436656\n}\n```\n> \u9019\u88e1\u6709Nan\u662f\u56e0\u70ba\u672c\u76ca\u6bd4\u8207P/B\u7b49\u8cc7\u6599\u6c92\u6709\u722c\u5230\u6700\u65b0\u7684\u6642\u9593\n\n### \u5f97\u5230\u6307\u5b9a\u516c\u53f8\u7684\u6b77\u4f86\u8a55\u50f9\n``` Python\nfrom neurostats_API.utils import ValueFetcher, DBClient\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = \"2330\" # \u63db\u6210tw50\u5167\u4efb\u610fticker\nfetcher = ValueFetcher(ticker, db_client)\n\nfetcher.query_value_serie()\n```\n#### \u56de\u50b3(2330\u70ba\u4f8b)\n```Python\n{\n'EV_EBIT': EV_EBIT\n 2014-01-02 NaN\n 2014-01-03 NaN\n ... ...\n 2024-12-12 15.021431\n 2024-12-13 15.088321\n,\n'EV_OPI': EV_OPI\n 2014-01-03 NaN\n ... ...\n 2024-12-12 15.999880\n 2024-12-13 16.071128\n,\n'EV_S': EV_S\n 2014-01-02 NaN\n 2014-01-03 NaN\n ... ...\n 2024-12-12 6.945457\n 2024-12-13 6.976385\n,\n'P_B': P_B\n 2014-01-02 NaN\n 2014-01-03 NaN\n ... ...\n 2024-12-12 6.79\n 2024-12-13 6.89\n,\n'P_E': P_E\n 2014-01-02 NaN\n 2014-01-03 NaN\n ... ...\n 2024-12-12 26.13\n 2024-12-13 26.50\n,\n'P_FCF': P_FCF\n 2014-01-02 NaN\n 2014-01-03 NaN\n ... ...\n 2024-12-12 45.302108\n 2024-12-13 45.515797\n,\n'P_S': P_S\n 2014-01-02 NaN\n 2014-01-03 NaN\n ... ...\n 2024-12-12 6.556760\n 2024-12-13 6.587688\n}\n```\n\n\n### \u56de\u50b3\u6708\u71df\u6536\u8868\n``` Python\nfrom neurostats_API.fetchers import MonthRevenueFetcher, DBClient\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = \"2330\" # \u63db\u6210tw50\u5167\u4efb\u610fticker\nfetcher = MonthRevenueFetcherFetcher(ticker, db_client)\ndata = fetcher.query_data()\n```\n\n#### \u56de\u50b3\n```Python\n{\n \"ticker\": \"2330\",\n \"company_name\": \"\u53f0\u7a4d\u96fb\",\n \"month_revenue\":\n year 2024 ... 2014\n month ...\n grand_total 2.025847e+09 ... NaN\n 12 NaN ... 69510190.0\n ... ... ... ...\n 2 1.816483e+08 ... 46829051.0\n 1 2.157851e+08 ... 51429993.0\n\n \"this_month_revenue_over_years\":\n year 2024 ... 2015\n revenue 2.518727e+08 ... 64514083.0\n revenue_increment_ratio 3.960000e+01 ... -13.8\n ... ... ... ...\n YoY_5 1.465200e+02 ... NaN\n YoY_10 NaN ... NaN\n\n \"grand_total_over_years\":\n year 2024 ... 2015\n grand_total 2.025847e+09 ... 6.399788e+08\n grand_total_increment_ratio 3.187000e+01 ... 1.845000e+01\n ... ... ... ...\n grand_total_YoY_5 1.691300e+02 ... NaN\n grand_total_YoY_10 NaN ... NaN\n\n \"recent_month_revenue\":\n date 2024/11 2024/10 ... 2024/1 2023/12\n revenue 51243946000 45451116000 ... 56451418000 55329015000\n MoM 12.75% -14.77% ... 2.03% -0.52%\n YoY -7.87% -30.00% ... -7.36% -11.13%\n total_YoY -6.93% -6.84% ... -7.36% -15.97%\n accum_YoY 85.84% 78.65% ... 7.92% 84.03%\n # total_YoY\u70ba\u7576\u6708\u7d2f\u8a08\u71df\u6536 / \u4e0a\u4e00\u5e74\u7684\u7576\u6708\u7d2f\u8a08\u71df\u6536\n # accum_YoY\u70ba\u7576\u6708\u7d2f\u8a08\u71df\u6536 / \u4e0a\u4e00\u5e74\u7684\u7e3d\u71df\u6536\n\n}\n```\n- `'ticker'`: \u80a1\u7968\u4ee3\u78bc\n- `'company_name'`: \u516c\u53f8\u540d\u7a31 \n- `'month_revenue'`: \u6b77\u5e74\u7684\u6708\u71df\u6536\u4ee5\u53ca\u5230\u4eca\u5e74\u6700\u65b0\u6708\u4efd\u7d2f\u8a08\u7684\u6708\u71df\u6536\u8868\u683c \n- `'this_month_revenue_over_years'`: \u4eca\u5e74\u9019\u500b\u6708\u7684\u6708\u71df\u6536\u8207\u6b77\u5e74\u540c\u6708\u4efd\u7684\u71df\u6536\u6bd4\u8f03\n- `'grand_total_over_years'`: \u7d2f\u8a08\u81f3\u4eca\u5e74\u9019\u500b\u6708\u7684\u6708\u71df\u6536\u8207\u6b77\u5e74\u7684\u6bd4\u8f03\n\n> \u5927\u90e8\u5206\u8cc7\u6599(\u6210\u9577\u7387)\u7f3a\u5931\u662f\u56e0\u70ba\u5c1a\u672a\u8a08\u7b97\uff0c\u50c5\u5148\u586b\u4e0a\u5df2\u7d93\u6709\u7684\u8cc7\u6599\n\n\n### \u8ca1\u52d9\u5206\u6790: \u91cd\u8981\u6307\u6a19\n\u5c0d\u61c9https://ifa.ai/tw-stock/2330/finance-overview\n```Python\nfrom neurostats_API.fetchers import FinanceOverviewFetcher, DBClient\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = \"2330\"\nfetcher = FinanceOverviewFetcher(ticker = \"2330\", db_client = db_client)\ndata = fetcher.query_data()\n```\n\n#### \u56de\u50b3\n\u578b\u614b\u70baDict:\n```Python\n{\n ticker: str #\u80a1\u7968\u4ee3\u78bc,\n company_name: str #\u516c\u53f8\u540d\u7a31,\n seasonal_data: Dict # \u56de\u50b3\u8cc7\u6599\n}\n```\n\n\u4ee5\u4e0b\u70baseasonal_data\u76ee\u524d\u56de\u50b3\u7684key\u7684\u4e2d\u82f1\u5c0d\u61c9(\u4e2d\u6587\u7686\u53c3\u7167iFa.ai)\n\nmarkdown\n\u8907\u88fd\u7a0b\u5f0f\u78bc\n| \u82f1\u6587 | \u4e2d\u6587 |\n|-----------------------------------|-----------------------------|\n|**\u8ca1\u52d9\u6982\u6cc1**|\n| revenue | \u71df\u696d\u6536\u5165 |\n| gross_profit | \u71df\u696d\u6bdb\u5229 |\n| operating_income | \u71df\u696d\u5229\u76ca |\n| net_income | \u6de8\u5229 |\n| operating_cash_flow | \u71df\u696d\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41 |\n| invest_cash_flow | \u6295\u8cc7\u6d3b\u52d5\u4e4b\u6de8\u73fe\u91d1\u6d41 |\n| financing_cash_flow | \u7c4c\u8cc7\u6d3b\u52d5\u4e4b\u6de8\u73fe\u91d1\u6d41 |\n|**\u6bcf\u80a1\u8ca1\u52d9\u72c0\u6cc1**|\n| revenue_per_share | \u6bcf\u80a1\u71df\u6536 |\n| gross_per_share | \u6bcf\u80a1\u71df\u696d\u6bdb\u5229 |\n| operating_income_per_share | \u6bcf\u80a1\u71df\u696d\u5229\u76ca |\n| eps | \u6bcf\u80a1\u76c8\u9918(EPS) |\n| operating_cash_flow_per_share | \u6bcf\u80a1\u71df\u696d\u73fe\u91d1\u6d41 |\n| fcf_per_share | \u6bcf\u80a1\u81ea\u7531\u73fe\u91d1\u6d41 |\n| debt_to_operating_cash_flow | \u6bcf\u80a1\u6709\u606f\u8ca0\u50b5 |\n| equity | \u6bcf\u80a1\u6de8\u503c |\n|**\u7372\u5229\u80fd\u529b**|\n| roa | \u8cc7\u7522\u5831\u916c\u7387 |\n| roe | \u80a1\u6771\u6b0a\u76ca\u5831\u916c\u7387 |\n| gross_over_asset | \u71df\u696d\u6bdb\u5229\u00f7\u7e3d\u8cc7\u7522 |\n| roce | ROCE |\n| gross_profit_margin | \u71df\u696d\u6bdb\u5229\u7387 |\n| operation_profit_rate | \u71df\u696d\u5229\u76ca\u7387 |\n| net_income_rate | \u6de8\u5229\u7387 |\n| operating_cash_flow_profit_rate | \u71df\u696d\u73fe\u91d1\u6d41\u5229\u6f64\u7387 |\n|**\u6210\u9577\u52d5\u80fd**|\n| revenue_YoY | \u71df\u6536\u5e74\u6210\u9577\u7387 |\n| gross_prof_YoY | \u71df\u696d\u6bdb\u5229\u5e74\u6210\u9577\u7387 |\n| operating_income_YoY | \u71df\u696d\u5229\u76ca\u5e74\u6210\u9577\u7387 |\n| net_income_YoY | \u6de8\u5229\u5e74\u6210\u9577\u7387 |\n|**\u71df\u904b\u6307\u6a19**|\n| dso | \u61c9\u6536\u5e33\u6b3e\u6536\u73fe\u5929\u6578 |\n| account_receive_over_revenue | \u61c9\u6536\u5e33\u6b3e\u4f54\u71df\u6536\u6bd4\u7387 |\n| dio | \u5e73\u5747\u552e\u8ca8\u5929\u6578 |\n| inventories_revenue_ratio | \u5b58\u8ca8\u4f54\u71df\u6536\u6bd4\u7387 |\n| dpo | \u61c9\u4ed8\u5e33\u6b3e\u4ed8\u73fe\u65e5\u5929\u6578 |\n| cash_of_conversion_cycle | \u73fe\u91d1\u5faa\u74b0\u9031\u671f |\n| asset_turnover | \u7e3d\u8cc7\u7522\u9031\u8f49\u7387 |\n| applcation_turnover | \u4e0d\u52d5\u7522\u3001\u5ee0\u623f\u53ca\u8a2d\u5099\u9031\u8f49\u7387 |\n|**\u8ca1\u52d9\u97cc\u6027**|\n| current_ratio | \u6d41\u52d5\u6bd4\u7387 |\n| quick_ratio | \u901f\u52d5\u6bd4\u7387 |\n| debt_to_equity_ratio | \u8ca0\u50b5\u6b0a\u76ca\u6bd4\u7387 |\n| net_debt_to_equity_ratio | \u6de8\u8ca0\u50b5\u6b0a\u76ca\u6bd4\u7387 |\n| interest_coverage_ratio | \u5229\u606f\u4fdd\u969c\u500d\u6578 |\n| debt_to_operating_cash_flow | \u6709\u606f\u8ca0\u50b5\u00f7\u71df\u696d\u6d3b\u52d5\u73fe\u91d1\u6d41 |\n| debt_to_free_cash_flow | \u6709\u606f\u8ca0\u50b5\u00f7\u81ea\u7531\u73fe\u91d1\u6d41 |\n| cash_flow_ratio | \u73fe\u91d1\u6d41\u91cf\u6bd4\u7387 |\n|**\u8cc7\u7522\u8ca0\u50b5\u8868**|\n| current_assets | \u6d41\u52d5\u8cc7\u7522 |\n| current_liabilities | \u6d41\u52d5\u8ca0\u50b5 |\n| non_current_assets | \u975e\u6d41\u52d5\u8cc7\u7522 |\n| non_current_liabilities| \u975e\u6d41\u52d5\u8ca0\u50b5 |\n| total_asset | \u8cc7\u7522\u7e3d\u984d |\n| total_liabilities | \u8ca0\u50b5\u7e3d\u984d |\n| equity | \u6b0a\u76ca |\n\n#### \u4ee5\u4e0b\u6578\u503c\u672a\u5728\u56de\u50b3\u8cc7\u6599\u4e2d\uff0c\u5f85\u8cc7\u6599\u5eab\u66f4\u65b0 \n|\u82f1\u6587|\u4e2d\u6587|\n|---|----|\n|**\u6210\u9577\u52d5\u80fd**|\n| operating_cash_flow_YoY | \u71df\u696d\u73fe\u91d1\u6d41\u5e74\u6210\u9577\u7387 |\n| fcf_YoY | \u81ea\u7531\u73fe\u91d1\u6d41\u5e74\u6210\u9577\u7387 |\n| operating_cash_flow_per_share_YoY | \u6bcf\u80a1\u71df\u696d\u73fe\u91d1\u6d41\u5e74\u6210\u9577\u7387 |\n| fcf_per_share_YoY | \u6bcf\u80a1\u81ea\u7531\u73fe\u91d1\u6d41\u5e74\u6210\u9577\u7387 |\n\n### \u640d\u76ca\u8868\n```Python\nfrom neurostats_API.fetchers import ProfitLoseFetcher, DBClient\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nfetcher = ProfitLoseFetcher(db_client)\nticker = \"2330\" # \u63db\u6210tw50\u5167\u4efb\u610fticker\ndata = fetcher.query_data()\n```\n \n#### \u56de\u50b3\n\u56e0\u9805\u76ee\u773e\u591a\uff0c\u4e0d\u5217\u51fa\u8a73\u7d30\u5167\u5bb9\uff0c\u50c5\u5217\u51fa\u76ee\u524d\u6703\u56de\u50b3\u7684\u9805\u76ee\n```Python\n{\n \"ticker\": \"2330\"\n \"company_name\": \"\u53f0\u7a4d\u96fb\"\n # \u4ee5\u4e0b\u7686\u70bapd.DataFrame\n \"profit_lose\": #\u640d\u76ca\u8868,\n \"grand_total_profit_lose\": #\u4eca\u5e74\u5ea6\u7d2f\u8a08\u640d\u76ca\u8868,\n # \u71df\u696d\u6536\u5165\n \"revenue\": # \u71df\u6536\u6210\u9577\u7387\n \"grand_total_revenue\": # \u71df\u6536\u7d2f\u8a08\u6210\u5834\u6ffe\n # \u6bdb\u5229\n \"gross_profit\": # \u6bdb\u5229\u6210\u9577\u7387\n \"grand_total_gross_profit\": # \u7d2f\u8a08\u6bdb\u5229\u6210\u9577\u7387\n \"gross_profit_percentage\": # \u6bdb\u5229\u7387\n \"grand_total_gross_profit_percentage\" # \u7d2f\u8a08\u6bdb\u5229\u7387\n # \u71df\u5229\n \"operating_income\": # \u71df\u5229\u6210\u9577\u7387\n \"grand_total_operating_income\": # \u7d2f\u8a08\u71df\u5229\u6210\u9577\u7387\n \"operating_income_percentage\": # \u71df\u5229\u7387\n \"grand_total_operating_income_percentage\": # \u7d2f\u8a08\u71df\u5229\u7387\n # \u7a05\u524d\u6de8\u5229\n \"net_income_before_tax\": # \u7a05\u524d\u6de8\u5229\u6210\u9577\u7387\n \"grand_total_net_income_before_tax\": # \u7d2f\u8a08\u7a05\u524d\u6de8\u5229\u6210\u9577\u7387\n \"net_income_before_tax_percentage\": # \u7a05\u524d\u6de8\u5229\u7387\n \"grand_total_net_income_before_tax_percentage\": # \u7d2f\u8a08\u7a05\u524d\u6de8\u5229\u7387\n # \u672c\u671f\u6de8\u5229\n \"net_income\": # \u672c\u671f\u6de8\u5229\u6210\u9577\u7387\n \"grand_total_net_income\": # \u7d2f\u8a08\u672c\u671f\u6de8\u5229\u6210\u9577\u7387\n \"net_income_percentage\": # \u672c\u671f\u6de8\u5229\u7387\n \"grand_total_income_percentage\": # \u7d2f\u8a08\u672c\u671f\u6de8\u5229\u7387\n # EPS\n \"EPS\": # EPS\n \"EPS_growth\": # EPS\u6210\u9577\u7387\n \"grand_total_EPS\": # \u7d2f\u8a08EPS\n \"grand_total_EPS_growth\": # \u7d2f\u8a08EPS\u6210\u9577\u7387\n}\n```\n\n### \u8cc7\u7522\u8ca0\u50b5\u8868\n``` Python\nfrom neurostats_API.fetchers import BalanceSheetFetcher, DBClient\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = \"2330\" # \u63db\u6210tw50\u5167\u4efb\u610fticker\nfetcher = BalanceSheetFetcher(ticker, db_client)\n\nfetcher.query_data()\n```\n\n#### \u56de\u50b3\n```Python\n{\n \"ticker\": \"2330\"\n \"company_name\":\"\u53f0\u7a4d\u96fb\"\n \"balance_sheet\":\n 2024Q2_value ... 2018Q2_percentage\n \u6d41\u52d5\u8cc7\u7522 NaN ... NaN\n \u73fe\u91d1\u53ca\u7d04\u7576\u73fe\u91d1 1.799127e+09 ... 30.79\n ... ... ... ...\n \u907f\u96aa\u4e4b\u884d\u751f\u91d1\u878d\u8ca0\u50b5\uff0d\u6d41\u52d5 NaN ... 0.00\n \u8ca0\u50b5\u6e96\u5099\uff0d\u6d41\u52d5 NaN ... 0.00\n\n \"total_asset\":\n 2024Q2_value ... 2018Q2_percentage\n \u8cc7\u7522\u7e3d\u984d 5.982364e+09 ... 100.00\n \u8ca0\u50b5\u7e3d\u984d 2.162216e+09 ... 27.41\n \u6b0a\u76ca\u7e3d\u984d 3.820148e+09 ... 72.59\n\n\n \"current_asset\":\n 2024Q2_value ... 2018Q2_percentage\n \u6d41\u52d5\u8cc7\u7522\u5408\u8a08 2.591658e+09 ... 46.7\n\n \"non_current_asset\":\n 2024Q2_value ... 2018Q2_percentage\n \u975e\u6d41\u52d5\u8cc7\u7522\u5408\u8a08 3.390706e+09 ... 53.3\n\n \"current_debt\":\n 2024Q2_value ... 2018Q2_percentage\n \u6d41\u52d5\u8ca0\u50b5\u5408\u8a08 1.048916e+09 ... 22.55\n\n \"non_current_debt\":\n 2024Q2_value ... 2018Q2_percentage\n \u975e\u6d41\u52d5\u8ca0\u50b5\u5408\u8a08 1.113300e+09 ... 4.86\n\n \"equity\":\n 2024Q2_value ... 2018Q2_percentage\n \u6b0a\u76ca\u7e3d\u984d 3.820148e+09 ... 72.59\n\n}\n```\n- `'ticker'`: \u80a1\u7968\u4ee3\u78bc\n- `'company_name'`: \u516c\u53f8\u540d\u7a31 \n- `'balance_sheet'`: \u6b77\u5e74\u7576\u5b63\u8cc7\u5834\u8ca0\u50b5\u8868\"\u5168\u8868\" \n- `'total_asset'`: \u6b77\u5e74\u7576\u5b63\u8cc7\u7522\u7e3d\u984d \n- `'current_asset'`: \u6b77\u5e74\u7576\u5b63\u6d41\u52d5\u8cc7\u7522\u7e3d\u984d\n- `'non_current_asset'`: \u6b77\u5e74\u7576\u5b63\u975e\u6d41\u52d5\u8cc7\u7522\n- `'current_debt'`: \u6b77\u5e74\u7576\u5b63\u6d41\u52d5\u8ca0\u50b5\n- `'non_current_debt'`: \u6b77\u5e74\u7576\u5b63\u975e\u6d41\u52d5\u8ca0\u50b5\n- `'equity'`: \u6b77\u5e74\u7576\u5b63\u6b0a\u76ca\n\n### \u73fe\u91d1\u6d41\u91cf\u8868\n``` Python\nfrom neurostats_API.fetchers import CashFlowFetcher\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = 2330 # \u63db\u6210tw50\u5167\u4efb\u610fticker\nfetcher = StatsFetcher(ticker, db_client)\n\nfetcher.query()\n```\n#### \u56de\u50b3\n```Python\n{\n \"ticker\": \"2330\"\n \"company_name\": \"\u53f0\u7a4d\u96fb\"\n \"cash_flow\":\n 2023Q3_value ... 2018Q3_percentage\n \u71df\u696d\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41\u91cf\uff0d\u9593\u63a5\u6cd5 NaN ... NaN\n \u7e7c\u7e8c\u71df\u696d\u55ae\u4f4d\u7a05\u524d\u6de8\u5229\uff08\u6de8\u640d\uff09 700890335.0 ... 0.744778\n ... ... ... ...\n \u4ee5\u6210\u672c\u8861\u91cf\u4e4b\u91d1\u878d\u8cc7\u7522\u6e1b\u8cc7\u9000\u56de\u80a1\u6b3e NaN ... NaN\n \u9664\u5217\u907f\u96aa\u4e4b\u91d1\u878d\u8ca0\u50b5\u2215\u907f\u96aa \u4e4b\u884d\u751f\u91d1\u878d\u8ca0\u50b5 NaN ... -0.000770\n\n \"CASHO\":\n 2023Q3_value ... 2018Q3_percentage\n \u71df\u696d\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41\u91cf\uff0d\u9593\u63a5\u6cd5 NaN ... NaN\n \u7e7c\u7e8c\u71df\u696d\u55ae\u4f4d\u7a05\u524d\u6de8\u5229\uff08\u6de8\u640d\uff09 700890335.0 ... 0.744778\n ... ... ... ...\n \u6301\u6709\u4f9b\u4ea4\u6613\u4e4b\u91d1\u878d\u8cc7\u7522\uff08\u589e\u52a0\uff09\u6e1b\u5c11 NaN ... 0.001664\n \u8ca0\u50b5\u6e96\u5099\u589e\u52a0\uff08\u6e1b\u5c11\uff09 NaN ... NaN\n\n \"CASHI\":\n 2023Q3_value ... 2018Q3_percentage\n \u6295\u8cc7\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41\u91cf NaN ... NaN\n \u53d6\u5f97\u900f\u904e\u5176\u4ed6\u7d9c\u5408\u640d\u76ca\u6309\u516c\u5141\u50f9\u503c\u8861\u91cf\u4e4b\u91d1\u878d\u8cc7\u7522 -54832622.0 ... 0.367413\n ... ... ... ...\n \u6301\u6709\u81f3\u5230\u671f\u65e5\u91d1\u878d\u8cc7\u7522\u5230\u671f\u9084\u672c NaN ... NaN\n \u53d6\u5f97\u4ee5\u6210\u672c\u8861\u91cf\u4e4b\u91d1\u878d\u8cc7\u7522 NaN ... NaN\n\n \"CASHF\":\n 2023Q3_value ... 2018Q3_percentage\n \u7c4c\u8cc7\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41\u91cf NaN ... NaN\n \u77ed\u671f\u501f\u6b3e\u6e1b\u5c11 0.0 ... NaN\n ... ... ... ...\n \u4ee5\u6210\u672c\u8861\u91cf\u4e4b\u91d1\u878d\u8cc7\u7522\u6e1b\u8cc7\u9000\u56de\u80a1\u6b3e NaN ... NaN\n \u9664\u5217\u907f\u96aa\u4e4b\u91d1\u878d\u8ca0\u50b5\u2215\u907f\u96aa \u4e4b\u884d\u751f\u91d1\u878d\u8ca0\u50b5 NaN ... -0.00077\n}\n```\n- `'ticker'`: \u80a1\u7968\u4ee3\u78bc\n- `'company_name'`: \u516c\u53f8\u540d\u7a31 \n- `'cash_flow'`: \u6b77\u5e74\u7576\u5b63\u73fe\u91d1\u6d41\u91cf\u8868\"\u5168\u8868\" \n- `'CASHO'`: \u6b77\u5e74\u7576\u5b63\u71df\u904b\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41\u91cf\n- `'CASHI'`: \u6b77\u5e74\u7576\u5b63\u6295\u8cc7\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41\u91cf\n- `'CASHF'`: \u6b77\u5e74\u7576\u5b63\u7c4c\u8cc7\u6d3b\u52d5\u4e4b\u73fe\u91d1\u6d41\u91cf\n\n> \u5927\u90e8\u5206\u8cc7\u6599\u7f3a\u5931\u662f\u56e0\u70ba\u5c1a\u672a\u8a08\u7b97\uff0c\u50c5\u5148\u586b\u4e0a\u5df2\u7d93\u6709\u7684\u8cc7\u6599\n\n## \u7c4c\u78bc\u9762\n### \u6cd5\u4eba\u4ea4\u6613\n``` Python\nfrom neurostats_API.fetchers import InstitutionFetcher\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = 2330 # \u63db\u6210tw50\u5167\u4efb\u610fticker\nfetcher = StatsFetcher(ticker, db_client)\n\nfetcher.query()\n```\n### \u56de\u50b3\n```Python\n{ 'annual_trading': \n close volume ... \u81ea\u71df\u5546\u8cb7\u8ce3\u8d85\u80a1\u6578(\u907f\u96aa) \u4e09\u5927\u6cd5\u4eba\u8cb7\u8ce3\u8d85\u80a1\u6578\n 2024-12-02 1035.000000 31168404.0 ... -133215.0 11176252.0\n 2024-11-29 996.000000 40094983.0 ... 401044.0 -7880519.0\n ... ... ... ... ... ...\n 2023-12-05 559.731873 22229723.0 ... 33,400 -5,988,621\n 2023-12-04 563.659790 26847171.0 ... -135,991 -5,236,743\n\n,\n 'latest_trading': \n { 'date': datetime.datetime(2024, 12, 2, 0, 0),\n 'table': \n category variable ... over_buy_sell sell\n 0 foreign average_price ... 0.00 0.0\n 1 foreign percentage ... 0.00 0.0\n .. ... ... ... ... ...\n 14 prop price ... 0.00 0.0\n 15 prop stock ... -133.22 217.2\n }\n,\n 'price': \n { \n '52weeks_range': '555.8038940429688-1100.0', # str\n 'close': 1035.0, # float\n 'last_close': 996.0, # float\n 'last_open': 995.0, # float\n 'last_range': '994.0-1010.0', # str\n 'last_volume': 40094.983, # float\n 'open': 1020.0, # float\n 'range': '1015.0-1040.0', # str\n 'volume': 32238.019 # float\n }\n}\n```\n\n- `annual_trading`: \u5c0d\u61c9\u4e00\u5e74\u5167\u6bcf\u65e5\u7684\u4ea4\u6613\u91cf\n- `latest_trading`: \u5c0d\u61c9\u7576\u65e5\u4ea4\u6613\n##### \u6b04\u4f4d\u9805\u76ee\u540d\u7a31\n|\u82f1\u6587|\u4e2d\u6587\u5c0d\u61c9|\n|----|-------|\n|buy|\u8cb7\u9032|\n|sell|\u8ce3\u51fa|\n|over_buy_sell|\u8cb7\u8ce3\u8d85|\n\n##### category\u9805\u76ee\u540d\u7a31\n|\u82f1\u6587|\u4e2d\u6587\u5c0d\u61c9|\n|----|-------|\n|foreign|\u5916\u8cc7|\n|prop|\u81ea\u71df\u5546|\n|mutual|\u6295\u4fe1|\n|institutional_investor|\u4e09\u5927\u6cd5\u4eba|\n\n##### variable\u9805\u76ee\u540d\u7a31\n|\u82f1\u6587|\u4e2d\u6587\u5c0d\u61c9|\n|----|-------|\n|stock|\u80a1\u7968\u5f35\u6578|\n|price|\u6210\u4ea4\u91d1\u984d|\n|average_price|\u5747\u50f9|\n|percetage|\u4f54\u6210\u4ea4\u6bd4\u91cd|\n\n**\u6210\u4ea4\u91d1\u984d\u4ee5\u53ca\u5747\u50f9\u56e0\u70ba\u8cc7\u6599\u6c92\u6709\u722c\u5230\u800c\u7121\u6cd5\u8a08\u7b97**\n**\u4ecd\u7136\u5148\u5c07\u9019\u9805\u76ee\u52a0\u5165\uff0c\u53ea\u662f\u6578\u503c\u90fd\u6703\u662f0**\n\n- `price`: \u5c0d\u61c9\u6cd5\u4eba\u8cb7\u8ce3\u9801\u9762\u7684\u4eca\u65e5\u8207\u6628\u65e5\u4ea4\u6613\u50f9\n\u8acb\u6ce8\u610f`range`, `last_range`, `52week_range`\u9019\u4e09\u500b\u9805\u76ee\u578b\u614b\u70ba\u5b57\u4e32\uff0c\u5176\u9918\u70bafloat\n\n##### \u9805\u76ee\u540d\u7a31\n|\u82f1\u6587|\u4e2d\u6587\u5c0d\u61c9|\n|----|-------|\n|open|\u958b\u76e4\u50f9|\n|close|\u6536\u76e4\u50f9|\n|range|\u7576\u65e5\u7bc4\u570d|\n|volume|\u6210\u4ea4\u5f35\u6578|\n|last_open|\u958b\u76e4\u50f9(\u6628)|\n|last_close|\u6536\u76e4\u50f9(\u6628)|\n|last_range|\u6628\u65e5\u7bc4\u570d|\n|last_volume|\u6210\u4ea4\u5f35\u6578(\u6628)|\n|52weeks_range|52\u9031\u7bc4\u570d|\n\n## \u8cc7\u5238\u9918\u984d\n\u5c0d\u61c9iFa.ai -> \u4ea4\u6613\u8cc7\u8a0a -> \u8cc7\u5238\u8b8a\u5316\n```Python\nfrom neurostats_API.fetchers import MarginTradingFetcher\ndb_client = DBClient(\"<\u9023\u63a5\u7684DB\u4f4d\u7f6e>\").get_client()\nticker = 2330 # \u63db\u6210tw50\u5167\u4efb\u610fticker\nfetcher = MarginTradingFetcher(ticker, db_client)\n\nfetcher.query()\n```\n\n### \u56de\u50b3\n```Python\n{ 'annual_margin': \n close volume ... \u501f\u5238_\u6b21\u4e00\u71df\u696d\u65e5\u53ef\u9650\u984d \u8cc7\u5238\u4e92\u62b5\n 2024-12-03 1060.000000 29637.0 ... 12222.252 0.0\n 2024-12-02 1035.000000 31168.0 ... 12156.872 1.0\n ... ... ... ... ... ...\n 2023-12-05 559.731873 22230.0 ... 7838.665 1.0\n 2023-12-04 563.659790 26847.0 ... 7722.725 2.0\n\n 'latest_trading': { \n 'date': datetime.datetime(2024, 12, 3, 0, 0),\n 'margin_trading': \n financing short_selling\n \u8cb7\u9032 761.0 34.0\n \u8ce3\u51fa 1979.0 44.0\n ... ... ...\n \u6b21\u4e00\u71df\u696d\u65e5\u9650\u984d 6483183.0 6483183.0\n \u73fe\u511f 3.0 12.0\n\n\n 'security_offset': 0.0,\n 'stock_lending': stock_lending\n \u7576\u65e5\u8ce3\u51fa 10\n \u7576\u65e5\u9084\u5238 0\n \u7576\u65e5\u8abf\u6574 0\n \u7576\u65e5\u9918\u984d 14688\n \u6b21\u4e00\u71df\u696d\u65e5\u53ef\u9650\u984d 12222\n },\n 'price': { '52weeks_range': '555.8038940429688 - 1100.0',\n 'close': 1060.0,\n 'last_close': 1035.0,\n 'last_open': 1020.0,\n 'last_range': '1015.0 - 1040.0',\n 'last_volume': 31168.404,\n 'open': 1060.0,\n 'range': '1055.0 - 1065.0',\n 'volume': 29636.523}}\n```\n- `annual_trading`: \u5c0d\u61c9\u4e00\u5e74\u5167\u6bcf\u65e5\u7684\u8cc7\u5238\u8b8a\u5316\u91cf\n- `latest_trading`: \u5c0d\u61c9\u7576\u65e5\u4ea4\u6613\n##### \u6b04\u4f4d\u9805\u76ee\u540d\u7a31\n|\u82f1\u6587|\u4e2d\u6587\u5c0d\u61c9|\n|----|-------|\n|financing|\u878d\u8cc7|\n|short_selling|\u878d\u5238|\n\n- `price`: \u5c0d\u61c9\u6cd5\u4eba\u8cb7\u8ce3\u9801\u9762\u7684\u4eca\u65e5\u8207\u6628\u65e5\u4ea4\u6613\u50f9\n##### \u9805\u76ee\u540d\u7a31\n|\u82f1\u6587|\u4e2d\u6587\u5c0d\u61c9|\n|----|-------|\n|open|\u958b\u76e4\u50f9|\n|close|\u6536\u76e4\u50f9|\n|range|\u7576\u65e5\u7bc4\u570d|\n|volume|\u6210\u4ea4\u5f35\u6578|\n|last_open|\u958b\u76e4\u50f9(\u6628)|\n|last_close|\u6536\u76e4\u50f9(\u6628)|\n|last_range|\u6628\u65e5\u7bc4\u570d|\n|last_volume|\u6210\u4ea4\u5f35\u6578(\u6628)|\n|52weeks_range|52\u9031\u7bc4\u570d|\n\n\u8acb\u6ce8\u610f`range`, `last_range`, `52week_range`\u9019\u4e09\u500b\u9805\u76ee\u578b\u614b\u70ba\u5b57\u4e32\uff0c\u5176\u9918\u70bafloat\n\n\n## TEJ \u76f8\u95dc\n### \u6703\u8a08\u5e2b\u7c3d\u8b49\u8ca1\u52d9\u8cc7\u6599\n```Python\nfrom neurostats_API import FinanceReportFetcher\n\nmongo_uri = <MongoDB \u7684 URI>\ndb_name = 'company' # \u9023\u63a5\u7684DB\u540d\u7a31\ncollection_name = \"TWN/AINVFQ1\" # \u9023\u63a5\u7684collection\u5c0d\u8c61\n\nfetcher = FinanceReportFetcher(\n mongo_uri = mongo_uri,\n db_name = db_name,\n collection_name = collection_name\n)\n\ndata = fetcher.get(\n ticker = \"2330\" # \u4efb\u610f\u7684\u80a1\u7968\u4ee3\u78bc\n fetch_mode = fetcher.FetchMode.QOQ_NOCAL # \u53d6\u5f97\u6a21\u5f0f\n start_date = \"2005-01-01\",\n end_date = \"2024-12-31\",\n report_type = \"Q\",\n indexes = []\n) # -> pd.DataFrame or Dict[pd.DataFrame] \n```\n- `ticker`: \u80a1\u7968\u4ee3\u78bc\n\n- `fetch_mode` : \u53d6\u5f97\u6a21\u5f0f\uff0c\u70ba`fetcher.YOY_NOCAL` \u6216 `fetcher.QOQ_NOCAL`\n - `YOY_NOCAL`: \u4ee5end_date\u70ba\u6e96\uff0c\u53d6\u5f97\u8207end_date\u540c\u5b63\u7684\u6b77\u5e74\u8cc7\u6599\uff0c\u6642\u9593\u7bc4\u570d\u4ee5start_date\u70ba\u8d77\u59cb\n > \u4f8b\u5982`start_date = \"2020-07-01\"`, `end_date = \"2024-01-01\"`\uff0c\u6703\u56de\u50b32020~2024\u7684\u7b2c\u4e00\u5b63\u8cc7\u6599\n\n - `QOQ_NOCAL`: \u6642\u9593\u7bc4\u570d\u5167\u7684\u6bcf\u5b63\u8cc7\u6599\n\n - `QOQ`: \u6642\u9593\u7bc4\u570d\u5167\u6bcf\u5b63\u7684\u6bcf\u500bindex\u7684\u6578\u503c\u4ee5\u53caQoQ\n\n - `YoY`: \u4ee5end_date\u70ba\u6e96\uff0c\u53d6\u5f97\u8207end_date\u540c\u5b63\u7684\u6b77\u5e74\u8cc7\u6599\u4ee5\u53ca\u6210\u9577\u7387\uff0c\u6642\u9593\u7bc4\u570d\u4ee5start_date\u70ba\u8d77\u59cb\n\n- `start_date`: \u958b\u59cb\u65e5\u671f\uff0c\u4e0d\u8a2d\u5b9a\u6642\u9810\u8a2d\u70ba`2005-01-01`\n\n- `end_date`: \u7d50\u675f\u65e5\u671f\uff0c\u4e0d\u8a2d\u5b9a\u6642\u9810\u8a2d\u70ba\u8cc7\u6599\u5eab\u6700\u65b0\u8cc7\u6599\u7684\u65e5\u671f\n\n- `report_type`: \u9078\u64c7\u54ea\u7a2e\u5831\u544a\uff0c\u9810\u8a2d\u70ba`Q`\n - `A`: \u7576\u5e74\u7d2f\u8a08\n - `Q`: \u7576\u5b63\u6578\u503c\n - `TTM`: \u79fb\u52d5\u56db\u5b63 (\u5305\u62ec\u7576\u5b63\u5728\u5167\uff0c\u5f80\u524d\u7d2f\u8a08\u56db\u500b\u5b63\u5ea6)\n\n- `indexes`: \u9078\u64c7\u7684column\uff0c\u9700\u8981\u4ee5TEJ\u63d0\u4f9b\u7684\u6b04\u4f4d\u540d\u7a31\u70ba\u6e96\uff0c\u4e0d\u63d0\u4f9b\u6642\u6216\u63d0\u4f9b`[]`\u6703\u56de\u50b3\u5168\u90e8column\n - \u7bc4\u4f8b\u8f38\u5165: `['bp41', 'bp51']`\n\n[TEJ\u8cc7\u6599\u96c6\u9023\u7d50](https://tquant.tejwin.com/%E8%B3%87%E6%96%99%E9%9B%86/)\n\u8acb\u770b `\u6703\u8a08\u5e2b\u7c3d\u8b49\u8ca1\u52d9\u8cc7\u6599`\n\n#### \u56de\u50b3\u8cc7\u6599\n##### `YOY_NOCAL` \u8207 `QOQ_NOCAL` \n\u70ba\u56de\u50b3`pd.DataFrame`\uff0ccolumn\u540d\u7a31\u70ba<\u5e74\u4efd>Q<\u5b63>\uff0c row\u540d\u7a31\u70ba\u6307\u5b9a\u8ca1\u5831\u9805\u76ee\n\n```Python\n# fetch_mode = fetcher.FetchMode.QOQ_NOCAL\n 2024Q3 2024Q2 2024Q1\nbp41 7.082005e+07 6.394707e+07 5.761001e+07\nbp51 3.111298e+09 3.145373e+09 3.091985e+09\n\n# fetch_mode = fetcher.FetchMode.YOY_NOCAL\n 2024Q3 2023Q3 2022Q3\nbp41 7.082005e+07 5.377231e+07 6.201822e+07\nbp51 3.111298e+09 3.173919e+09 2.453840e+09\n```\n\n##### `YOY` \u8207 `QOQ`\n\u56de\u50b3\u70ba`Dict[pd.DataFrame]`, key \u70ba\u6307\u5b9a\u7684index, DataFrame\u4e2d\u5247\u662f\u8a72index\u6b77\u5e74\u7684\u6578\u503c\u8207\u6210\u9577\u7387\n\u6210\u9577\u7387\u55ae\u4f4d\u70ba`%`\n```Python\n# fetch_mode = fetcher.FetchMode.QOQ\n{\n'bp41': \n 2024Q3 2024Q2 2024Q1\nvalue 7.082005e+07 6.394707e+07 5.761001e+07\ngrowth 10.75% 11.00% 0.55%, \n'bp51': \n 2024Q3 2024Q2 2024Q1\nvalue 3.111298e+09 3.145373e+09 3.091985e+09\ngrowth -1.08% 1.73% -0.42%\n}\n\n# fetch_mode = fetcher.FetchMode.YOY\n{\n'bp41': \n 2024Q3 2023Q3 2022Q3\nvalue 7.082005e+07 5.377231e+07 6.201822e+07\nYoY_1 31.70% -13.30% 41.31%\nYoY_3 17.29% 9.56% 18.83%\nYoY_5 13.89% 12.15% 16.43%\nYoY_10 12.55% 13.56% 15.60% ,\n'bp51': \n 2024Q3 2023Q3 2022Q3\nvalue 3.111298e+09 3.173919e+09 2.453840e+09\nYoY_1 -1.97% 29.34% 31.80% \nYoY_3 18.67% 27.67% 26.39% \nYoY_5 20.68% 24.80% 18.15% \nYoY_10 14.20% 15.87% 15.51% \n}\n```\n\n### \u516c\u53f8\u81ea\u7d50\u8cc7\u6599\n```Python\nfrom neurostats_API import FinanceReportFetcher\n\nfetcher = FinanceReportFetcher(\n mongo_uri = mongo_uri,\n db_name = db_name,\n collection_name = collection_name\n)\n\ndata = fetcher.get(\n ticker = \"2330\" # \u4efb\u610f\u7684\u80a1\u7968\u4ee3\u78bc\n fetch_mode = fetcher.FetchMode.QOQ_NOCAL # \u53d6\u5f97\u6a21\u5f0f\n start_date = \"2005-01-01\",\n end_date = \"2024-12-31\",\n report_type = \"Q\",\n indexes = []\n) # -> pd.DataFrame or Dict[pd.DataFrame] \n```\n- `ticker`: \u80a1\u7968\u4ee3\u78bc\n\n- `fetch_mode` : \u53d6\u5f97\u6a21\u5f0f\uff0c\u70ba`fetcher.YOY_NOCAL` \u6216 `fetcher.QOQ_NOCAL`\n - `YOY_NOCAL`: \u4ee5end_date\u70ba\u6e96\uff0c\u53d6\u5f97\u8207end_date\u540c\u5b63\u7684\u6b77\u5e74\u8cc7\u6599\uff0c\u6642\u9593\u7bc4\u570d\u4ee5start_date\u70ba\u8d77\u59cb\n > \u4f8b\u5982`start_date = \"2020-07-01\"`, `end_date = \"2024-01-01\"`\uff0c\u6703\u56de\u50b32020~2024\u7684\u7b2c\u4e00\u5b63\u8cc7\u6599\n\n - `QOQ_NOCAL`: \u6642\u9593\u7bc4\u570d\u5167\u7684\u6bcf\u5b63\u8cc7\u6599\n\n - `QOQ`: \u6642\u9593\u7bc4\u570d\u5167\u6bcf\u5b63\u7684\u6bcf\u500bindex\u7684\u6578\u503c\u4ee5\u53caQoQ\n\n - `YoY`: \u4ee5end_date\u70ba\u6e96\uff0c\u53d6\u5f97\u8207end_date\u540c\u5b63\u7684\u6b77\u5e74\u8cc7\u6599\u4ee5\u53ca\u6210\u9577\u7387\uff0c\u6642\u9593\u7bc4\u570d\u4ee5start_date\u70ba\u8d77\u59cb\n\n- `start_date`: \u958b\u59cb\u65e5\u671f\uff0c\u4e0d\u8a2d\u5b9a\u6642\u9810\u8a2d\u70ba`2005-01-01`\n\n- `end_date`: \u7d50\u675f\u65e5\u671f\uff0c\u4e0d\u8a2d\u5b9a\u6642\u9810\u8a2d\u70ba\u8cc7\u6599\u5eab\u6700\u65b0\u8cc7\u6599\u7684\u65e5\u671f\n\n- `report_type`: \u9078\u64c7\u54ea\u7a2e\u5831\u544a\uff0c\u9810\u8a2d\u70ba`Q`\n - `A`: \u7576\u5e74\u7d2f\u8a08\n - `Q`: \u7576\u5b63\u6578\u503c\n - `TTM`: \u79fb\u52d5\u56db\u5b63 (\u5305\u62ec\u7576\u5b63\u5728\u5167\uff0c\u5f80\u524d\u7d2f\u8a08\u56db\u500b\u5b63\u5ea6)\n\n- `indexes`: \u9078\u64c7\u7684column\uff0c\u9700\u8981\u4ee5TEJ\u63d0\u4f9b\u7684\u6b04\u4f4d\u540d\u7a31\u70ba\u6e96\uff0c\u4e0d\u63d0\u4f9b\u6642\u6216\u63d0\u4f9b`[]`\u6703\u56de\u50b3\u5168\u90e8column\n - \u7bc4\u4f8b\u8f38\u5165: `['bp41', 'bp51']`\n\n[TEJ\u8cc7\u6599\u96c6\u9023\u7d50](https://tquant.tejwin.com/%E8%B3%87%E6%96%99%E9%9B%86/)\n\u8acb\u770b `\u516c\u53f8\u81ea\u7d50\u6578`\n\n### \u958b\u9ad8\u4f4e\u6536\n```Python\nmongo_uri = <MongoDB \u7684 URI>\ndb_name = 'company' # \u9023\u63a5\u7684DB\u540d\u7a31\ncollection_name = \"TWN/APIPRCD\" # \u9023\u63a5\u7684collection\u5c0d\u8c61\nfrom neurostats_API import TEJStockPriceFetcher\n\nfetcher = TEJStockPriceFetcher(\n mongo_uri = mongo_uri,\n db_name = db_name,\n collection_name = collection_name\n)\n\ndata = fetcher.get(\n ticker = \"2330\" # \u4efb\u610f\u7684\u80a1\u7968\u4ee3\u78bc\n start_date = \"2005-01-01\",\n period = \"3m\"\n) # -> pd.DataFrame\n```\n- `ticker`: \u80a1\u7968\u4ee3\u78bc\n- `start_date`: \u641c\u5c0b\u7bc4\u570d\u7684\u958b\u59cb\u65e5\u671f\n- `period`: \u641c\u5c0b\u7684\u6642\u9593\u7bc4\u570d\u9577\u5ea6\n\n`period`\u8207`start_date`\u540c\u6642\u5b58\u5728\u6642\u4ee5period\u512a\u5148\n",
"bugtrack_url": null,
"license": null,
"summary": "The service of NeuroStats website",
"version": "0.0.25",
"project_urls": {
"Homepage": "https://github.com/NeurowattStats/NeuroStats_API.git"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f7eb21f63307763801baec7327703cde3de22b600b156a4093b5e0ebe8616c22",
"md5": "a99452a230635bf1949a561d289cce1b",
"sha256": "39f986b61f4ad91e7423fec6dc9969072904474eaaaae518e286433c6c0d6cb4"
},
"downloads": -1,
"filename": "neurostats_API-0.0.25-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a99452a230635bf1949a561d289cce1b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 227809,
"upload_time": "2025-04-21T07:36:45",
"upload_time_iso_8601": "2025-04-21T07:36:45.105927Z",
"url": "https://files.pythonhosted.org/packages/f7/eb/21f63307763801baec7327703cde3de22b600b156a4093b5e0ebe8616c22/neurostats_API-0.0.25-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0989aa9be746b0dad93269d9f7862d1dc65ea03dcba25bc1596aee6b12ecd826",
"md5": "a356580e48c64ee03b50f4aaebf4a975",
"sha256": "488df9680030da2107d948ab289192d6c4cc1dcc6f655c1e3e2fc9c2a8ca7eaf"
},
"downloads": -1,
"filename": "neurostats_api-0.0.25.tar.gz",
"has_sig": false,
"md5_digest": "a356580e48c64ee03b50f4aaebf4a975",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 230238,
"upload_time": "2025-04-21T07:36:48",
"upload_time_iso_8601": "2025-04-21T07:36:48.097550Z",
"url": "https://files.pythonhosted.org/packages/09/89/aa9be746b0dad93269d9f7862d1dc65ea03dcba25bc1596aee6b12ecd826/neurostats_api-0.0.25.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-04-21 07:36:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "NeurowattStats",
"github_project": "NeuroStats_API",
"github_not_found": true,
"lcname": "neurostats-api"
}