您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python量化回測常見陷阱有哪些”,在日常操作中,相信很多人在Python量化回測常見陷阱有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python量化回測常見陷阱有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
很多量化交易的朋友在指定策略時往往容易犯下這幾種類型的錯誤:前視偏差、不設置滑點、無手續費、過度優化等。這些錯誤可以使你在回測階段把不盈利策略變得盈利,但是在真正的交易中卻會造成災難性的后果。
首先介紹下前視偏差。前視偏差是指在策略回測階段采取了未來的信息來決定之前的交易,而這些信息在實盤操作中是無法獲知的。這里我們提供幾個典型的案例來介紹下:
買入策略1:“當天的收盤價突破前一天的最高價,則利用當天開盤價買入股票”,很明顯,在開盤價成交幾乎是不可能的事情了。
前視偏差是我們要極力避免的錯誤。如何避免前視偏差?可以使用“滯后”的歷史數據來計算策略信號。滯后的數據意味著,在涉及到移動平均值、最高價、最低價、成交量等指標時,只使用“上一”交易日的收盤數據。比如:
shift(1)是在index不變的情況下對序列的值向后移動一個單位。目的是獲取昨天為止的最高/最低價格。這樣就能使用“滯后”的歷史數據來計算策略信號。
如果一個交易策略要求你利用信號觸發時的價格進行交易,那么這個交易策略就存在偷價的情況。
很多人會低估偷價的危害性,事實上,固定點數的偷價相當于在原本的資金曲線上疊加了一條斜率為正的直線(在每次交易都是固定手數的情況下)。假設一年250個交易日,每個交易日均對一只長期保持10元的股票執行一次100股的買賣,每次買賣都偷價1個tick(tick設置為1個點,即0.1元),那么全年下來可以多獲利5000.1100 = 5000元,這甚至超越了你的本金(10*100=1000)。
然而,現實的情況是不但無法低于一個tick的價格成交,更多的反而是高于一個甚至多個tick的價格成交。原因很簡單,大多數趨勢交易者都會在某個關鍵點位建倉,競爭導致價格在這些關鍵位置形成劇烈波動,并且這種波動通常是對程序化交易不利的波動。所以在構建一個頻率較高的交易系統的時候,更多是要考慮和解決滑點問題。
手續費相當于在原本的資金曲線上疊加了一條斜率為負的直線(在每次交易都是固定手數的情況下)。策略進行測試時,如果不計入手續費,資金曲線可能會產生巨大差異,甚至不計手續費時盈利的策略,在計入手續費后可能產生虧損。
當前股票交易費用由三部分組成:傭金、印花稅、過戶費(僅上海股票收取)
印花稅:成交金額的1‰ 。
過戶費:這是指股票成交后,更換戶名所需支付的費用。此費用按成交金額的0.02‰收取。
交易傭金:最高收費為3‰,最低收費5元。
假設你買入10000股,每股票價格為10元,以此為例,對其買入成本計算:
買入股票所用金額:10元/股×10000股=100000元;
過戶費:0.02‰×100000=2元;
交易傭金:100000×3‰=300元(按最高標準計算,正常情況下都小于這個值);
買入總成本:100000元+300元+2元=100302元(買入10000股,每股10元,所需總資金)
若以10.08每股賣出價格計算:
股票金額:10.08元/股×10000股=100800元;
印花稅:100800元×1‰=100.8元;
過戶費:0.002%×100800元≈2元;
交易傭金:100800元×3‰=302.4元;
賣出后收入:100800元-100.8元-2元-302.4元=100394.8元;
滑點是指觸發指令的價格和最終成交價格之間的差異,它是難免會發生的情況,通常滑點產生的原因有以下兩類:
1.行情波動劇烈、市場容量不夠等情況導致的
2.網絡延遲、交易平臺不穩定等情況導致的
滑點是一個合格的交易策略必須充分考慮的因素。如果在一個交易策略中,將滑點數設置為0,即采用現價指令買賣證券其資金曲線就會優于同一個滑點數不為0的策略。通常我們要在最極端的條件下去構建和測試系統,一般系統都是高于2個tick的滑點來構建的。
接下來談談過度優化。過度優化是指為了遷就歷史數據的噪音而將一個策略的參數或者規則反復優化到最佳的情況。
假如要把某個策略的資金曲線做的非常出色,我們可以這么優化:針對某段特定的行情進行參數優化,之后將分段行情對應的資金曲線拼接起來,得到一個表現更優秀的資金曲線。也可以指定過去某幾個表現較差的交易日不進行交易。上述經過加工的回測一定表現優異,單純為了追求資金曲線,這類策略模型僅僅適用于過去發生但未來不會再重現的歷史偶然事件,并不考慮是否適用于未來的行情。
避免過度優化的有效辦法有以下幾個:
一般而言,策略的規則越多,模型的參數越多,就越可能出現過度擬合問題。因此采用的參數越少,可以優化的規則越少,自然過度優化的情況就能夠得到很好的避免,并且,越少參數構建的策略,往往越穩健,無論其時效性或魯棒性均能超越眾多復雜的策略。
合理選擇樣本。有些策略覆蓋的股票品種太少,時間周期太短,不能充分展現策略效果。這些策略只能用于個別品種上,或者在更長時間周期上的資金曲線可能表現的并沒有那么好。有些策略雖然覆蓋了較長的時間段,或較多的品種或市場,但僅僅覆蓋了一種類型的行情(例如一輪較長時間的大牛市)。這些策略在遇到截然不同的市場情況時,表現可能會大相徑庭。
進行樣本外測試。構建策略模型時,將歷史數據根據時間先后分為兩段。參數優化和定性選擇使用前一段數據(訓練集),策略模型的測試使用后一段數據(測試集)。兩段數據的大小要大致相等,若數據量不夠,則至少用三分之一的數據做測試。訓練集的最小含量由樣本含量經驗規則確定。
到此,關于“Python量化回測常見陷阱有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。