Python 股市Screener 分享

carlam

469 回覆
287 Like 14 Dislike
carlam 2021-08-05 13:07:50
會block 架
yfinance 內置左個function
*** YAHOO! FINANCE IS CURRENTLY DOWN! ***\n"
#"Our engineers are working quickly to resolve "
#"the issue. Thank you for your patience.") 擋住下載data
我自己改左少少yfinance 既 base.py 一旦遇到呢一句就自殺重啟(我冇放上黎因為要改係幾麻煩)
佢7月頭改版之前就99%-100% 冇問題
依家就有機會"自殺唔到+自動重啟" 雙生兒問題 兩個python 同時行 頻率就暫時觀察 一星期2-5次 weekday 容易出現多D 但處理手法只係重啟就可以
carlam 2021-08-05 13:08:31
historical 都係免費??
Flinty 2021-08-05 13:53:56
Free之中,Tiingo係最好,拎最liquid既ETF,唔會出錯。但你拎stock的話 要小心,有時會有data missing。可能間公司 2016上左市,但佢個ticker可能2018先出現。

你想free,就沒辦法,Tiingo係你唯一選擇
carlam 2021-08-05 15:45:07
用close 收市價個人覺得可靠點
細turnover既股 其實股價幾易操控
用adj close 就處理埋股息 拆股既問題但要請教下其他ching 係咪一個好既方法
有錢唔係罪 2021-08-05 16:34:19
樓主有冇cache啲數據?如果用ohlcv daily唔駛每次從頭download啦,好多嘢係重複。如果寫埋cache應該1分鐘跑完?
周華健身中心 2021-08-05 16:35:02
強帖留名
有錢唔係罪 2021-08-05 16:45:59
睇咗你個source code(import個十幾行only),似乎你應該用cache,冇理由每日用yfinance由頭download過所有data,因為計stock indicator好多用緊重複data

有冇用過db?例如sqlite/mysql嗰啲?第一次dl啲time series儲起db,然後下一日只需要dl每隻股票之前2-3日嘅數據replace落去,咁速度已經快幾十倍。

仲嫌唔夠快,先再去諗multithread multiprocess。

btw,啲code太長,可以諗諗refactor去唔同嘅module,否則啲code長遠好難maintain。

希望幫到你
番梘湯 2021-08-05 16:46:50
留名學嘢先
傻豬黎既 2021-08-05 16:50:29
push!!
陽炎座 2021-08-05 18:39:41
即係第幾行?你冇寫comment我唔知點跟
同埋我諗到個問題,generate pdf應該好慢,雖然我未試過
你試下gen第二o的format,例如webpage,可能快o的
Flinty 2021-08-05 20:57:59
儲起,都唔洗db啦。起csv改 就得啦。你估拎2 TB data咩? 一個ticker 一年252 rows,十年都只係2520,我當佢拎3000個股票,一個excel file就足夠應付
陽炎座 2021-08-06 01:29:48
我寫左,順便share埋俾你,用ftp攞最新所有ticker
佢個file每日update一次
但o的ticker你要再簡,因為有units, warrants, ETF, test symbols, mutual funds等等
from ftplib import FTP

def get_ftp(filename):
    ftp = FTP('ftp.nasdaqtrader.com')
    ftp.login(user = None, passwd = None)
    ftp.cwd("/SymbolDirectory")
    file = open(filename, "wb")
    ftp.retrbinary('RETR ' + filename, file.write)
    file.close()
    ftp.quit()

# nasdaq

filename = 'nasdaqlisted.txt'
get_ftp(filename)

# nyse

filename = 'otherlisted.txt'
get_ftp(filename)
陽炎座 2021-08-06 02:56:13
係第483行加下面呢三句:
d = dict()  
for i in range(1, 12):
    exec(f'd[1] = a{i}')

用下面取代第487-508行:
for i in range(1,12):
    pdf.cell(200, 10, txt = i, ln = 1, align = 'L') 

617-648行寫做一個function

677-750行應該可以寫一個function做,除左subplot

755-794應該用dict去loop
陽炎座 2021-08-06 14:20:15
上面打錯,你試下得唔得
d = dict()  
for i in range(1, 12): exec(f'd[i] = a{i}') 

for i in range(1,12): pdf.cell(200, 10, txt = d[i], ln = 1, align = 'L')
想自由 2021-08-06 14:33:14
泡泡達人 2021-08-06 14:53:33
mac機係咪RUN唔到?
有錢唔係罪 2021-08-06 14:56:31
如果之後轉multi thread,仲點可能用csv去儲,兩條thread同時IO同一file都玩死人

仲未計佢係儲緊time series,db內置datetime格式,sorting超快,如果用csv,要自己慢慢sort
尸廿山女田卜 2021-08-06 15:41:52
喺Ubuntu 行到一半死左, gen 到啲 png, pdf & total_info.csv files.

Error message:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'python'
尸廿山女田卜 2021-08-06 15:43:10
係咪yahoo block 左我?
尸廿山女田卜 2021-08-06 15:56:20
For MAC, type following in terminal
1) Install brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
https://brew.sh/#install

2) install python3 (type in terminal)
brew install python

3) install anaconda (gui)
https://www.anaconda.com/products/individual#macos

4) install missing python module not included in anaconda (i.e. yahoo_fin) (type in terminal)
pythpn -m pip install yahoo-fin

Good luck!!!
陽炎座 2021-08-06 16:07:25
Data咁少又簡單,csv夠
尸廿山女田卜 2021-08-06 16:09:13
Sorry, anaconda 包埋python 3.8. Skip step 1,2.
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞