從 wkingnet/stock-analysis python進行股票分析和選股 fork過來的 技術含量很高優質的repo 可以從中得知很多的技術 項目無Wiki,此說明文檔包含了項目所有相關內容。包括項目介紹、使用說明等。
GitHub主站:https://github.com/wkingnet/stock-analysis Gitee鏡像:https://gitee.com/wkingnet/stock-analysis
一切有爲法,如夢幻泡影;如露亦如電,應作如是觀。
我自己多年來一直使用通達信公式選股。近期越發感覺到通達信公式的局限性(大智慧同花順公式和通達信都有同樣局限性),比如變量無法二次賦值、沒有循環、IF語句簡陋,且軟件自帶公式評測功能雞肋。更重要的是通達信公式都是基于短周期的判斷,比如不管是MACD金叉、cross上穿還是創歷史新高,皆爲“當前周期日”的結果,無法判斷類似“此爲上漲第幾浪,每個浪的高低價各是多少”。而如果用周線周期選股,那只有每周五收盤以後才可以選,會錯失先機。月線更是不可能用到。
因此,我有了兩個核心需求:盤中選股以及策略回測。這又延伸出了數據采集、數據加工、行情監視等需求。另外爲了隱私考慮,所有第三方導入庫、借鑒的代碼都需開源,本地化,不云端。
我本身側重于研究股票或期貨的趨勢、邏輯、投機,不做價投,不做超短,可以耐心持股,也可以耐心空倉。
我的理解,“量化”一詞有兩層釋義。狹義上是指把思路變爲計算機代碼,包括通達信公式、python代碼等;廣義上是指在狹義釋義的基礎上,通過計算機自動完成整個選股和交易的過程。
然而量化又是投資過程中必須要完成的階段。你有了一個選股思路,不管是長線投資的還是短線投機、不論是看基本面還是看技術面,總之你想把思路轉化爲選股策略,把思想轉變爲選股公式,這一過程本身就是量化。再之後,爲了確定策略是否有效、收益率如何,又必然需要做策略回測來驗證。最後,爲了防止人性對交易過程的干擾,可以考慮使用自動化交易。
- 選股。當把選股思路量化爲代碼後,計算機可以快速準確的幫你選出你想要的股票。
- 下單速度。觸發買入、賣出條件後,計算機可以在毫秒級別內完成下單操作。人爲操作需要“打開交易軟件-填股票代碼-填金額-填數量-點下單”。這還沒有考慮下單前,人們會來回猶豫所浪費的時間。
python、量化過程、量化平台都只是工具,核心是交易策略,是交易思想。交易的目的是賺錢,不是學編程當程序員,也不是沉迷于玩數據中不可自拔,代碼寫的再高級精煉,不賺錢統統白搭。現在網上很多收費課程、量化平台,都是“賣鏟子”的,核心的可以能穩定賺錢的量化策略,絕無一家提供。
就我個人而言,我不贊同完全把重心放在全自動量化交易上,而忽視基本面和技術面。對于短線來說,不確定性太多。比如,1分鍾K線幾乎處于“混沌”狀態,根本沒有邏輯和趨勢可言。而周期越大的K線,越能體現出趨勢和力度,突然反轉的可能性越小。對于長線來說……還未聽說過有把程序化交易用于長線的事例。然而就目前我所了解見到的,都是將量化應用于短線的實戰。我覺得,對于短線而言,量化的優點是搶先發現買點、搶先下單,先敵制勝。但這個前提是你在做量化之前,就本身已經有了一套“短線不敗法寶”,換言之就是你短線本身就一直在賺錢,上量化只不過是爲了減少選股和下單時間。如果之前做短線一直虧錢,那上了量化後就賺錢是絕無可能的。對于中長線而言,量化也是側重于選股方面。下單可以自己手動下單,中長線是不在乎那幾分鍾下單時間的區別的。
引用一段網友的話:
交易這門手藝發展了這麼多年,流派可謂五花八門,有看基本面搞價值投資的,有看K線搞技術指標的,有學江恩,纏論數波浪畫中樞的,有分析資金面的,分析市場情緒的,有結合原始數據做日內波段的,有恨不得把服務器架在交易所對面做高頻的,有搞一箱子GPU做automl,深度學習和強化學習的,有搞對衝的,搞多因子的,搞指數增強的,有搞MOM組合管理的,有搞一堆艱深晦澀的微分方程做衍生品套利的,當然,也有靠求神拜佛和拍腦門跺地板的。每種流派都有一些人奉爲圭臬,還有一批人棄如敝履,而且時不時的還會冒出幾個新的流派出來,令人眼花缭亂,有些摸不到頭腦。
不知道哪個著名的人曾說過,如果你沒有自己的思想,那你的腦子注定會成爲其他人思想的跑馬場。上面的這一堆思想和流派,既然能夠出現并且流傳下來,還能夠有一批擁趸和死忠,也就表明它們確實是市場的本質或者聖杯在某個維度的一個映射或投影,但也僅僅只是一個投影而已。學習它們只是爲了能夠從更多的角度去窺視那個交易的聖杯,進而一點點的深化,完善和驗證自己的交易思想和理論體系,最終通過一個承載著自己思想體系的工具來將思想兌換成實際的收益。在這個市面上出現的每一種付費編譯的或者免費開源的交易軟件都是固定的,即使在不斷更新迭代也只是按照開發團隊的思路來進行,包括QA在內,不可能有一個軟件或者項目能夠滿足所有可能的交易思想,自然也就無法讓你自由的學習,驗證,歸納和吸收這些思想中的精華。因此,如果你沒有定制化的開發交易工具的能力,而只能使用現有的工具的話,你的思想和自由意志就這樣被別人的工具所局限住了。——對QUANTAXIS的設計理念的思考和一些感悟
-
使用python進行股票歷史數據下載和分析選股。除了選股策略以外,其他都可公開。
-
git網站上有很多優秀開源量化平台項目。本項目與其他項目的區別是,本項目側重于選股、回測所需數據的導入工作。有了歷史數據和選股策略,選擇哪個量化平台做回測都是很輕松的事情了。
-
業余編程水平,需求導向。才疏學淺,剛學python幾個月時間。git主要作爲云端git庫使用。無任何解答服務。
-
力求選擇最穩定可靠的數據獲取方式。雖然網上有很多數據源平台,但都受制于“積分”、帶寬、平台是否更新等,完全是把程序主動權交到了對方手裏。因此本項目所有數據依靠本地通達信軟件導出提供。感謝通達信,真是個好公司!不止數據容易提取,各種和諧加強版也很好用。
軟件運行截圖
盤中選股截圖
回測系統截圖
高亮顯示策略歷史持倉區域,紅賺綠虧
- 讀取本機通達信文件,導出未除權日線數據、股本變遷數據、全A股全年份財務報告數據。
- 財務報告數據自動判斷是否需要更新
- 日線數據本地前復權計算處理。日線數據只追加當日數據,加快數據更新速度。
- 在當天數據更新後的盤後選股(選股策略你得自己寫)
- 當天盤中選股【2021年2月10日19:03:24完成】
- 數據存儲方式優化。目前使用csv文件,性能略差。但這個也不是特別需要。【2021年2月10日完成,使用pickle格式保存】
- 回測(是指本項目提供數據和策略,接入本地化的量化回測平台進行回測,使用rqalpha)【2021年3月2日完成】
- 多進程處理優化【2021年3月5日完成】
需求優先級由高到低排序
- 暫無
基礎數據來源:
| 數據名稱 | 數據來源路徑 | 數據本身更新方式 |
|---|---|---|
| 日線數據 | 解析本機通達信離線數據/vipdoc/sh(sz)/lday | 完整數據通過通達信軟件手動更新,當日數據可在通達信設置自動更新 |
| 財務報告數據 | 解析本機通達信離線數據 /vipdoc/cw | 代碼自動維護更新 |
| 股本變遷數據 | 解析本機通達信離線數據 /T0002/hq_cache/gbbq | 運行通達信時,通達信可自動更新 |
其他數據可以由基礎數據本機計算得出。比如前復權、流通市值、市盈率等。
- 項目本身只有幾個python文件,不占硬盤空間。但通達信導出的日線數據需要4G的硬盤空間。并且強烈建議使用固態硬盤存儲通達信導出數據,可極大提升性能。
- 通達信軟件菜單-系統-盤後數據下載,下載滬深日線數據,日期從19900101至當天。
- 通達信軟件菜單-系統-專業財務數據,下載全部財務數據包。
- 克隆/下載項目zip包,解壓縮。項目無需pip安裝
- 查看軟件架構章節,自行安裝支持庫
- 打開user_config.py,配置好各路徑
- 參照CeLue模板.py,照貓畫虎自己寫策略,保存爲celue.py
- 接著看數據更新章節
每天16時以後,通達信才會更新當日日線數據。你可手動更新,或在通達信設置-設置1標簽,勾選“定時提示下載日線”并設置爲16點。在通達信軟件運行的情況下,每天16點通達信自動更新當日數據。
本機通達信軟件更新數據後,再進行下面的操作:
-
運行readTDX_cw.py,更新財報和股權變遷數據
-
運行readTDX_lday.py,自動更新需要更新的數據。使用命令行參數 del 可刪除現有數據文件,強制重新生成全部數據。
python readTDX_lday.py del有了歷史數據文件,你也可以利用數據自行發揮你的想象力做任何事情。
本項目導出的數據自動進行了前復權處理,可與通達信軟件內顯示的價格完全一致,一分錢都不差(你需要在通達信軟件的設置1裏勾選“復權采用等比方式”,否則很多股票多年前的價格是負的)。
盤中或盤後,都可通過運行xuangu.py選股。xuangu.py會自動調用celue.py的策略選股并顯示結果。
盤後(周一~周五16:01~8:59,或周六周日)使用 readTDX_lday.py 生成的本機數據選股。當日16點以後,自己手動控制通達信更新完當日數據,運行xuangu.py進行選股。xuangu.py文件裏有日期變量的設置。如果不指定日期,按照當天數據選股。如果指定日期,按照日期區間的數據選股。
盤中(周一~周五,9:00~16:00)使用昨日之前的本機數據 + 當天在線實時數據選股。程序會獲取當日實時最新行情,整合到具體股票日線數據中(不保存到文件,只在內存操作),并判斷是否需要前復權(前復權的特性是如果今天除權,那麼以前的數據全需要變)。
保存策略信號是爲了方便查看策略的買賣點,以及方便回測。
生成的celue匯總.csv可以極大的提升回測效率。回測如果不使用 celue匯總.csv 而是直接循環,每天4000多只股票都需要循環一遍,循環5年就需要半個小時多。而使用 celue匯總.csv 只需要1分鍾就可獲得結果。
-
運行 celue_save.py 文件爲本機數據文件添加策略買賣信號。并生成一個獨立的 celue匯總.csv 文件。
-
默認只更新缺少策略信號的交易日,使用命令行參數 del 完全重新生成策略信號(比如當你修改了策略時就需要全部重新生成策略信號)
python celue_save.py del- 默認使用多進程執行,效率高。使用命令行參數 single 單進程執行。
python celue_save.py single生成策略信號文件之後你就可以拿著 celue匯總.csv 文件去任意一個回測框架回測,只需要在回測框架裏導入 celue匯總.csv 內容即可。具體如何導入可借鑒 huice_rq.py 文件。
我自己使用了開源量化回測框架 rqalpha ,運行 huice_rq.py 即可直接進行回測。
運行 plot.py 後打開同目錄的 pyecharts.html 可以直觀查看策略在具體股票歷史K線圖上的買賣區間。
想給日線計算添加自己的數據,在func_TDX.py的make_fq函數,加到下面語句前。
if flag_attach: # 追加模式,則附加最新處理的數據
data = df_code_original.append(data)財報文件所有字段釋義,查看“util_docs\專業財務文件字段含義對照表.txt”
本項目不包含自動化交易模塊。但你可以對接任何有python接口的自動化交易軟件。
xuangu.py 最後的變量“已選出股票列表”保存的就是策略當天發出買入信號,可買入的股票列表。只需對“已選出股票列表”下達買入命令即可。
缺少獲取當前持倉股部分的代碼,需要自行編寫。
獲取持倉股列表後,加工下面的核心代碼:
stock_code = '000887'
df_stock = pd.read_csv(ucfg.tdx['csv_lday'] + os.sep + stock_code + '.csv',
index_col=None, encoding='gbk', dtype={'code': str})
df_stock['date'] = pd.to_datetime(df_stock['date'], format='%Y-%m-%d') # 轉爲時間格式
df_stock.set_index('date', drop=False, inplace=True) # 時間爲索引。方便與另外復權的DF表對齊合并
if '09:00:00' < time.strftime("%H:%M:%S", time.localtime()) < '16:00:00':
df_today = get_tdx_lastestquote(stock_code)
df_stock = update_stockquote(stock_code, df_stock, df_today)
celue_sell = 賣策略(df_stock)| 軟件/庫 | 版本 |
|---|---|
| windows 10 | 20H2 |
| 通達信開心果版本 | v2020.12 |
| python (anaconda) | 3.8.5 |
| pytdx | 1.72 |
| pyecharts | 1.9.0 |
| RQalpha | 4.2.5 |
| ta-lib(安裝方法:在cmd上使用“pip install talib”命令一般會報錯,正確安裝方法是,進入*https://www.lfd.uci.edu/~gohlke/pythonlibs/*,下拉選擇TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl(win系統64位,python3.7版本,根據自己系統和python版本選擇相應的安裝包),將下載包放在當前工作路徑中,然後在Anaconda Prompt(或windows的cmd)裏面輸入命令:pip install TA_Lib-0.4.17-cp27-cp27m-win_amd64.whl) | 0.4.19 |
| pandas | 1.2.3 |
其他都是輔助庫。缺什麼庫運行時報錯自己pip安裝一下即可