【基于python的量化策略回测框架搭建】策略表现衡量指标模块

1. 代码模块用途说明

本模块为量化策略回测框架中的指标系统,该模块用于衡量策略表现,现可支持如下指标:

表 1:回测系统策略表现衡量指标及说明

指标名称 代码指标 指标含义说明
年化收益率 Return 策略的年化收益率
年化波动率 Sigma 策略的年化波动率
收益-风险比 R/S 策略年化收益率:策略年化波动率
偏度 Skew 策略收益率序列的偏度
峰度 Kurt 策略收益率序列的峰度
最大回撤 MDD 策略净值序列的最大回撤值
最大回撤比率 MDD_R 策略净值序列的的最大回撤比率
最大回撤周期 MDD_P 策略净值序列的的最大回撤周期长度
在险价值 VaR 策略最坏条件下的损失情况
条件在险价值 CVaR 策略最坏条件下的平均损失
策略赢率 Odd 策略正收益天数-负收益天数比率
下行风险(半方差) DR 低于平均收益率与均值的均方和
夏普比率 SR 策略单位波动率上的收益率
詹森Alpha Alpha 策略收益率无法由市场风险解释的收益
系统性风险 Beta 策略收益率在市场风险中的暴露敞口
特雷诺比率 TR 策略单位系统风险上的收益率

:本模块会随着需求而升级换代。现在的版本为0.0.2,最后更新时间:5/29/2020

更新日志

0.0.1 版功能更新
该版本为原始版本。发布时间5/18/2020.

0.0.2 版功能更新
发布时间:5/29/2020
(1)加入Performance模块,加入更多指标
(2)修改了CVaR模块算法的bug
(3)收益序列和净值序列暂时仅支持二维list类型输入,暂不支持DataFrame格式,会在下一版本进行更新==


2. 代码块

# -*- coding: utf-8 -*-
# author: Mikey_Sun time: 5/16/2020
# all copyright belongs to the author. NO COPY ALLOWED.

import numpy as np
import pandas as pd
import math
from scipy import stats


##################################
##### Module 0: 更新版本说明  ######
##################################
def print_version():
	version = '0.0.2'
	print("现在版本为:{}".format{
   version})


#########################################
##### Module 1: 名称、格式相关的内嵌模块  ####
#########################################
# 1. 设置策略名称(若收益序列为DataFrame格式,则保留该策略名称;否则根据输入顺序命名为“策略x号”)
def set_name(r_series):
    columns = []
    if type(r_series) == pd.DataFrame:
        columns = r_series.columns
    else:
        for i in range(len(r_series)):
            columns.append("策略" + str(i+1) + "号")

    return columns

# 2. 设置收益序列的频率
def set_period(Period):
    T = 1 # 首先默认参数为年化指标
    Period = str(Period).upper()
    if Period is 'D' or 'DAY' or 'DAILY': # 日频数据
        T = 242
    elif Period is 'W' or 'WEEK' or 'WEEKLY': # 周频数据
        T = 49
    elif Period is 'M' or 'MONTH' or 'MONTHLY': # 月频数据
        T = 12
    elif Period is 'S' or 'SEASON' or 'SEASONAL' or 'Q' or 'Quarter' or 'Quarterly': # 季频数据
        T = 4
    elif Period is 'Y' or 'YEAR' or 'YEARLY': # 年化数据
        T = 1
    else:
        pass # 可以进一步拓展

    return T



#########################################
## Module 1: 收益率序列一阶至三阶矩计算模块  ##
#########################################
# 1. 矩量名称索引函数(支持一阶、二阶、三阶、四阶矩量)
def Annualized_Moment_indicators():
    return ['Return', 'Sigma', 'R/S', 'Skew', 'Kurt']

# 2. 矩量计算函数
def Annualized_Moment(r_series, Period = 'Y', indicators =  Annualized_Moment_indicators(), output_type = 'DataFrame'):
    """
    计算序列样本矩。矩算法时间复杂度:O(m·n)
    :param r_series: 收益率数据,默认格式为pd.DataFrame
    :param Period: str格式,输入的收益率数据频率(可以输入:‘D’(日频)、 ‘W’(周频)、 ‘M’(月频)、 ‘S’(季频)、 ‘Y’(年频)。默认收益率序列为年频数据)
    :param indicators: list格式,选择输出哪些矩量(可以输入:Annualized_Moment_indicators()函数中的全部指标。默认全部矩量值)
    :param output_type: str格式,输出格式(可以输入:'list', 'dataframe'。默认输出格式为 dataframe)
    :return: pd.DataFrame
    """
    # Step 1: 处理周期输入变量
    T = set_period(Period)
    # Step 2: 处理序列输入模块
    columns = set_name(r_series)

    # Step 3: 计算矩变量
    r = []
    sigma = []
    skew = []
    kurt = []
    R_S = []
    for i in range(len(r_series)):
        r.append(np.mean(r_series[i]) * T)
        sigma.append(np.std(r_series[i]) * math.sqrt(T))
        R_S.append(r[i]/sigma[i])
        skew.append(stats.skew(r_series[i] * T))
        kurt.append(stats
  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值