日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

量化框架zipline--分钟回测改写

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 量化框架zipline--分钟回测改写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于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 獲得某只股票某個時間的k線數據   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 不變


四,data_portal屬性為一個DataPortal對象
  導入路徑: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類(該類主要功能為讀取分鐘k線數據)內容:         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








    

轉載于:https://www.cnblogs.com/dxf813/p/7845398.html

總結

以上是生活随笔為你收集整理的量化框架zipline--分钟回测改写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。