引言:
邢不行的系列帖子“量化小講堂”,通過實(shí)際案例教初學(xué)者使用python進(jìn)行量化投資,了解行業(yè)研究方向,希望能對(duì)大家有幫助。
【必讀文章】:《10年400倍策略分享-附視頻逐行講解代碼》
《EOS期現(xiàn)套利,一周時(shí)間,15%無風(fēng)險(xiǎn)收益》
【歷史文章匯總】:http://xalimeijing.com/thread-3950124-1-1.html
微信個(gè)人號(hào):xingbuxing0807,有問題歡迎交流
量化投資中,計(jì)算技術(shù)指標(biāo)時(shí)常見的8個(gè)坑(下)
05
數(shù)字貨幣市場中數(shù)據(jù)之間的時(shí)差
數(shù)字貨幣是7*24小時(shí)交易,不同地區(qū)的交易所會(huì)顯示不同的時(shí)區(qū)。那此時(shí)我們就要特別注意,我們自己數(shù)據(jù)的時(shí)區(qū)和交易所行情數(shù)據(jù)顯示的時(shí)區(qū)是否一致。
比如幣安交易所,它的主流用戶在中國,所以網(wǎng)頁上顯示的數(shù)據(jù)默認(rèn)是就是北京時(shí)間。但是如果你使用接口去抓取幣安的K線數(shù)據(jù),它使用的卻是UTC時(shí)間,也就是英國的格林威治時(shí)間。
那么此時(shí)當(dāng)你計(jì)算技術(shù)指標(biāo)的時(shí)候,使用的是UTC時(shí)間,很明顯就會(huì)和交易所頁面上顯示的UTC+8的指標(biāo)數(shù)據(jù)對(duì)不上了。
此時(shí)的應(yīng)對(duì)方法就是修改交易所頁面展示數(shù)據(jù)的時(shí)區(qū),一般交易所都提供這個(gè)功能。下圖是在bitfinex交易所修改時(shí)區(qū)的方式,右下角點(diǎn)擊UTC時(shí)間,就會(huì)彈出選擇時(shí)區(qū)的框框。
06
數(shù)字貨幣數(shù)據(jù)缺失
數(shù)字貨幣市場中有無數(shù)的“垃圾幣”,這些幣的成交量很低,經(jīng)常會(huì)在1個(gè)小時(shí)之內(nèi)一筆交易都沒有。那么面對(duì)這樣的一個(gè)小時(shí),如何來畫這一根K線呢?
有的交易所會(huì)直接略去這一根K線,把這個(gè)時(shí)間段給刪了。而有的交易所是根據(jù)前一根K線的收盤價(jià)作為這根缺失K線的開高低收價(jià),同時(shí)成交量設(shè)置為0來補(bǔ)全這根K線數(shù)據(jù)。
例如下圖中的K線,大家看到一些橫線,就是代表這根K線的時(shí)間內(nèi),沒有發(fā)生一筆交易。
那么對(duì)于沒有交易的K線數(shù)據(jù),我們要確保,我們數(shù)據(jù)中的處理方式和交易所是一樣的,不然計(jì)算得到的技術(shù)指標(biāo)就會(huì)不一致。
07
同一技術(shù)指標(biāo)的計(jì)算方法不一樣
大部分的技術(shù)指標(biāo)都是源于國外,在翻譯的過程中難免有些不準(zhǔn)確,還有可能夾帶著主觀思想。因此經(jīng)常會(huì)發(fā)現(xiàn),同一名稱的技術(shù)指標(biāo),在不同的地方,采用的是不同計(jì)算方法。
比如TA-lib庫計(jì)算的ATR指標(biāo)和國內(nèi)主流行情軟件中顯示的指標(biāo)就是不一樣的。因?yàn)樗麄冇?jì)算方法不一樣。
國內(nèi)行情軟件一般是取TR(真實(shí)波幅)的簡單平均,而TA-lib則是采取類似EMA平均一樣的方法求TR的平均值。
通達(dá)信行情軟件中計(jì)算ATR的公式如下圖:
那TA-lib庫計(jì)算ATR的公式是什么樣的呢?通過深挖TA-lib庫的底層代碼發(fā)現(xiàn)這么一個(gè)注釋:
talib.ATR的作者Wilder采用了移動(dòng)平均的概念來使每一個(gè)新的ATR都包含前一個(gè)ATR的信息:ATR(t)=(ATR(t-1)*(Period-1)+TR(t))/Period,所以不是簡單的算術(shù)平均。
這里提到的TA-lib庫,在我們之前的量化小講堂系列文章中有提到過。簡單來說就是一個(gè)技術(shù)分析庫,里面包含了大部分主流的技術(shù)指標(biāo),讓使用者不用再重復(fù)造輪子。具體可參考之前的文章:
1)不用再自己寫技術(shù)指標(biāo)了 | TA-lib視頻教程
還有的技術(shù)指標(biāo)長得很像,而且計(jì)算思路也類似,比如剛剛提到的MA和EMA。MA是簡單移動(dòng)平均線,是根據(jù)最近n天的收盤價(jià)求算數(shù)平均值得到;而EMA看起來和MA很像,英文名字一不小心就看錯(cuò),它是指數(shù)移動(dòng)平均值,相當(dāng)于是一個(gè)加權(quán)平均值,但是它的加權(quán)方式很特別,感興趣的可以自己搜索下,或者加我微信交流。
所以當(dāng)我們使用其他工具或者自己編寫代碼計(jì)算技術(shù)指標(biāo)時(shí),計(jì)算結(jié)果和交易所對(duì)不上,在排除數(shù)據(jù)源的問題后,很有可能就是指標(biāo)的計(jì)算公式不一致。
08
特別容易忽視的小差別
同一技術(shù)指標(biāo)的計(jì)算除了那些“肉眼可見”的區(qū)別之外,還有很多不容忽視的坑。
比如我們熟悉的布林線指標(biāo),在計(jì)算其中的標(biāo)準(zhǔn)差的時(shí)候,有的地方分母是使用的樣本數(shù),而有的地方采用的是樣本數(shù)-1。
再比如很多指標(biāo)在選擇數(shù)據(jù)的時(shí)候,有的取包含今日在內(nèi)的過去n根K線數(shù)據(jù),有的取不包含今日數(shù)據(jù)的前n根K線。這樣計(jì)算出來的結(jié)果顯然是有差別的。
這些細(xì)小的差距對(duì)結(jié)果的影響不大,但差距又確實(shí)在那。往往會(huì)讓你花很多時(shí)間去尋找為什么不同,最終發(fā)現(xiàn)的時(shí)候只給你帶來一句:臥槽...
09
總結(jié)
以上分析了計(jì)算指標(biāo)和行情軟件不同的幾個(gè)原因,都來自于我實(shí)際的經(jīng)驗(yàn)。其中有的可以解決,也一定要解決,不然你的策略結(jié)果就是錯(cuò)的。
而有的問題其實(shí)也解決不了,比如股票復(fù)權(quán)之類的問題。面對(duì)這種窘境,完美主義者可能會(huì)刨根問底且想方設(shè)法去找到原因并將其修正過來,但這種方式并不見得是最好的解決方案。
相信我,與其將時(shí)間花在這上面不如花更多的時(shí)間去研究策略。一般來說,只要確保數(shù)據(jù)源沒問題,以及計(jì)算邏輯沒錯(cuò),就可以了。
關(guān)于技術(shù)指標(biāo)的計(jì)算,還有其他想法的朋友,歡迎在評(píng)論區(qū)留言。留言還可以獲得論壇幣哦~