一個選股規則的Python實現

好久沒有發文章了。本來想法一個關於開平倉的思考結論。但是,我懶,總是寫不下去。先那麼著吧。

隨便發一個之前朋友給的練手的選股規則。

我用Python實現的。

選股的邏輯如下:

選股策略測試

行情判斷:1,漲跌幅<4%;2,0.8%<換手率<3%

基本面判斷:1,0<PB<1;2,每股收益>1;3,上市>20天

對符合上述條件的股票進行排序,選擇PB最小的。

思路:跌破凈資產,每股收益高,找破凈破得最多的。換手還有點起色,漲幅不大的。

目標:選熊市裡虧得最少,牛市裡能跟漲的票。

import tushare as tsimport pandas as pdimport datetime as dtdef downloaddata(): #建立df0用來存儲基本面信息df0 = pd.DataFrame() df0 = ts.get_stock_basics() #將code、name、pb、esp(每股收益)、timeToMarket(上市日期)保存到df0中 df0 = df0.loc[:,[name, pb, esp, timeToMarket]] #將df0按code進行排序 df0 = df0.sort_index(axis=0, ascending=True) df0.to_csv(./選股/stock_basics.csv) #建立df1用來存儲技術面信息 df1 = ts.get_today_all() #將code、name、changepercent(漲跌幅)、turnoverratio(換手率)保存到df1中 df1 = df1.loc[:,[code,name, changepercent, turnoverratio]] df1 = df1.set_index(code) #將df1按code進行排序 df1 = df1.sort_index(axis=0, ascending=True) df1.to_csv(./選股/today_all.csv)def stock_picking(): df0 = pd.read_csv(./選股/stock_basics.csv) df1 = pd.read_csv(./選股/today_all.csv) #將df0和df1橫向拼接起來,賦給df df = pd.merge(df0,df1, how=inner) # 將每股收益(esp)>1,0<PB<1 df = df[(df.esp > 1) & (0 < df.pb) & (df.pb < 1)] #將 漲跌幅(changepercent)<4% 和 0.8%<換手率(turnoverratio)<3% 的保留下來 df = df[(df.changepercent<4) & (0.8<df.turnoverratio)&(df.turnoverratio<3)] if df.empty: print(無符合條件股票!) else: df = df.sort_values(by=pb, ascending=True) df = df.rename(columns={code:股票代碼, name:股票簡稱, pb:平均凈資產, esp:每股收益, timeToMarket:上市日期, changepercent:漲跌幅, turnoverratio:換手率}) df = df.set_index(股票代碼) #df.to_csv(C:/Users/admin/Desktop/選股.csv) date = dt.date.today() df.to_excel(./選股/選股{0}.xlsx.format(date))if __name__ == __main__: downloaddata() stock_picking()

這個還是過年前寫的。過年到現在基本荒廢了。

還是得抓緊時間再琢磨琢磨,不然Python學完的東西都忘光了又~~~

這個小腳本也不是盡善盡美的。選股要求里,要把上市時間考慮上,但是限於清洗數據格式的本事不到家。在腳本中沒辦法篩選。只能將選出的所有股票都導出的一個excel表中,再進行人工篩選。

推薦閱讀:

新手遇到笨辦法學python第13題?
Python函數中*和**的內涵究竟是什麼呢?
pycharm 如何程序運行後,仍可查看變數值?(非Debug mode, 因為debug運行太慢)
Python的from import和import的區別?

TAG:Python | Python3x | 股票 |