基於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類(該類主要功能為讀取分鐘**資料)內容:
defget_value 呼叫
zk_get_value
def_get_metadata 此函式原方法為通過指定的bcloz檔案路徑來讀取資料,我已用自定義的資料來源取代,所以此處不再做處理
defget_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...