程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

我用Python做一個量化指數增強策略,爽了 !附代碼!

編輯:Python

這是邢不行第 84 期量化小講堂的分享

作者 | 邢不行、密斯鋅硒

A股是一個神奇的地方,它最大的特點就是多年不漲和永遠的3000點。

正因如此,調侃A股的段子層出不窮。

甚至連中國男足這麼爛的行業都有人跑來Diss,諷刺A股比國足更差。

我想說的是,盡管A股有很多問題,但也絕不至於像男足一樣爛到這種地步。至少A股在全球的各個排名肯定是比男足高的。

左右滑動查看排名對比

但不管A股和男足哪個更菜,都改變不了中國股市一直在3000點上下波動的事實。

那麼下文我們就來探究A股萬年不漲背後的原理。

並在此基礎上給大家衍生出一個簡單又高效的A股策略,最終效果如圖所示:

300倍神秘策略

從07年至今按照策略交易可以翻200多倍,能夠大幅跑贏代表大盤的滬深300指數

這個策略是如何產生的,它的原理是什麼呢?這一切都要從上證指數說起。

01

上證指數簡介

說到A股圍繞3000點上下波動的時候,我們默認指的是上證指數。裡面包含了所有在上海交易所上市的1700多只股票。

上證指數在2007年初是2700點左右,期間最多漲到過6000點,然後一路下跌。最近幾年一直在3000點附近波動。

從07年到21年整整15年的時間只漲了36%,確實非常的拉胯。

上證指數月線數據

雖然媒體會默認用上證指數來代表中國股市,但有一定經驗的交易者基本不會看它。

因為大家都知道它是一個失真的指數,不能很好的描述市場整體狀況。

那為何上證指數會失真?我們從它的編制方式入手就能得到答案這也和我們的策略息息相關。

02

上證指數編制方法

上證指數的編制方式是總市值的加權平均。

也就是單個股票的當天漲跌幅會根據它的市值權重貢獻到整個漲跌幅當中。

光看定義大家可能並不能很好的理解,我這邊再舉一個案例。

如果對指數編制感興趣的話,歡迎掃描下方二維碼或加我微信xbx719與我交流。


1

案例分析

如下表所示,當天茅台的總市值是2.6萬億,是所有上證股票裡面最高的。依次按市值排序,最後的三毛市值僅為12億。

把這些股票的市值加總就能得到上證指數的總市值(48萬億)。

數據時間:2021年12月31日

我們以此算出每個股票占上證總市值的比例,如茅台的市值占比就是5.37%(25752/479553=5.37%),而排名最末的三毛僅為0.05%(12/479553=0.05%)

個股市值占比

茅台在當天漲跌幅是 -1.2%,那麼它對大盤的影響

就是5.37% * (-1.2%)。其他股票都能以此類推。

我們最終把這些值加總就能得到當天上證指數的漲跌幅是0.57%

借此我們就能知道,股票的市值越大,對指數的影響越大。

顯然茅台對指數的影響最大,而三毛對指數的影響基本可以忽略不計。

這種市值區分非常大的現象在上證指數成分股裡面是非常嚴重的。

2

權重拖累指數

我們還是以2021年12月31日的數據為例。

總計1750只成分股

市值排名前100的股票權重占比超過了52%,其它的1650個股票加起來也只占了48%。這像極了我們的貧富差距數據。

因此排名前100的股票對上證指數的走勢影響極大。

我們觀察下表中排名靠前的股票,如中某某行、中某油、中某某壽等。

市值前100股票

你可以很容易的從它們的月K線圖中看出這些股票基本處於千年不漲的情況,就像中國足球一樣。

     左右滑動查看更多

但這些股票一直不漲也是有原因的。

它們大多都是國有企業,只需為黨和人民服務,並不需要為股東(資本家)負責。

總而言之,上證指數多年不漲的本質原因就是:對上證指數影響最大的權重股多年不漲甚至下跌,導致了指數長期在3000點附近徘徊

那既然我們了解了這個現象,就應該想著怎麼去利用它。

比如我就非常好奇,如果去除或降低這些權重股的影響,同樣買上證指數的成分股,它的收益是否會有所提高?

03

上證等權指數

1

等權概念

我們這邊來做一個實驗,仍計算這些股票每天的漲跌幅。但是規定每個股票對整體指數的影響均等。

指數等權編制規則

如茅台和三毛對指數的影響都是1/1750,與市值無關。

數據時間:2021年12月31日

也就相當於我們重新編制一個等權指數,它不再偏袒於大市值股票。

同時我們繼續讓新指數每天的成分股和上證指數保持一致,只不過它們各自影響的權重不同

那這個等權指數的最終收益會如何,是否會超越原來的上證指數呢?

2

數據代碼

想要知道這個結果,首先我們需要每天每只股票的數據。

我已經幫大家整理好了數據,包含了所有的股票(包括已退市的股票)。數據的情況如圖所示:

數據展示

它包含了這個股票上市第一天至今,每天的開高收低價格以及總市值

有了數據後,通過Python代碼計算就能得到相應的結果。

如果你需要數據和代碼的話,可以掃描下方二維碼或加我微信xbx719,都是可以免費發給你的。

3

等權指數結果

最終結果如下圖所示:

圖中代表上證指數的黃色曲線,從2007年至今漲了36%,非常拉胯。

而代表等權指數的藍色曲線共漲了8.59倍。雖然15年只翻了10倍不到,但也遠遠跑贏了上證指數本身。

等權指數淨值表現更佳

這時我們再來看某足球評論員的那句“越南股市把A股爆了6:1”。

如果把上證等權指數越南股市從2010年開始做個對比的話就會發現,即使越南指數近幾年開始飙漲,但它整體的漲幅還是沒有跑贏等權指數。這恐怕要讓劉老師失望了。

上證等權指數vs越南指數

通過剛剛的說明,我們已經知道,指數因為編制的原因並未真實的反映出市場的漲跌幅

我們可以通過對所有成分股等權買入的方式來實現更高的增長

4

過程實操

但這些知識除了能讓大家了解指數編制的規則以外,對投資的實際幫助並不大。

因為沒有辦法投入實戰。你沒有這麼多錢去買入這麼多只股票。

你也沒有能力一下子去下單這麼多只股票,一個個下單的話不知道要下到猴年馬月。

除非你像我們一樣可以實現程序化的自動下單。

感興趣的可以觀看這個視頻

再者市面上也沒有相應的指數基金是等權跟蹤所有股票的,所以你基本上很難實現這個收益

但既然已經知道了A股不漲是因為大市值的股票拖累指數。那我們可以反過來想,如果只買小市值的股票,能不能實現更高的收益?

04

策略構建

1

小市值策略

我們可以嘗試構建一個簡單的選股策略。

選股策略

在每月的最後一個交易日對滬深300指數的成分股按照市值進行排序。

選取市值最小的10只股票,在次月的第一個交易日開盤時均倉買入。

之後無論漲跌如何都持有不動,等到這個月的最後一個交易日收盤時再把股票賣光。

之後繼續選擇此時市值最小的股票並買入,如此循環往復

2

舉例說明

例如我在2006年的12月29日選出了當天滬深300成分股中市值最小的10只股票

那我就在2007年1月的第一個交易日去均倉買入它們並一直持有到1月31日再賣光。

此時再選出最新的10只股票去買入,每月重復上述操作即可。

這樣大家應該可以完全理解,這是一個非常簡單的策略,執行起來也很容易。

因為每個月你只需交易一次,在行情軟件上面按市值排序就能知道買什麼了。

那麼這個策略的收益到底如何呢?

3

策略結果

這個策略的收益我並不推薦手工計算。

我們是用了Python編程及相應的股票數據來得到這個結果。

值得一提的是,我們這裡的股票數據有一列是專門用來確認這個股票是否當前屬於滬深300成分股的。

成分股篩選

這個數據非常難得,如果對數據和代碼感興趣的話,可以掃描下方二維碼或加我微信xbx719,都是可以免費發給你的。

代碼運行結果如圖所示:

藍色曲線展示了策略的情況,最終收益有26倍左右,遠遠跑贏了黃色曲線代表的滬深300指數

美中不足的是,策略的最大回撤高達70%,這也是不可避免的。因為策略要求一直滿倉持有股票,當所有的股票都開始下跌的時候,我們也沒法幸免。

但在實際交易中,你是可以做一定擇時的,可以靠你聰明的小腦袋瓜子去避免這個最大回撤。

但殘酷的現實卻是,對於大部分人來說,越做擇時,反而回撤越大,收益越低。

4

策略拓展

我建議大家可以去嘗試下這個策略,因為它本質上就是一個滬深300的指數增強。

最關鍵的是,這個策略每次我們只需要買10個股票,這很多人是買得起的。

甚至你還可以每次買3只股票,看看效果如何。

你可以掃描下方二維碼或加我微信xbx719,問我要了代碼和數據之後修改參數自己去跑一下,我這裡就不贅述了。

那除了改變股票數量外,我們還能對這個策略做進一步的延伸嗎?

05

策略優化

1

全A小市值股票策略介紹

我們之前是在滬深300的成分股裡選擇股票,如果在所有股票中選擇市值最小的股票,結果會怎樣呢?

當然,為了避免買到容易退市的股票,我們需要加一個限制條件。

我希望所選股票最近四個季度的淨利潤,也就是淨利潤TTM大於0。

也就是說我們選擇的公司至少在最近1年是賺錢的。並且這個股票不能是ST股或者即將退市的股票。

在這種情況下,我每個月挑選並買入持有市值最小的股票一個月,直到這個月的最後一個交易日才會賣出。

2

案例分析

比如在2006年12月末,我選出來10只股票,那麼就在07年1月的第一個交易日去買入並持有整個1月。

我會在1月31日收盤賣出持有的股票,並選出新的10只股票,在2月的第一個交易日去買入並持有,以此類推。

通過這樣的方法,我最終的收益有多少呢?我們還是要通過數據和Python來實現。

如果你需要這個代碼和數據的話,可以掃描下方二維碼或加我微信xbx719,都是可以直接發給你的。

3

策略結果

運行代碼之後最終結果如圖所示:

藍色曲線代表策略淨值

這個看似簡單的策略從2007年開始,在扣除了所有手續費後最終翻了284倍。

年化收益也由原來的25%提高到了46%,最大回撤也有所縮減

不過最大回撤相對來說還是比較大的,你可以嘗試去進一步優化策略。

而當我們對比兩個策略的資金曲線,你會發現不同的時間段它們的表現也是不相同的。

2015年前全部A股挑選小市值的策略漲幅更大,但15年至今,滬深300成分股中選擇的小市值股票反而更加優質

這源於策略風格上的差異,不同的策略適用於不同的市場。所以我們有的時候會同時去跑多個策略。

當然這是另外一個話題了,如果大家感興趣的話可以多多點贊,也可以掃描下方二維碼或加我微信xbx719交流。我們之後可以去講講多策略怎麼跑、多策略選擇以及多策略的輪動

06

尾聲

至此,我們通過A股指數當中一個固有的缺陷,帶出了一個有意思的交易策略。

其實類似的有趣現象和以此延伸出來的交易策略還有很多。

大家想看的話可以多多點贊,或加我微信xbx719交流,點贊破100的話,之後就再出一期來聊一聊A股的其他有趣現象

總而言之,我們要學會科學投資,不能只是主觀的去拍腦袋,然後根據一些不准確的經驗去做決策。

歸根到底一句話,我們用數據說話。

07

後記

文章的最後,和大家分享一點量化投資的心得

很多人問我小白如何開始學習量化投資,有什麼可以書單推薦

我的建議是千萬不要直接找本書來看。

你找本編程書看,那跟著敲完“Hello World”就結束了;你找本數學書看,那看到第七頁的公式就睡著了。

更好的學習方式是做實際的項目,在實踐中學習量化策略。

研報就是很好的量化實踐項目。

一篇研報就是一個策略,作者都是年薪百萬的高學歷券商分析師,你要做的就是讀懂策略研報,並用代碼實現。

在此期間什麼不會學什麼,哪裡不會點哪裡,抱著解決問題的心態去學習,事半功倍。

熟讀唐詩三百首,不會作詩也會吟。

那麼哪裡可以獲取研報呢?

你可以掃描下方二維碼或加我的微信xbx719,我這裡有分門別類幾萬份研報,還會實時更新

我會區分難度,精選之後發給你。

加我微信xbx719後,也可以交流量化投資相關問題,我比較忙,回復的比較慢,但是看到的都會回復。

聊的開心,聊得有緣,很多量化的數據、資料都是可以送給你的。

也可以翻翻我朋友圈的內容,很多量化干貨。一些不會公開發的內容,都會在朋友圈說。

聯系作者


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved