コード例 #1
0
def cal_obj(signal, name, period, quantile):
    #     price_bench = dv.data_benchmark
    obj = SignalDigger(output_folder="FACTORS/%s" % name, output_format='pdf')
    obj.process_signal_before_analysis(signal,
                                       price=price,
                                       n_quantiles=quantile,
                                       period=period,
                                       mask=mask,
                                       group=sw1,
                                       can_enter=enter,
                                       can_exit=exit,
                                       commission=0.0008)
    return obj
コード例 #2
0
def cal_obj(signal, name, period=5, quantile=5):
    obj = SignalDigger()
    obj.process_signal_before_analysis(
        signal,
        price=price,
        n_quantiles=quantile,
        period=period,
        can_enter=can_enter,
        can_exit=can_exit,
        mask=mask,
    )
    obj.create_full_report()
    return obj
コード例 #3
0
def cal_obj(signal, name, period, quantile):
    price_bench = dv.data_benchmark
    obj = SignalDigger(output_folder="hs300/%s" % name, output_format='pdf')
    obj.process_signal_before_analysis(signal,
                                       price=price,
                                       n_quantiles=quantile,
                                       period=period,
                                       mask=mask,
                                       group=sw1,
                                       can_enter=can_enter,
                                       can_exit=can_exit,
                                       commission=0.0003)
    obj.create_full_report()
    return obj
コード例 #4
0
ic_20_mean = dict()
ic_20_std = dict()
ir_20 = dict()
for name in ic_20.columns:
    ic_20_mean[name] = ic_20[name].loc[start:].mean()
    ic_20_std[name] = ic_20[name].loc[start:].std()
    ir_20[name] = ic_20_mean[name] / ic_20_std[name]

import datetime

trade_date = pd.Series(ic_20.index)
trade_date = trade_date.apply(
    lambda x: datetime.datetime.strptime(str(x), '%Y%m%d'))
ic_20.index = trade_date

obj = SignalDigger(output_folder='./output', output_format='pdf')
obj.process_signal_before_analysis(
    signal=comb_factors["equal_weight"],
    price=dv.get_ts("close_adj"),
    high=dv.get_ts("high_adj"),  # 可为空
    low=dv.get_ts("low_adj"),  # 可为空
    n_quantiles=5,  # quantile分类数
    mask=mask,  # 过滤条件
    can_enter=can_enter,  # 是否能进场
    can_exit=can_exit,  # 是否能出场
    period=period,  # 持有期
    benchmark_price=dv.data_benchmark,  # 基准价格 可不传入,持有期收益(return)计算为绝对收益
    commission=0.0008,
)
obj.create_full_report()
plt.show()
コード例 #5
0
    kind="line",
    figsize=(15, 5),
)
#在原有的基础上调整了输出的时间:
ic_30.loc[datetime.date(2017, 1, 3):, ][["equal_weight", "ic_weight",
                                         "pe"]].plot(
                                             kind="line",
                                             figsize=(15, 5),
                                         )

#step4:查看等权合成因子的详情报告 process_signal_before_analysis():与第二章SignalDigger因子分析完全一样,至此可以之前单一因子对比,看合成因子效果如何:
import matplotlib.pyplot as plt
from jaqs_fxdayu.research.signaldigger.analysis import analysis
from jaqs_fxdayu.research import SignalDigger

obj = SignalDigger()  #这里与第二章不同,对比下
obj.process_signal_before_analysis(
    signal=comb_factors["equal_weight"],
    price=dv.get_ts("close_adj"),
    high=dv.get_ts("high_adj"),  # 可为空
    low=dv.get_ts("low_adj"),  # 可为空
    n_quantiles=5,  # quantile分类数
    mask=mask,  # 过滤条件
    can_enter=can_enter,  # 是否能进场
    can_exit=can_exit,  # 是否能出场
    period=30,  # 持有期
    benchmark_price=dv.data_benchmark,  # 基准价格 可不传入,持有期收益(return)计算为绝对收益
    commission=0.0008,
)
obj.create_full_report()
plt.show()
コード例 #6
0
# import h5py
import warnings
from jaqs_fxdayu.research import SignalDigger
from jaqs_fxdayu.data import DataView
from api import *

warnings.filterwarnings('ignore')

# step 1:实例化SignalDigger 通过output_folder和output_format指定因子绩效表现的输出路径和输出格式,通过signal_name指定绩效文件名称
sd = SignalDigger(output_folder=".", output_format='pdf', signal_name="signal")

folders = [
    './data_2016_1_000300', './data_2016_2_000300', './data_2017_1_000300',
    './data_2017_2_000300', './data_2018_1_000300', './data_2018_2_000300',
    './data_2019_1_000300'
]


def get_(folder):
    # step 2 因子数据预处理
    # 加载dataview数据集
    dv = DataView()
    dataview_folder = folder
    dv.load_dataview(dataview_folder)
    # 定义信号过滤条件-非指数成分
    # df_index_member = dv.get_ts('index_member')

    signal = dv.get_ts("pb")
    price = dv.get_ts("close_adj")
    group = dv.get_ts("sw1")
コード例 #7
0
                                         in_sample_range=[20140101,20160101], #选择优化的时间范围内范围  默认为None,表示在全样本上优化
                                         #这样做的目的是留下一部分样本进行检验,看优化的效果如何
                                         ascending=False) #是否按优化目标升序排列(从小到大),ascending=False表示按降序排列,也就是说得到的结果中第一行就是最优解


print(ret_best[0]["signal_name"]) #返回最优解的结果 'LEN': 12
print(ret_best[0]["ret"])
print(ret_best[0]["ic"])
print(ret_best[0]["space"])


#step3:进行可视化的操作
from jaqs_fxdayu.research import SignalDigger
from jaqs_fxdayu.research.signaldigger.analysis import analysis
import matplotlib.pyplot as plt
obj = SignalDigger()

def draw_analysis(signal_data,period):  
    obj.signal_data = signal_data
    obj.period = period
    obj.create_full_report()
    plt.show()

#全样本可视化操作:
draw_analysis(optimizer.all_signals[ret_best[0]["signal_name"]], period=30)

#当然,这里也可以仿制第二章中的方法,不定义函数,直接运行:
''''
obj.signal_data=optimizer.all_signals[ret_best[0]["signal_name"]]
obj.period = 30
obj.create_full_report()
コード例 #8
0
                   is_quarterly=False,
                   add_data=True)
    can_enter = np.logical_and(dv.get_ts('up_limit') < 1, ~mask_sus)  # 未涨停未停牌
    can_exit = np.logical_and(dv.get_ts('down_limit') < 1, ~mask_sus)  # 未跌停未停牌
    return can_enter, can_exit


mask = mask_index_member()  #是否需要过滤该支股票:这里false表示不用过滤该股票,true表示需要过滤掉该股票
can_enter, can_exit = limit_up_down(
)  #是否能够买入/卖出:can_enter中true表示可以买入,false表示不能买入;can_exit中true表示可以卖出,false表示不能卖出

#2_SignalDigger处理因子  obj.process_signal_before_analysis():
#step1:
from jaqs_fxdayu.research import SignalDigger
obj = SignalDigger(
    output_folder='G:\data2',  #输出路径
    output_format='pdf')  #output_format='pdf'表示输出格式为pdf

# 处理因子 计算目标股票池每只股票的持有期收益,和对应因子值的quantile分类
obj.process_signal_before_analysis(
    signal=dv.get_ts(
        "pb"),  #传入的因子,这里是dataframe格式,不同于alphalens需要传入的multiIndex格式
    price=dv.get_ts("close_adj"),  #这里的price,high,low是需要计算的价格
    high=dv.get_ts("high_adj"),  # 可为空(可以不写这一行)
    low=dv.get_ts("low_adj"),  # 可为空(可以不写这一行)
    group=dv.get_ts("sw1"),  # 可为空(可以不写这一行) ,这里选择申万的分类方式
    n_quantiles=5,  # quantile分类数
    mask=mask,  # 过滤条件
    can_enter=can_enter,  # 是否能进场
    can_exit=can_exit,  # 是否能出场
    period=15,  # 持有期
コード例 #9
0
mask = mask_index_member()
can_enter, can_exit = limit_up_down()

#step2: #用append_df的方法将slope_df添加至本地(dataview数据集里)
print(dv.fields)  #查看dv中取得的数据
dv.append_df(field_name="Union", df=Union, is_quarterly=False
             )  #用append_df方法将"Union"添加至本地(dataview数据集里),其新名称为df=(Union)
dv.append_df(field_name="Intersection", df=Intersection, is_quarterly=False)
dv.save_dataview('G:/data/hs300_2')  #保存,若不运行,则下次重新运行不会有Union和Intersection

#step3:新因子分析:
from jaqs_fxdayu.research import SignalDigger
import matplotlib.pyplot as plt
from jaqs_fxdayu.research.signaldigger.analysis import analysis

obj = SignalDigger(output_folder='G:/data', output_format='pdf')


def draw_analysis(
        signal="Union",
        benchmark_price=None):  #同样类似于第二章SignalDigger处理因子的方式,不过这里是定义函数
    obj.process_signal_before_analysis(
        signal=dv.get_ts(signal),
        price=dv.get_ts("close_adj"),
        high=dv.get_ts("high_adj"),  #可为空
        low=dv.get_ts("low_adj"),  #可为空
        n_quantiles=1,  # quantile分类数
        mask=mask,  #过滤条件
        can_enter=can_enter,  # 是否能进场
        can_exit=can_exit,  # 是否能出场
        period=30,  # 持有期