python在a股選股中的應用(如何用python選股票)

本文目錄一覽:

如何用python代碼判斷一段範圍內股票最高點

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

登錄

python+聚寬 統計A股市場個股在某時間段的最高價、最低價及其時間 原創

2019-10-12 09:20:50

開拖拉機的大寶 

碼齡4年

關注

使用工具pycharm + 聚寬數據源,統計A股市場個股在某時間段的最高價、最低價及其時間,並打印excel表格輸出

from jqdatasdk import *

import pandas as pd

import logging

import sys

logger = logging.getLogger(“logger”)

logger.setLevel(logging.INFO)

# 聚寬數據賬戶名和密碼設置

auth(‘username’,’password’)

#獲取A股列表,包括代號,名稱,上市退市時間等。

security = get_all_securities(types=[], date=None)

pd2 = get_all_securities([‘stock’])

# 獲取股票代號

stocks = list(get_all_securities([‘stock’]).index)

# 獲取股票名稱

stocknames = pd2[‘display_name’]

start_date = ‘2015-01-01’

end_date = ‘2018-12-31’

def get_stocks_high_low(start_date,end_date):

# 新建表,表頭列

# 為:”idx”,”stockcode”,”stockname”,”maxvalue”,”maxtime”,”lowvalue”,”lowtime”

result = pd.DataFrame(columns=[“idx”, “stockcode”, “stockname”, “maxvalue”, “maxtime”, “lowvalue”, “lowtime”])

for i in range(0,stocks.__len__()-1):

pd01 = get_price(stocks[i], start_date, end_date, frequency=’daily’,

fields=None, skip_paused=False,fq=’pre’, count=None)

result=result.append(pd.DataFrame({‘idx’:[i],’stockcode’:[stocks[i]],’stockname’:

[stocknames[i]],’maxvalue’:[pd01[‘high’].max()],’maxtime’:

[pd01[‘high’].idxmax()],’lowvalue’: [pd01[‘low’].min()], ‘lowtime’:

[pd01[‘low’].idxmin()]}),ignore_index=True)

result.to_csv(“stock_max_min.csv”,encoding = ‘utf-8’, index = True)

logger.warning(“執行完畢!

中國的 Python 量化交易工具鏈有哪些

萬得的Python API,可以用來獲取實時數據、歷史數據以及下單交易 優點:萬得大而全 缺點:下單交易功能不是事件驅動(例如成交回報需要用戶去查詢,而不是主推)

同花順iFinD的Python API,類似萬得的API 優點:比萬得便宜,同花順的服務態度很好(用戶提出新需求後很快就能給出確定的答覆或者解決方案)

掘金的量化平台

通聯數據的量化平台

QuickFix的Python API(可以用來接國信、方正的FIX接口)

Numpy/Scipy/Matplotlib/Pandas(量化分析)

IPyhon/Spyder(適合做量化分析的IDE環境)

Zipline(策略開發回測)

TuShare財經數據接口 – 可以直接抓取新浪財經、鳳凰財經的網站數據,包括行情、基本面、經濟數據等等。完全免費,簡潔易用,API設計得非常友好,提取的數據格式是Pandas的DataFrame。同時可以獲取非高頻實時數據(取決於網站更新速度,同事經驗大約是15秒),一個極好的非高頻股票策略數據解決方案。

恒生電子的量化贏家平台,提供Python接口,鏈接我點進去後沒看到具體的使用教程,希望回頭補一下。

米礦ricequant在我提出這個問題時尚只有Java的API,後來也支持了Python,期待2016有新的突破。

python量化哪個平台可以回測模擬實盤還不要錢

Python量化投資框架:回測+模擬+實盤

Python量化投資 模擬交易 平台   1. 股票量化投資框架體系 1.1 回測 實盤交易前,必須對量化交易策略進行回測和模擬,以確定策略是否有效,並進行改進和優化。作為一般人而言,你能想到的,一般都有人做過了。回測框架也如此。當前小白看到的主要有如下五個回測框架: Zipline :事件驅動框架,國外很流行。缺陷是不適合國內市場。 PyAlgoTrade : 事件驅動框架,最新更新日期為16年8月17號。支持國內市場,應用python 2.7開發,最大的bug在於不支持3.5的版本,以及不支持強大的pandas。 pybacktest :以處理向量數據的方式進行回測,最新更新日期為2個月前,更新不穩定。 TradingWithPython:基於pybacktest,進行重構。參考資料較少。 ultra-finance:在github的項目兩年前就停止更新了,最新的項目在谷歌平台,無奈打不開網址,感興趣的話,請自行查看吧。 RQAlpha:事件驅動框架,適合A股市場,自帶日線數據。是米筐的回測開源框架,相對而言,個人更喜歡這個平台。 2 模擬 模擬交易,同樣是實盤交易前的重要一步。以防止類似於當前某券商的事件,半小時之內虧損上億,對整個股市都產生了惡劣影響。模擬交易,重點考慮的是程序的交易邏輯是否可靠無誤,數據傳輸的各種情況是否都考慮到。 當下,個人看到的,喜歡用的開源平台是雪球模擬交易,其次是wind提供的模擬交易接口。像優礦、米筐和聚寬提供的,由於只能在線上平台測試,不甚自由,並無太多感覺。 雪球模擬交易:在後續實盤交易模塊,再進行重點介紹,主要應用的是一個開源的easytrader系列。 Wind模擬交易:若沒有機構版的話,可以考慮應用學生免費版。具體模擬交易接口可參看如下鏈接: 3 實盤 實盤,無疑是我們的終極目標。股票程序化交易,已經被限制。但對於萬能的我們而言,總有解決的辦法。當下最多的是破解券商網頁版的交易接口,或者說應用爬蟲爬去操作。對我而言,比較傾向於食燈鬼的easytrader系列的開源平台。對於機構用戶而言,由於資金量較大,出於安全性和可靠性的考慮,並不建議應用。 easytrader系列當前主要有三個組成部分: easytrader:提供券商華泰/傭金寶/銀河/廣發/雪球的基金、股票自動程序化交易,量化交易組件 easyquotation : 實時獲取新浪 / Leverfun 的免費股票以及 level2 十檔行情 / 集思路的分級基金行情 easyhistory : 用於獲取維護股票的歷史數據 easyquant : 股票量化框架,支持行情獲取以及交易 2. 期貨量化投資框架體系 一直待在私募或者券商,做的是股票相關的內容,對期貨這塊不甚熟悉。就根據自己所了解的,簡單總結一下。 2.1 回測 回測,貌似並沒有非常流行的開源框架。可能的原因有二:期貨相對股票而言,門檻較高,更多是機構交易,開源較少; 去年至今對期貨監管控制比較嚴,至今未放開,只能做些CTA的策略,另許多人興緻泱泱吧。 就個人理解而言,可能wind的是一個相對合適的選擇。 2.2 模擬 + 實盤 vn.py是國內最為流行的一個開源平台。起源於國內私募的自主交易系統,2015年初啟動時只是單純的交易API接口的Python封裝。隨着業內關注度的上升和社區不斷的貢獻,目前已經一步步成長為一套全面的交易程序開發框架。如官網所說,該框架側重的是交易模塊,回測模塊並未支持。 能力有限,如果對相關框架感興趣的話,就詳看相關的鏈接吧。個人期望的是以RQAlpha為主搭建回測框架,以雪球或wind為主搭建模擬框架,用easy系列進行交易。

如何用python 爬蟲抓取金融數據

獲取數據是數據分析中必不可少的一部分,而網絡爬蟲是是獲取數據的一個重要渠道之一。鑒於此,我拾起了Python這把利器,開啟了網絡爬蟲之路。

本篇使用的版本為python3.5,意在抓取證券之星上當天所有A股數據。程序主要分為三個部分:網頁源碼的獲取、所需內容的提取、所得結果的整理。

一、網頁源碼的獲取

很多人喜歡用python爬蟲的原因之一就是它容易上手。只需以下幾行代碼既可抓取大部分網頁的源碼。

import urllib.request

url=’ar.com/stock/ranklist_a_3_1_1.html’  #目標網址headers={“User-Agent”:”Mozilla/5.0 (Windows NT 10.0; WOW64)”}  #偽裝瀏覽器請求報頭request=urllib.request.Request(url=url,headers=headers)  #請求服務器response=urllib.request.urlopen(request)  #服務器應答content=response.read().decode(‘gbk’)   #以一定的編碼方式查看源碼print(content)  #打印頁面源碼

雖說抓一頁的源碼容易,不過在一個網站內大量抓取網頁源碼卻經常遭到服務器攔截,頓時感覺世界充滿了惡意。於是我開始研習突破反爬蟲限制的功法。

1.偽裝流浪器報頭

很多服務器通過瀏覽器發給它的報頭來確認是否是人類用戶,所以我們可以通過模仿瀏覽器的行為構造請求報頭給服務器發送請求。服務器會識別其中的一些參數來識別你是否是人類用戶,很多網站都會識別User-Agent這個參數,所以請求頭最好帶上。有一些警覺性比較高的網站可能還會通過其他參數識別,比如通過Accept-Language來辨別你是否是人類用戶,一些有防盜鏈功能的網站還得帶上referer這個參數等等。

2.隨機生成UA

證券之星只需帶User-Agent這個參數就可以抓取頁面信息了,不過連續抓取幾頁就被服務器阻止了。於是我決定每次抓取數據時模擬不同的瀏覽器發送請求,而服務器通過User-Agent來識別不同瀏覽器,所以每次爬取頁面可以通過隨機生成不同的UA構造報頭去請求服務器,

3.減慢爬取速度

雖然模擬了不同瀏覽器爬取數據,但發現有的時間段可以爬取上百頁的數據,有時候卻只能爬取十來頁,看來服務器還會根據你的訪問的頻率來識別你是人類用戶還是網絡爬蟲。所以我每抓取一頁都讓它隨機休息幾秒,加入此句代碼後,每個時間段都能爬取大量股票數據了。

4.使用代理IP

天有不測風雲,程序在公司時順利測試成功,回寢室後發現又只能抓取幾頁就被服務器阻止了。驚慌失措的我趕緊詢問度娘,獲知服務器可以識別你的IP,並記錄此IP訪問的次數,可以使用高匿的代理IP,並在抓取的過程中不斷的更換,讓服務器無法找出誰是真兇。此功還未修成,欲知後事如何,請聽下回分解。

5.其他突破反爬蟲限制的方法

很多服務器在接受瀏覽器請求時會發送一個cookie文件給瀏覽器,然後通過cookie來跟蹤你的訪問過程,為了不讓服務器識別出你是爬蟲,建議最好帶上cookie一起去爬取數據;如果遇上要模擬登陸的網站,為了不讓自己的賬號被拉黑,可以申請大量的賬號,然後再爬入,此處涉及模擬登陸、驗證碼識別等知識,暫時不再深究…總之,對於網站主人來說,有些爬蟲確實是令人討厭的,所以會想出很多方法限制爬蟲的進入,所以我們在強行進入之後也得注意些禮儀,別把人家的網站給拖垮了。

二、所需內容的提取

獲取網頁源碼後,我們就可以從中提取我們所需要的數據了。從源碼中獲取所需信息的方法有很多,使用正則表達式就是比較經典的方法之一。我們先來看所採集網頁源碼的部分內容。

為了減少干擾,我先用正則表達式從整個頁面源碼中匹配出以上的主體部分,然後從主體部分中匹配出每隻股票的信息。代碼如下。

pattern=re.compile(‘tbody[\s\S]*/tbody’)  

body=re.findall(pattern,str(content))  #匹配tbody和/tbody之間的所有代碼pattern=re.compile(‘(.*?)’)

stock_page=re.findall(pattern,body[0])  #匹配和之間的所有信息

其中compile方法為編譯匹配模式,findall方法用此匹配模式去匹配出所需信息,並以列表的方式返回。正則表達式的語法還挺多的,下面我只羅列所用到符號的含義。

語法    說明  

.    匹配任意除換行符「\n」外的字符  

*    匹配前一個字符0次或無限次  

?    匹配前一個字符0次或一次  

\s    空白字符:[空格\t\r\n\f\v]  

\S    非空白字符:[^\s]  

[…]    字符集,對應的位置可以是字符集中任意字符  

(…)    被括起來的表達式將作為分組,裏面一般為我們所需提取的內容  

正則表達式的語法挺多的,也許有大牛隻要一句正則表達式就可提取我想提取的內容。在提取股票主體部分代碼時發現有人用xpath表達式提取顯得更簡潔一些,看來頁面解析也有很長的一段路要走。

三、所得結果的整理

通過非貪婪模式(.*?)匹配和之間的所有數據,會匹配出一些空白字符出來,所以我們採用如下代碼把空白字符移除。

stock_last=stock_total[:] #stock_total:匹配出的股票數據for data in stock_total:  #stock_last:整理後的股票數據

if data==”:

stock_last.remove(”)

最後,我們可以打印幾列數據看下效果,代碼如下

print(‘代碼’,’\t’,’簡稱’,’   ‘,’\t’,’最新價’,’\t’,’漲跌幅’,’\t’,’漲跌額’,’\t’,’5分鐘漲幅’)for i in range(0,len(stock_last),13):        #網頁總共有13列數據

print(stock_last[i],’\t’,stock_last[i+1],’ ‘,’\t’,stock_last[i+2],’  ‘,’\t’,stock_last[i+3],’  ‘,’\t’,stock_last[i+4],’  ‘,’\t’,stock_last[i+5])

源代碼選股用什麼軟件

python

Python-基於TuShare的A股自動選股程序,在整個世界最好用的選股軟件就是自己的選股思維,其他任何選股軟件都是人為編製的,如果能靠選股軟件選出牛股,那麼程序員將會是世界首富了。

選股思維比任何其他的東西都重要,只有有好的選股思維才能在這一領域有所建樹。

python的量化代碼怎麼用到股市中

2010 ~ 2017 滬深A股各行業量化分析

在開始各行業的量化分析之前,我們需要先弄清楚兩個問題:

第一,A股市場上都有哪些行業;

第二,各行業自2010年以來的營收、凈利潤增速表現如何?

第一個問題

很好回答,我們使用JQData提供的獲取行業成分股的方法,輸入get_industries(name=’sw_l1′)

得到申萬一級行業分類結果如下:它們分別是:【農林牧漁、採掘、化工、鋼鐵、有色金屬、電子、家用電器、食品飲料、紡織服裝、輕工製造、醫藥生物、公用事業、交通運輸、房地產、商業貿易、休閑服務、綜合、建築材料、建築裝飾、電器設備、國防軍工、計算機、傳媒、通信、銀行、非銀金融、汽車、機械設備】共計28個行業。

第二個問題

要知道各行業自2010年以來的營收、凈利潤增速表現,我們首先需要知道各行業在各個年度都有哪些成分股,然後加總該行業在該年度各成分股的總營收和凈利潤,就能得到整個行業在該年度的總營收和總利潤了。這部分數據JQData也為我們提供了方便的接口:通過調用get_industry_stocks(industry_code=『行業編碼』, date=『統計日期』),獲取申萬一級行業指定日期下的行業成分股列表,然後再調用查詢財務的數據接口:get_fundamentals(query_object=『query_object』, statDate=year)來獲取各個成分股在對應年度的總營收和凈利潤,最後通過加總得到整個行業的總營收和總利潤。這裡為了避免非經常性損益的影響,我們對凈利潤指標最終選取的扣除非經常性損益的凈利潤數據。

我們已經獲取到想要的行業數據了。接下來,我們需要進一步分析,這些行業都有什麼樣的增長特徵。

我們發現,在28個申萬一級行業中,有18個行業自2010年以來在總營收方面保持了持續穩定的增長。它們分別是:【農林牧漁,電子,食品飲料,紡織服裝,輕工製造,醫藥生物,公用事業,交通運輸,房地產,休閑服務,建築裝飾,電氣設備,國防軍工,計算機,傳媒,通信,銀行,汽車】;其他行業在該時間範圍內出現了不同程度的負增長。

那麼,自2010年以來凈利潤保持持續增長的行業又會是哪些呢?結果是只有5個行業保持了基業長青,他們分別是醫藥生物,建築裝飾,電氣設備,銀行和汽車。(註:由於申萬行業在2014年發生過一次大的調整,建築裝飾,電氣設備,銀行和汽車實際從2014年才開始統計。)

從上面的分析結果可以看到,真正能夠保持持續穩定增長的行業並不多,如果以扣非凈利潤為標準,那麼只有醫藥生物,建築裝飾,電氣設備,銀行和汽車這五個行業可以稱之為優質行業,實際投資中,就可以只從這幾個行業中去投資。這樣做的目的是,一方面,能夠從行業大格局層面避免行業下行的風險,繞開一個可能出現負增長的的行業,從而降低投資的風險;另一方面,也大大縮短了我們的投資範圍,讓投資者能夠專註於從真正好的行業去挑選公司進行投資。

「2010-2017」投資於優質行業龍頭的收益表現

選好行業之後,下面進入選公司環節。我們知道,即便是一個好的行業也仍然存在表現不好的公司,那麼什麼是好的公司呢,本文試圖從營業收入規模和利潤規模和來考察以上五個基業長青的行業,從它們中去篩選公司作為投資標的。

3.1按營業收入規模構建的行業龍頭投資組合

首先,我們按照營業收入規模,篩選出以上5個行業【醫藥生物,建築裝飾,電氣設備,銀行和汽車】從2010年至今的行業龍頭如下表所示:

可以看到,雖然時間跨度很長,但是在這5個行業中,營收規模大的公司始終處於領先地位。它們分別是【上海醫藥,中國建築,上海電氣,工商銀行,上汽集團】。

由於各年度上市公司年報的公布截止日是4月30日,待所有上市公司年報公布後,確定行業龍頭,然後將這些行業龍頭構建成一個投資組合。那麼,持有投資組合的收益表現如何呢?為了保證投資時間的一致性,我們假設從2015年4月30號之後的第一個交易日開始投資,本金是100萬,每個標的投資權重相同,都是20%,並且忽略交易成本,那麼持有該組合至2018年4月30號的投資收益是多少呢?

我們利用JQData提供的獲取行情接口get_price(security=’股票代碼’, start_date=’開始交易日’, end_date=’投資截止日’, frequency=’daily’, fields=None, skip_paused=False, fq=’pre’),分別獲取組合中各個公司在各年度開始交易日和投資截止日(4.30之後的第一個交易日)的價格,得到最終的投資結果如下圖所示:

可以看到,除了2015.5.4-2016.5.3股災期間,該組合投資收益率和上證指數、滬深300指數有一個同步的大幅下跌外,從2016.5.3至2018年5.2,改組合連續兩年獲得了正收益,並在2016年大幅跑贏另外兩個基準指數20%以上。

聰明的讀者一定會問這樣一個問題,如果我從2018年5月2號開始,投資100萬買入這樣一個按營收規模衡量的行業龍頭組合,至2018年5月30號,收益表現會如何呢?答案是【3.04%】,而同期上證指數收益率和滬深300收益率分別是【-0.20%】和【-0.39%】,可以說表現非常之好了。具體收益如下表所示:

3.2按扣非凈利潤規模構建的行業龍頭投資組合

如果我們按照扣除非經常性損益的凈利潤來衡量,以上5個行業從2010年至今的行業龍頭又會是哪些呢,我們查出來如下表所示:

可以看到,按照扣非凈利潤來構建投資組合,醫藥生物和電氣設備兩個行業分別發生了行業龍頭的更替,如果要構建基於扣非凈利潤的投資組合,那麼我們就需要每年去調整我們的組合標的以保證組合中都是上一年度的行業龍頭。和上述投資回測方式一樣,我們從2015年5月4號買入這樣一個組合,並在之後每年4月30號之後的第一個交易日調整組合中的行業龍頭標的,最終的投資結果如下表所示:

可以看到,即使是2015.4.30-2016.5.3股災期間,該組合也跑贏上證指數和滬深300指數3%左右;而2016.5.3至2018年5.2期間更是大幅跑贏兩個基準指數高達30%以上。

同樣的,如果從2018年5月2號開始,投資100萬買入這樣一個按扣非凈利潤規模衡量的行業龍頭組合,至2018年5月30號,收益表現會如何呢?答案是【2.83%】,對比同期上證指數收益率和滬深300指數的【-0.20%】和【-0.39%】,仍然維持了非常良好的表現。具體收益如下表所示:

結論

通過以上行業分析和投資組合的歷史回測可以看到:

先選行業,再選公司,即使是從2015年股災期間開始投資,至2018年5月1號,仍然能夠獲得相對理想的收益,可以說,紅杉資本的賽道投資法則對於一般投資者還是比較靠譜的。

在構建行業龍頭投資組合時,凈利潤指標顯著優於營業收入指標,獲得的投資收益能夠更大的跑贏全市場收益率

市場是不斷波動的,如果一個投資者從股災期間開始投資,那麼即使他買入了上述優質行業的龍頭組合,在近3年也只能獲得12%左右的累計收益;而如果從2016年5月3日開始投資,那麼至2018年5月2日,2年時間就能獲得超過50%以上的收益了。所以,在投資過程中選擇時機也非常重要。

出自:JoinQuant 聚寬數據 JQData

原創文章,作者:OZCA9,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/130665.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OZCA9的頭像OZCA9
上一篇 2024-10-03 23:29
下一篇 2024-10-03 23:29

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論