【轉】動態復權(真實價格)模式原理詳解!


動態復權(真實價格)模式原理詳解!
 
 

如果沒有意外,你之前一直在使用前復權價格做回測,使用前復權價格回測存在未來函數(未卜先知,提前使用未來的數據),因此你的回測結果都是錯的。

有沒有搞錯.jpg

Tell me why?

使用前復權價格,不論回測開始時間、結束時間是何時,使用的數據都是基於今天(回測當天)或某個時間的復權因子進行前復權獲得的價格,因此使用前復權價格進行回測,回測結果肯定有問題。示意圖如下:

傳統回測模式

不論歷史時刻1或歷史時刻2,拿到的數據都是基於未來某一天的前復權價格,使用這樣的數據存在未來函數(未來函數是回測最大的敵人之一)

真實價格回測(動態復權回測)是如何解決這個問題的?

開啟真實價格回測

使用真實價格回測模式,回測到歷史時刻1,使用歷史時刻1的真實價格撮合成交;如果需要復權,會使用的歷史時刻1的復權因子,對“歷史時刻1"之前的價格進行前復權,這樣有效避免了未來函數,因為回測全程都不可能使用未來的數據。

enter image description here

你可能沒有看懂,下面舉個例子:

p3

如現有一只股票,股價一直沒有波動,只進行了拆分。

  • 前復權回測模式

    • 站在“歷史時刻3”看歷史數據:因為使用今天的復權因子,“歷史時刻3”之前的股價均為2;
    • 站在“歷史時刻2”看歷史數據:因為使用今天的復權因子,“歷史時刻3”的股價是2;
    • 站在“歷史時刻1”看歷史數據,因為使用今天的復權因子,“歷史時刻2”和“歷史時刻3”的股價是2;
  • 真實價格回測模式

    • 站在“歷史時刻3”看歷史數據:因為使用歷史時刻3的復權因子,“歷史時刻3”之前的股價均為8
    • 站在“歷史時刻2”看歷史數據:因為使用歷史時刻2的復權因子,“歷史時刻3”的股價是4;
    • 站在“歷史時刻1”看歷史數據:因為使用歷史時刻1的復權因子,“歷史時刻2”和“歷史時刻3”的股價是2;

因為使用了未來的復權因子,前復權回測模式,回測過程中使用的價格是不正確的。

下面再舉一個真實的例子,比較一下前復權回測模式和真實價格回測模式的區別

GL_pre

GL_pre

2007-01-30,波導股份的真實股價(綠色曲線)是低於格力電器(黑色曲線)的;但使用前復權價格,波導股份的價格會高於格力電器。
采用最簡單的交易思路,購買股價低的股票並持有,前復權模式會買入格力電器,真實價格回測模式會買入波導股份。

下面我們使用JoinQuant進行回測,根據2007-01-30當天格力電器與波導股份的收盤價,買入低價位股票並持有到現在。回測結果如下所示:

前復權回測模式的回測結果:
初始資金:100,000
策略收益:776.54%
滬深300收益:21.98%
最大回撤:64.98%

gbzs

真實價格回測模式的回測結果:
初始資金:100,000
策略收益:78.35%
滬深300收益:21.98%
最大回撤:79.78%

kqzs

由回測結果不難看出,前復權回測模式因為存在未來函數,結果是不准確的,使用前復權回測模式可能會讓你獲得非常高的收益,但實盤時,效果卻非常一般;

如果你想要獲得正確的回測結果,請使用真實價格回測。

enter image description here

作為最專業的量化交易平台,JoinQuant全球首推真實價格回測,從此,再也不用擔心回測結果不准確了。

如何開啟真實價格回測功能?

其實很簡單,只需一步即可搞定:

在initialize中使用set_option即可,如下所示:

def initialize(context):
    set_option('use_real_price', True)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM