最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python量化因子測算與繪圖超詳細流程代碼

 更新時間:2023年02月24日 09:15:09   作者:呆萌的代Ma  
這篇文章主要介紹了Python量化因子測算與繪圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

量化因子的測算通常都是模擬交易,計算各種指標,其中:

  • 測算需要用到的第三方庫:numpy,pandas,talib
  • 繪圖需要用到的第三方庫:matplotlib,seaborn

其他庫隨策略的需要額外添加

因子測算框架

這里博主分享自己測算時常使用的流程,希望與大家共同進步!

測算時從因子到收益的整個流程如下:策略(因子組合) -> 買賣信號 -> 買點與賣點 -> 收益

因此我們在測算時,針對每一個個股:

1. 預處理股票數(shù)據(jù)

首先這里是常用的一個工具導入,包括測算用的庫與繪圖用的庫(含圖片中文顯示空白解決方案)

# 測算用
import numpy as np
import pandas as pd
from copy import deepcopy
from tqdm import tqdm
from datetime import datetime
import talib
# 繪圖用
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 繪圖現(xiàn)實中文
sns.set()
plt.rcParams["figure.figsize"] = (20,10)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # 當前字體支持中文
plt.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示為方塊的問題
# 其他
import warnings
warnings.filterwarnings("ignore")

然后是循環(huán)讀取股票的代碼:

import os
def readfile(path, limit=None):
    files = os.listdir(path)
    file_list = []
    for file in files:  # 遍歷文件夾
        if not os.path.isdir(file):
            file_list.append(path + '/' + file)
    if limit:
        return file_list[:limit]
    return file_list
stock_dict = {}
for _file in tqdm(readfile("../data/stock_data")):
    if not _file.endswith(".pkl"):
        continue
    # TODO 這里可以添加篩選,是否需要將當前的股票添加到測算的股票池中
    file_df = pd.read_pickle(_file)
    file_df.set_index(["日期"], inplace=True)
    file_df.index.name = ""
    file_df.index = pd.to_datetime(file_df.index)
    file_df.rename(columns={'開盤':'open',"收盤":"close","最高":"high","最低":"low","成交量":"volume"},inplace=True)
    stock_code = _file.split("/")[-1].replace(".pkl", '')
    # TODO 這里可以添加日期,用來截取一部分數(shù)據(jù)
    stock_dict[stock_code] = file_df

上面一部分是處理股票數(shù)據(jù),處理后的數(shù)據(jù)都會保存在 stock_dict 這個變量中,鍵是股票的代碼,值是股票數(shù)據(jù)

2. 指標測算

測算指標時,我們以一只股票為例:

for _index,_stock_df in tqdm(stock_dict.items()):
    measure_df = deepcopy(_stock_df)

代碼中的:

  • 這里的measure_df即要測算的dataframe數(shù)據(jù)
  • 使用deepcopy是防止測算的過程影響到原始數(shù)據(jù)

然后我們就可以循環(huán)這一個股票的每一行(代表每一天),測算的交易規(guī)則如下:

  • 買入規(guī)則:買入信號發(fā)出&當前沒有持倉,則買入
  • 賣出規(guī)則:賣出信號發(fā)出&當前有持倉,則賣出
# 開始測算
trade_record_list = []
this_trade:dict = None
for _mea_i, _mea_series in measure_df.iterrows(): # 循環(huán)每一天
    if 發(fā)出買入信號:
        if this_trade is None:  # 當前沒有持倉,則買入
            this_trade = {
                "buy_date": _mea_i,
                "close_record": [_mea_series['close']],
            }
    elif 發(fā)出賣出信號:
        if this_trade is not None:  # 要執(zhí)行賣出
            this_trade['sell_date'] = _mea_i
            this_trade['close_record'].append(_mea_series['close'])
            trade_record_list.append(this_trade)
            this_trade = None
    else:
        if this_trade is not None:  # 當前有持倉
            this_trade['close_record'].append(_mea_series['close'])

上述代碼中,我們將每一個完整的交易(買->持有->賣),都保存在了trade_record_list變量中,每一個完整的交易都會記錄:

{
    'buy_date': Timestamp('2015-08-31 00:00:00'), # 買入時間
    'close_record': [41.1,42.0,40.15,40.65,36.6,32.97], # 收盤價的記錄
    'sell_date': Timestamp('2015-10-12 00:00:00')} # 賣出時間
    # TODO 也可以添加自定義記錄的指標
}

3. 測算結果整理

直接使用 pd.DataFrame(trade_record_list),就可以看到總的交易結果:

整理的過程也相對簡單且獨立,就是循環(huán)這個交易,然后計算想要的指標,比如單次交易的年化收益可以使用:

trade_record_df = pd.DataFrame(trade_record_list)
for _,_trade_series in trade_record_df.iterrows():
    trade_record_df.loc[_i,'年化收益率'] = (_trade_series['close_record'][-1] - _trade_series['close_record'][0])/_trade_series['close_record'][0]/(_trade_series['sell_date'] - _trade_series['buy_date']).days * 365 # 年化收益
    # TODO 這里根據(jù)自己想要的結果添加更多的測算指標

4. 結果繪圖

繪圖的代碼通常比較固定,比如勝率圖:

# 清理繪圖緩存
plt.cla()
plt.clf()
# 開始繪圖
plt.figure(figsize=(10, 14), dpi=100)
# 使用seaborn繪制勝率圖
fig = sns.heatmap(pd.DataFrame(total_measure_record).T.round(2), annot=True, cmap="RdBu_r",center=0.5)
plt.title("勝率圖")
scatter_fig = fig.get_figure()
# 保存到本地
scatter_fig.savefig("勝率圖")
scatter_fig.show() # 最后顯示

到此這篇關于Python量化因子測算與繪圖超詳細流程代碼的文章就介紹到這了,更多相關Python量化因子測算內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python 判斷三個數(shù)字中的最大值實例代碼

    python 判斷三個數(shù)字中的最大值實例代碼

    這篇文章主要介紹了python 判斷三個數(shù)字中的最大值,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-07-07
  • Python爬蟲之Selenium下拉框處理的實現(xiàn)

    Python爬蟲之Selenium下拉框處理的實現(xiàn)

    這篇文章主要介紹了Python爬蟲之Selenium下拉框處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Pytest單元測試框架如何實現(xiàn)參數(shù)化

    Pytest單元測試框架如何實現(xiàn)參數(shù)化

    這篇文章主要介紹了Pytest單元測試框架如何實現(xiàn)參數(shù)化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 解決python 文本過濾和清理問題

    解決python 文本過濾和清理問題

    文本過濾和清理所涵蓋的范圍非常廣泛,涉及文本解析和數(shù)據(jù)處理方面的問題。這篇文章主要介紹了解決python 文本過濾和清理問題,需要的朋友可以參考下
    2019-08-08
  • linecache模塊加載和緩存文件內容詳解

    linecache模塊加載和緩存文件內容詳解

    這篇文章主要介紹了linecache模塊加載和緩存文件內容詳解,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • python 發(fā)送qq郵件的示例

    python 發(fā)送qq郵件的示例

    這篇文章主要介紹了python 發(fā)送qq郵件的示例,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • 深入學習python的yield和generator

    深入學習python的yield和generator

    這篇文章主要為大家詳細介紹了python的yield和generator,針對python的生成器和yield關鍵字進行深入學習,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 詳解Python判定IP地址合法性的三種方法

    詳解Python判定IP地址合法性的三種方法

    這篇文章主要介紹了詳解Python判定IP地址合法性的三種方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • python如何繪制疫情圖

    python如何繪制疫情圖

    這篇文章主要介紹了python如何繪制疫情圖,幫助大家理解和學習用python繪制圖像,感興趣的朋友可以了解下
    2020-09-09
  • 使用pycharm生成代碼模板的實例

    使用pycharm生成代碼模板的實例

    今天小編就為大家分享一篇使用pycharm生成代碼模板的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

康乐县| 屏南县| 梁山县| 莲花县| 尉氏县| 正阳县| 什邡市| 政和县| 高淳县| 吴桥县| 阜康市| 烟台市| 乌审旗| 合作市| 龙游县| 仁寿县| 庆元县| 上林县| 五寨县| 武山县| 色达县| 尉犁县| 潜山县| 黄冈市| 江华| 南郑县| 西昌市| 中西区| 望城县| 炉霍县| 卢龙县| 洪洞县| 祁阳县| 阳朔县| 隆回县| 区。| 大洼县| 鹤峰县| 衡东县| 新安县| 溧阳市|