溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python量化回測常見陷阱有哪些

發(fā)布時(shí)間:2021-11-20 09:26:47 來源:億速云 閱讀:160 作者:iii 欄目:編程語言

這篇文章主要介紹“Python量化回測常見陷阱有哪些”,在日常操作中,相信很多人在Python量化回測常見陷阱有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python量化回測常見陷阱有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

很多量化交易的朋友在指定策略時(shí)往往容易犯下這幾種類型的錯(cuò)誤:前視偏差、不設(shè)置滑點(diǎn)、無手續(xù)費(fèi)、過度優(yōu)化等。這些錯(cuò)誤可以使你在回測階段把不盈利策略變得盈利,但是在真正的交易中卻會造成災(zāi)難性的后果。

首先介紹下前視偏差。前視偏差是指在策略回測階段采取了未來的信息來決定之前的交易,而這些信息在實(shí)盤操作中是無法獲知的。這里我們提供幾個(gè)典型的案例來介紹下:

買入策略1:“當(dāng)天的收盤價(jià)突破前一天的最高價(jià),則利用當(dāng)天開盤價(jià)買入股票”,很明顯,在開盤價(jià)成交幾乎是不可能的事情了。

前視偏差是我們要極力避免的錯(cuò)誤。如何避免前視偏差?可以使用“滯后”的歷史數(shù)據(jù)來計(jì)算策略信號。滯后的數(shù)據(jù)意味著,在涉及到移動平均值、最高價(jià)、最低價(jià)、成交量等指標(biāo)時(shí),只使用“上一”交易日的收盤數(shù)據(jù)。比如:

shift(1)是在index不變的情況下對序列的值向后移動一個(gè)單位。目的是獲取昨天為止的最高/最低價(jià)格。這樣就能使用“滯后”的歷史數(shù)據(jù)來計(jì)算策略信號。

如果一個(gè)交易策略要求你利用信號觸發(fā)時(shí)的價(jià)格進(jìn)行交易,那么這個(gè)交易策略就存在偷價(jià)的情況。

很多人會低估偷價(jià)的危害性,事實(shí)上,固定點(diǎn)數(shù)的偷價(jià)相當(dāng)于在原本的資金曲線上疊加了一條斜率為正的直線(在每次交易都是固定手?jǐn)?shù)的情況下)。假設(shè)一年250個(gè)交易日,每個(gè)交易日均對一只長期保持10元的股票執(zhí)行一次100股的買賣,每次買賣都偷價(jià)1個(gè)tick(tick設(shè)置為1個(gè)點(diǎn),即0.1元),那么全年下來可以多獲利5000.1100 = 5000元,這甚至超越了你的本金(10*100=1000)。

然而,現(xiàn)實(shí)的情況是不但無法低于一個(gè)tick的價(jià)格成交,更多的反而是高于一個(gè)甚至多個(gè)tick的價(jià)格成交。原因很簡單,大多數(shù)趨勢交易者都會在某個(gè)關(guān)鍵點(diǎn)位建倉,競爭導(dǎo)致價(jià)格在這些關(guān)鍵位置形成劇烈波動,并且這種波動通常是對程序化交易不利的波動。所以在構(gòu)建一個(gè)頻率較高的交易系統(tǒng)的時(shí)候,更多是要考慮和解決滑點(diǎn)問題。

手續(xù)費(fèi)相當(dāng)于在原本的資金曲線上疊加了一條斜率為負(fù)的直線(在每次交易都是固定手?jǐn)?shù)的情況下)。策略進(jìn)行測試時(shí),如果不計(jì)入手續(xù)費(fèi),資金曲線可能會產(chǎn)生巨大差異,甚至不計(jì)手續(xù)費(fèi)時(shí)盈利的策略,在計(jì)入手續(xù)費(fèi)后可能產(chǎn)生虧損。

當(dāng)前股票交易費(fèi)用由三部分組成:傭金、印花稅、過戶費(fèi)(僅上海股票收?。?/p>

  • 印花稅:成交金額的1‰ 。

  • 過戶費(fèi):這是指股票成交后,更換戶名所需支付的費(fèi)用。此費(fèi)用按成交金額的0.02‰收取。

  • 交易傭金:最高收費(fèi)為3‰,最低收費(fèi)5元。

假設(shè)你買入10000股,每股票價(jià)格為10元,以此為例,對其買入成本計(jì)算:
買入股票所用金額:10元/股×10000股=100000元;
過戶費(fèi):0.02‰×100000=2元;
交易傭金:100000×3‰=300元(按最高標(biāo)準(zhǔn)計(jì)算,正常情況下都小于這個(gè)值);
買入總成本:100000元+300元+2元=100302元(買入10000股,每股10元,所需總資金)
若以10.08每股賣出價(jià)格計(jì)算:
股票金額:10.08元/股×10000股=100800元;
印花稅:100800元×1‰=100.8元;
過戶費(fèi):0.002%×100800元≈2元;
交易傭金:100800元×3‰=302.4元;
賣出后收入:100800元-100.8元-2元-302.4元=100394.8元;

滑點(diǎn)是指觸發(fā)指令的價(jià)格和最終成交價(jià)格之間的差異,它是難免會發(fā)生的情況,通?;c(diǎn)產(chǎn)生的原因有以下兩類:

1.行情波動劇烈、市場容量不夠等情況導(dǎo)致的

2.網(wǎng)絡(luò)延遲、交易平臺不穩(wěn)定等情況導(dǎo)致的

滑點(diǎn)是一個(gè)合格的交易策略必須充分考慮的因素。如果在一個(gè)交易策略中,將滑點(diǎn)數(shù)設(shè)置為0,即采用現(xiàn)價(jià)指令買賣證券其資金曲線就會優(yōu)于同一個(gè)滑點(diǎn)數(shù)不為0的策略。通常我們要在最極端的條件下去構(gòu)建和測試系統(tǒng),一般系統(tǒng)都是高于2個(gè)tick的滑點(diǎn)來構(gòu)建的。

接下來談?wù)勥^度優(yōu)化。過度優(yōu)化是指為了遷就歷史數(shù)據(jù)的噪音而將一個(gè)策略的參數(shù)或者規(guī)則反復(fù)優(yōu)化到最佳的情況。

假如要把某個(gè)策略的資金曲線做的非常出色,我們可以這么優(yōu)化:針對某段特定的行情進(jìn)行參數(shù)優(yōu)化,之后將分段行情對應(yīng)的資金曲線拼接起來,得到一個(gè)表現(xiàn)更優(yōu)秀的資金曲線。也可以指定過去某幾個(gè)表現(xiàn)較差的交易日不進(jìn)行交易。上述經(jīng)過加工的回測一定表現(xiàn)優(yōu)異,單純?yōu)榱俗非筚Y金曲線,這類策略模型僅僅適用于過去發(fā)生但未來不會再重現(xiàn)的歷史偶然事件,并不考慮是否適用于未來的行情。

避免過度優(yōu)化的有效辦法有以下幾個(gè):

一般而言,策略的規(guī)則越多,模型的參數(shù)越多,就越可能出現(xiàn)過度擬合問題。因此采用的參數(shù)越少,可以優(yōu)化的規(guī)則越少,自然過度優(yōu)化的情況就能夠得到很好的避免,并且,越少參數(shù)構(gòu)建的策略,往往越穩(wěn)健,無論其時(shí)效性或魯棒性均能超越眾多復(fù)雜的策略。

合理選擇樣本。有些策略覆蓋的股票品種太少,時(shí)間周期太短,不能充分展現(xiàn)策略效果。這些策略只能用于個(gè)別品種上,或者在更長時(shí)間周期上的資金曲線可能表現(xiàn)的并沒有那么好。有些策略雖然覆蓋了較長的時(shí)間段,或較多的品種或市場,但僅僅覆蓋了一種類型的行情(例如一輪較長時(shí)間的大牛市)。這些策略在遇到截然不同的市場情況時(shí),表現(xiàn)可能會大相徑庭。

進(jìn)行樣本外測試。構(gòu)建策略模型時(shí),將歷史數(shù)據(jù)根據(jù)時(shí)間先后分為兩段。參數(shù)優(yōu)化和定性選擇使用前一段數(shù)據(jù)(訓(xùn)練集),策略模型的測試使用后一段數(shù)據(jù)(測試集)。兩段數(shù)據(jù)的大小要大致相等,若數(shù)據(jù)量不夠,則至少用三分之一的數(shù)據(jù)做測試。訓(xùn)練集的最小含量由樣本含量經(jīng)驗(yàn)規(guī)則確定。

到此,關(guān)于“Python量化回測常見陷阱有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI