量化框架zipline 分鐘回測改寫

2022-08-20 20:51:08 字數 3425 閱讀 5844

基於zipline的分鐘回測改寫,其中資料來源為自定義,使用bcolz的ctable,該資料格式與pandas的dataframe很好相容,並且bcolz檔案壓縮率很好。

以下主要記錄此次改寫回測整個過程中涉及類和方法,沒有附帶**。

一,自定義分鐘回測資料源bcolzbacktestmindata類

def zk_get_min_data 取獲得多隻**某個時間點前的n個指定欄位的值
def zk_get_value 獲得**的指定時間的某個欄位的值
def zk_get_traded_dt 獲得離傳入時間最近的交易時間點
def zk_get_row_data 獲得某只**某個時間的**資料
def zk_get_all_data 回測初始時將所用資料全部快取提供給以上函查詢

以下為原有zipline**改寫部分:

一,tradingalgorithm(回測主類)

類中的函式改寫:

匯入方法:from zipline.algorithm import tradingalgorithm

1,def order 下單函式

2,def _create_clock 返回此次回測所有的時間點

3,def _create_generator 產生每個時間點回測結果

4,data_portal 屬性例項化後重新賦值

5,def _create_benchmark_source 獲得基準收益
6,def __convert_order_params_for_blotter 判斷下單引數是否合理

7,def _calculate_order_value_amount 計算下單的數量

8,def _can_order_asset 判斷該**是否可交易

以下為上述5個加粗的函式或屬性的重寫內容(剩餘3個變動較少):

一,order 此函式主要改寫內容
last_price 針對非限價單下單,使用當前**成交通過zk_get_value獲得

更改下單數量:中國****有基本單位1手=100股

二,_create_clock 函式返回乙個minutesimulationclock物件

匯入路徑:from zipline.gens.sim_engine import minutesimulationclock
改寫minutesimulationclock內容:

def __init__ 去除分鐘時間點的計算

def __iter__ 返回已去除掉**中午休息時間的各分鐘時間點

三,_create_generator函式返回乙個algorithmsimulator物件(self.trading_client)的transform()
匯入路徑:from zipline.gens.tradesimulation import algorithmsimulator
改寫algorithmsimulator內容:

def

_create_bar_data:返回bardata物件 既回測**中的data物件

繼續重寫bardata類
匯入路徑:from zipline.protocol import bardata
內容:

def __init__ 不變

def current 擷取

zk_get_all_data的返回結果

def history 呼叫data_portal的get_history_window函式

def _get_current_minute 獲得回測時當前的時間點

def __getitem__ 呼叫

zk_get_row_data執行返回的結果

def __get__  

不變def current_dt 不變

物件

匯入路徑:from zipline.data.data_portal import dataportal
改寫dataportal內容:

def get_history_window data.history 呼叫的函式
def get_backtest_date 自定義函式:將回測的結束日期傳入,為了取出該回測所需要的所有資料並快取
equity_minute_reader 例項化時傳入的bcolzminutebarreader物件
匯入路徑:from zipline.data.minute_bars import bcolzminutebarreader
繼續重寫bcolzminutebarreader類(該類主要功能為讀取分鐘**資料)內容:
def 

get_value 呼叫

zk_get_value

def_get_metadata 此函式原方法為通過指定的bcloz檔案路徑來讀取資料,我已用自定義的資料來源取代,所以此處不再做處理

def 

get_last_traded_dt 呼叫zk_get_traded_dt

五,_create_benchmark_source函式返回乙個benchmarksource物件

匯入路徑:from zipline.sources.benchmark_source import benchmarksource

改寫benchmarksource內容:

def __init__  改寫分鐘收益的資料序列

由於我只拿到每天的收益率,而此處zipline缺省會讓每天收益的資料填充到每分鐘上轉為分鐘的收益序列,這意味著每分鐘都會有該天的盈利或虧損(根據後續zipline計算收益的演算法)

這就導致了複利。根據介面顯示需要我們也只需要計算出每天的收益即可,沒有計算每分鐘的收益,因此我將每天的收益率只填充到開始的第乙個時間點,後續的全部填充0

量化框架zipline 分鐘回測改寫

基於zipline的分鐘回測改寫,其中資料來源為自定義,使用bcolz的ctable,該資料格式與pandas的dataframe很好相容,並且bcolz檔案壓縮率很好。以下主要記錄此次改寫回測整個過程中涉及類和方法,沒有附帶 一,自定義分鐘回測資料源bcolzbacktestmindata類 de...

量化投資策略 常見的幾種Python回測框架(庫)

在實盤交易之前,必須對量化交易策略進行回測。在此,我們評價一下常用的python回測框架 庫 評價的尺度包括用途範圍 回測 虛盤交易 實盤交易 易用程度 結構良好 文件完整 和擴充套件性 速度快 用法簡單 與其他框架庫的相容 zipline pyalgotrade tradingwithpython...

量化投資策略 常見的幾種Python回測框架(庫)

在實盤交易之前,必須對量化交易策略進行回測。在此,我們評價一下常用的python回測框架 庫 評價的尺度包括用途範圍 回測 虛盤交易 實盤交易 易用程度 結構良好 文件完整 和擴充套件性 速度快 用法簡單 與其他框架庫的相容 zipline pyalgotrade tradingwithpython...