有人在中國嘗試過動量(momentum)交易策略嗎?效果怎麼樣?

動量交易策略,即預先對股票收益和交易量設定過濾準則,當股票收益或股票收益和交易量同時滿足過濾準則就買入或賣出股票的投資策略。行為金融意義上的動量交易策略的提出,源於對股市中股票價格中期收益延續性的研究。(來自百度百科)


--------------------9月9號更新-------------------

我們也推出了Python SDK,您也可以在Ricequant使用python更加快速地實現您的Monmentum策略了!

--------------------9月9號更新結束-------------------

@Liu Cao 同學的答案回測了動量策略在擇股上的應用,怒贊這位同學超強的動手能力。

心血來潮也想嘗試在我們自己的平台上動手寫寫中國股市的動量擇時的策略,因為實際上有不少時候價值投資者是用基礎數據先選出心儀的股票,然後再用動量策略的思路確定入場和離場的時機。

動量擇時和擇股的基本思路很接近,股票在表現強勁的時候有很大可能會持續上漲,表現差勁的接下來有很大可能繼續低迷。

比@Liu
Cao同學幸運的是所有從2005年開始所有A股日數據都已經在平台上了,並且經過了Split Adjusted清洗處理,並且會考慮進去倉位情況是否可以拿到對應的時間段的分紅。(具體可以訪問:

RiceQuant - Beta)只需要一行簡單java程序搞定。

我先挑了一隻平安證券,先寫一個最簡單的雙均線策略:如果短期均線從下方突破長期均線,近期走強,為買入信號,全倉買入,短期均線從上方跌破長期均線則為賣出信號,空倉。

選擇的長期均線 = 26天,短期均線
= 12天,基準為滬深300

回測開始日期20120512

回測結束日期20150112

程序無敵簡單,只需要調用Talib中的SMA功能計算兩段兩條均線值。10(ru)分(guo)鍾(ni)搞(shu)定(xi API):

經過了5秒的運算等待...

那麼結果出來了,在趨勢明顯的情況下簡單動量類策略的收益還是不錯的。橙色是我們的策略,藍色是基準(滬深300)。0.99的Sharpe也還是不錯的,22%的max drawdown稍微有點高...

PS: 關於風險計算的說明可以訪問: RiceQuant - Beta

除了收益以外,用自定義時間序列畫圖功能畫出了長短均線和每日收盤價格:

以上的圖形只用了類似的幾行代碼 (RiceQuant - Beta):

informer.plot("MACD",MACDOut[MACDLength.value-1]);

從圖上可以清晰地看到由兩條均線組成的金叉(golden cross)和死叉(death cross),對應的可以在下單歷史裡查看下單情況(交叉點的日期)

雙均線(simple moving average)策略雖然簡單易懂,但是最大的問題是均線本身計算方法所帶來的信號滯後性。等到出現金叉買入點的時候價格已經上漲很多。碰到震蕩市就會賠的很慘。比如我們在plot中放大一段雙均線的信號圖

--------------更好的策略的分割線-----------------

有沒有什麼優化的方法呢?我嘗試了下把SMA(simple moving average)換成EMA(exponential moving average)。

那麼EMA的雙均線表現如何呢?

在同樣的設定中進行回測,因為EMA中更多的權重給了最近的數值,所以捕捉動量要比SMA更加靈敏。在股價上漲的時候會更早出現買入信號:

EMA雙均線其實有個我們更熟悉的名字叫MACD,只是MACD增加多了一條signal line。

MACD line = 12 天 EMA - 26 天 EMA

MACD signal = 9 天 MACD的EMA

這樣就又形成了兩條線和新的金叉策略,當MACD從底部突破signal時候的走強,為買入信號,反之則是賣出信號。

直接在IDE里調用Talib的MACD功能計算MACD和MACDsignal,可見在趨勢性為主,震蕩較少的情況下表現不如SMA和EMA雙均線。

plot MACD和MACD的signal兩條自自定義線

另外一種比較簡單的使用MACD的方法,就是不用MACD Signal,直接把MACD和Zero零線做比較。

從回測結果來看,在震蕩較少,趨勢比較明顯的情況下,MACD的零線策略要比金叉策略更好:

現在我們取得了1.024的Sharpe(vs 0.99)

如果繼續往下做,我會考慮在程序中對MACD進行一些優化,比如不是等待金叉出現,而是根據趨勢來預測金叉的出現,在出現前就下單,等等。

個人感覺動量策略作為一個price based strategy還是有一定的輔助作用,也有可以挖掘的地方。可以結合市場的波動率(risk on risk off)和趨勢可以選擇在一定時間內對技術指標採取動量或者反轉的策略來捕捉交易信號。

最後我比較好奇07-08股災的時候這個小策略是否能扛得住呢,選擇的仍舊是平安銀行。我從07年1月運行到了15年1月,略微調整了一點參數,結果如下:

hmm... Not bad. 橙色是我們的策略,藍色是基準(滬深300)。基本上避開了那次谷底的大跌,最後的收益是700%多,但是max drawdown嘛。。。50%有點慘烈,比股災是好一些還需要繼續優化參數等。

MACD的策略代碼可以在這裡找到:RiceQuant - Beta, 複製黏貼進去你的代碼編輯器即可運行。(註冊一下很快的嘛...)

---------------------Slippage 和 Commission ------------------------

交易費已經考慮進去,其中包含落單對市場的衝擊 - Slippage,券商收取的commission,政府收取的印花稅三部分。

Slippage -

  • 關於整個回測中的落單對市場的衝擊模擬,我們使用了上海交易所的paper 中的effective bid ask spread : 0.246% - http://www.sse.com.cn/researchpublications/workstation/c/station20040901.pdf
  • 我們的具體計算方法 - RiceQuant - Beta
  • 這只是一種很粗糙的方法,將會加入更多的滑點模擬方法來更加真實地模擬,比如考慮到落單的volume的多少

Commission -

  • 雙向收費
  • 以上結果中使用的是萬分之8,也是我們的默認值
  • 可以自己重新用一行代碼進行定義

印花稅 -

  • 單向收費,千分之1

------------------關於雲端平台的策略的安全性---------------------

很多人都會concern這個問題,因此我們也非常非常重視:

  • 沒有任何的Ricequant員工可以看到您的加密過的演算法
  • 我們的技術方面的安全措施:RiceQuant - Beta

    • 純安全技術細節乾貨blog(seLinux etc...) Ricequant安全技術披露
  • 我們也會每年年底安排進行IT審計

最後...利益相關,我是Ricequant的聯合創始人。歡迎大家來RiceQuant - Beta試試自己的策略,他是完全免費的,我們也在朝實盤交易努力中:

Software is like sex; it"s better when it"s free. - Linus

About Open Source: 我們在考慮在考慮...代碼也寫得很認真...但是一個小小的公司實在是人手不足啊!

我們的平台和社區還在改進,希望幫助大家分享idea,量化交易不應該是封閉的,分享能更好地促進我們的進步學習。

Happy coding happy trading.


既然有100多人關注想知道答案,我就拋塊磚好了...

宋思源老師說他知道的動量策略基本都被淘汰了,我挺好奇國內會不會不一樣,下午端午放假沒事我翻了翻上次做的作業,又碼了幾行代碼,用A股市場的數據跑了跑,感覺結果(寫在後面)還可以啊,然後就有了這篇答案...

不過做出來的畢竟是paper profit...後面會多寫寫我能想到的paper profit可能有的缺點。

For those who want to save time...

1.數據說明

我選用了2013年9月1日-2014年4月30日(資料庫不給力真的桑不起...延遲都能有1個月),A股市場上所有有交易記錄的3112隻股票的周收益數據。

(為什麼選A股?因為我assume 題主說的"在中國"就是指買A 股...)

大概有8W多條,只選用了公司代碼,日期,和周收益三個數據

為什麼只做了六七個月?因為我不太想虐待開著虛擬機跑SAS的小MBA...

因為是周數據,其實也差不多了嗯。

為什麼選周數據?明明大家做動量不都是用月數據嘛....因為我有點想模擬散戶的心理..後面會說。

2.策略簡述

搜了幾篇論文搞清楚了動量策略指什麼,其中主要參考了論文[1]裡面的方法,選用mid-return當基準計算超額回報的想法來自於論文[2]。

Long story short 大致的思路是這樣的...

動量策略的擁簇者認為,市場有可能不是完全有效的

(尤其是在天朝,有時候用a股數據做CAPM檢驗,最後得出的無風險收益率齊刷刷是負的,真是無語凝噎..)

因為市場的不有效,股價對信息的反應可能是遲鈍的,即今天漲的股票明天可能會繼續漲,就像一列行駛的火車一樣,停下來或者加速都需要時間。(如果假設反應過度,那就叫反轉策略)

下面是詳細點的思路:

(上圖是我隨手用ppt畫的,中文字體找不到太好看的,索性用英文了,有人認識這字體么...挺有名的)

就是:

1)分析n-k 到 n 個周 (Period A-B) 的股票回報,選出回報最好的一組(winner),回報一般的一組(mid),回報最差的一組(loser)

2) 分析 n 到 m+n周 (Period B-C) 的 winner , loser ,mid 的回報

3)分析 n-k+1 到 n+1 個周 (Period A-B) 的股票回報,選出回報最好的一組(winner),回報一般的一組(mid),回報最差的一組(loser)

4) 分析 n+1 到 m+n+1周 (Period B-C) 的 winner , loser ,mid 的回報

5) 循環往複直到世界(數據)的盡頭...

6) 換個 k , m 接著跑循環... 我一共做了36組

(這表下面會用到,暫稱為table1好了)

(有興趣的同學可以到下面附註裡面找代碼來看,花了倆三小時用sas寫了200多行,沒有進行任何優化)

3.結果分析

說到分析量化策略的結果,我們首先要考慮的肯定是..

Trading cost (交易成本)!

因為沒有做過實盤,不知道A股有沒有bid-ask spread,不過我想bid-ask spread 代表的liquidity cost 總是有的(因為你不總能以想要的價格買進賣出..)

bid-ask spread 的估計基於論文[4],是紐交所研究部出的:

最後我先選擇了0.21%做spread算了一下(其實券商裡面做量化的大概不需要手續費吧...):

橫坐標代表table1裡面的serial(序號),分別是用不同的selecting-period和holding-period跑出來的數據。

縱坐標代表超額收益率(把高於mid-return portfolio收益的部分減去交易成本年化)

感覺結果還是挺符合邏輯的:

1.隨著持有期的增長,winner組合的超額收益率變得越來越低,最後接近於0。

2.1-1的組合(選出上周收益最好的,持有一周,下周再換)動量效應最明顯,超額收益最大。

3.loser組合基本沒有太大變化。

註:此處年化收益率並不代表這筆策略執行一年就能拿到這麼高的收益了,這裡只是方便比較,用mean直接算的年化(不過感覺各種寶都是這麼算的年化...),因為votility的存在,其實一年之後1-1組合winner收益的真實分布應該是這樣的(假設正態分布,標準差15%):

mean 大概15.49%,也就是有50%概率年化能超過這數...

不過有兩個問題我沒有考慮:

1.流動性,有時候股票漲的時候,由於漲停板什麼的存在,根本就就買不到,跌的時候也賣不掉。

2.不同的股票的trading cost是不一樣的,美帝市場相當有效,論文[2]測度出在美帝市場上,trading cost和動量利潤是有很強的線性的關係的,存在動量利潤的股票往往是trade比較少的小股票,bid-ask spread非常高,足以吃掉動量利潤。

如果考慮這些因素,稍微把交易成本提高一點的話(把spread提高到1.5%)....

媽蛋越寫越覺得不靠譜,大家將就看吧,就謝絕轉載了。拋塊磚等做過的來講講吧...

4.附註

1.完整代碼

知乎不支持貼SAS代碼...其實應該用matlab寫的..

對代碼感興趣的可以看下面鏈接,大概寫了200多行...沒有進行任何效率優化,因為懶...

Dropbox - test.pdf

2.參考文獻:

[1]Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency Narasimhan Jegadeesh; Sheridan Titman The Journal of Finance, Vol. 48, No. 1. (Mar., 1993), pp. 65-91

http://www.business.unr.edu/faculty/liuc/files/BADM742/Jegadeesh_Titman_1993.pdf

[2]Lesmond, David A., Michael J. Schill, and Chunsheng Zhou. "The illusory nature of momentum profits." Journal of Financial Economics 71.2 (2004): 349-380.

[3]Korajczyk, Robert A., and Ronnie Sadka. "Are momentum profits robust to trading costs?." The Journal of Finance 59.3 (2004): 1039-1082.

[4]http://www.nyse.com/pdfs/research_bid_ask.pdf


告訴大家一個公開的秘密:

根據實際回測數據,國內在精確到個股一籃子ALPHA上,實際短期反轉是正收益,動量是負收益。

在期貨、指數市場上,反而動量是正收益,反轉負收益。

別問我,其實我也不知道為什麼,只是數據結果還是蠻有趣的。

(以上基於中國市場所有股票20年數據,期貨最近10年數據)


謝邀。動量類策略在中國非常普遍,不僅限於股市。至於效果……則風險很大。

因為使用該策略的很多人,最近都不見了。


早在十多年前,坐標寧波,有一個叱吒風雲的交易團隊,號曰「漲停敢死隊」。

這個隊伍總舵主叫做徐翔,今年剛剛進去……

其實momentum這個交易策略全世界哪個市場都有,而且通常還都有效。不過,長期來看,市場的有效性還是十分顯著的。個人感覺,大多數momentum策略只是理論上可行,畢竟,隨著盤子越來越大,這種策略就越來越難以取得超額收益。

=================2016/03/10更新==================

跑了一天數據,突然想起自己還回答過這麼個問題,誰順便把近期的數據結果拿上來吧。感覺還蠻有意思的。

投資期限是從2005年二季度到2016年一季度。每個季度持有過去一年表現最好的10隻公募基金產品,無做空(也沒辦法做空)。你會得到如下投資回報:

只能說,還是10年前好賺錢啊,哈哈哈。啊,打字好累啊。


我理解的momentum trading就是右側交易 那我估計國內90%的機構都是這種風格 就算國外 只怕很多pm也偏向於momentum 因為畢竟catch the falling knife太反人性 除非你有個保險公司當後盾

當然我說的是momentum indicator as a tool肯定有人看(看的人越多就越有用)但是純momentum algo trading就不知道了 感覺偏簡單 可能還是要和其他strat配著用 同時還是要pm自己有大的macro ideas


利益相關不能具體說 但是可以明確的有兩點 一是動量作為一個因子而不是一個策略是好用的 二是動量這個因子的有效性是有周期性的 只能說到這了


以前做的一個簡單測試:

一種簡化的截面動量組合測試[PythonMATLAB]

一種簡化的截面動量組合測試[PythonMATLAB]


題主既然問的是動量(momentum)交易策略,我這邊就直入主題了。廢話不多說,獻上我的策略:

思路:

  • 股票池:滬深300成分股
  • 回測區間:2011年11月1日 —— 2015年3月1日
  • 調倉頻率:月度
  • 每次調倉買入月度收益排名前20%的股票
  • 等權重買入

代碼長度大概只有30行。

結果:

  • 年化收益35.7%。回撤不小,23.8%。
  • 運行時間大概40秒。

下面鏈接可以看到原圖和完整的策略:

動量策略.

是用通聯量化實驗室完成的,對量化研究感興趣的同學都可以上去玩玩。

最後獻上代碼:

import pandas as pd

start = "2011-11-01"
end = "2015-03-01"
benchmark = "HS300"
universe = set_universe("HS300") # 股票池為滬深300
capital_base = 10000000
refresh_rate = 10

def initialize(account):
pass

def handle_data(account):
history = account.get_attribute_history("closePrice", 20)
momentum = {"symbol":[], "c_ret":[]}
for stk in account.universe:
momentum["symbol"].append(stk)
momentum["c_ret"].append(history[stk][-1]/history[stk][0])

# 按照過去20日收益率排序,並且選擇前20%的股票作為買入候選
momentum = pd.DataFrame(momentum).sort(columns="c_ret").reset_index()
momentum = momentum[len(momentum)*4/5:len(momentum)] # 選擇
buylist = momentum["symbol"].tolist()
for stk in account.valid_secpos:
if stk not in buylist:
order_to(stk, 0)

# 等權重買入所選股票
portfolio_value = account.referencePortfolioValue
for stk in buylist:
if stk not in account.valid_secpos:
order_to(stk, int(portfolio_value / account.referencePrice[stk]
/ 100.0 / len(buylist))*100)


據我所知,很多人的交易策略里都有動量的因素,但單純的動量策略?貌似沒有,充其量是測試過


光大烏龍指的時候,動量策略(或模型)被耳光扇的爽不爽啊~

策略的調整一定是要和市場環境息息相關的

這就要求做策略的同學在面對市場風格切換的時候

要像男人的丁丁一樣

可長可短,可硬可軟

當然,這非常的難,畢竟一種策略能用好已經殊為不易了

但用自己熟悉(或者說熟練)的策略的時候

能夠識別當前的市場環境

這點必要條件還是要達到的


當然有啊,我大三時候undergrad research 的mentor 是一個中國教授(統計PhD),他和他的國內的兩個朋友(一個是清華商學院的教授一個是交易員)當時在開發這方面的交易策略。他們的程序裡面計算所有股票MACD 並自動排序的那部分是我寫的LOL(自豪臉

不過他去年暑假結束後就沒有回學校呢跟別的教授扯淡的時候聽說他「搞出了個大模型」現在在波士頓的一家對沖基金工作,也不知道我們當初做的那個最後究竟成沒成。


市場好的時候超級棒,感覺特別爽,覺得掌控一切,市場不好的時候也很容易賠。 快進快出, 業績波動性比較大。有經驗,有耐心,關鍵是心理強大以後(尤其賭一把和狂妄自大的心理不能有),可以賺錢。有興趣可以再聊。


楊曉剛,方杭瑞,王斌,漁(山古)這幾個人基本上都是動量操盤手,可以百度找找。


有點晚。


我看移動短期hurst,hurst高的時候就用動量策略,用KDJ和自己想出來的一個量價指標,hurst低的時候就用反轉策略


2005.1.1到2015.7.27的移動均線策略,紅圈表示進場,綠圈表示出場

2005.1.1到2015.7.27的ema移動均線策略,紅圈表示進場,綠圈表示出場


追漲殺跌?!大爺大媽們都天天實盤干!


話說2011年我們班一個同學的畢業論文就是以動量策略為改進模型做的交易案例。這個在國內已經開始做了,而且這個模型已經不是很新鮮了,套利實況不知如何,但以其為模型的開發軟體並不怕波動,只是受交易量小的影響較大。


動量最重要的是量 量能足才不至於被左右打臉


推薦閱讀:

如何評價阿牛定投?
政府基礎設施類信託業務相關問題?
現在什麼品種ETF能做T+0交易?
為什麼要謹慎對待所有的投資建議?
什麼叫明股暗債,它有什麼利弊?

TAG:股票 | 基金 | 金融 | 量化交易 | 交易策略 |