예제 #1
0
print(group2_code.tail()
      )  #value="industry1_code"表示以industry2_name为分类标准,不过返回的code类型(类别代号)

group3 = dp.daily_sec_industry(api,
                               symbols,
                               start,
                               end,
                               source='zz',
                               value="industry1_name")
print(group3.tail())  #source='zz'表示以中证为分类标准,只是分类标准不同而已

group3_code = dp.daily_sec_industry(api,
                                    symbols,
                                    start,
                                    end,
                                    source='zz',
                                    value="industry1_code")
print(group3_code.tail()
      )  #source='zz'表示以中证为分类标准,只是分类标准不同而已,industry1_code返回的是类别代号(code类型)

#3_添加数据保存
dv = DataView()
dataview_folder = 'G:/data/hs300'  #档案地址
dv.load_dataview(dataview_folder)  #加载档案地址
dv.append_df(group, 'group')  #将group列加入dv中,后面的'group'为列名
dv.save_dataview('G:/data/hs300')  #保存

#获取数据
print(dv.get_ts('group').tail())
A = dv.get_ts('group')  #这样看的更清楚点
예제 #2
0
import talib as ta
import numpy as np
import pandas as pd
from datetime import datetime


def change_time(df):
    df.index = pd.Index(
        map(lambda x: datetime.strptime(str(x), "%Y%m%d"), df.index))
    return df


EMA = dv.get_ts('close').ewm(span=5, adjust=False).mean()
EMA2 = EMA.ewm(span=5, adjust=False).mean()
EMA3 = EMA2.ewm(span=5, adjust=False).mean()
dv.append_df(EMA3, 'EMA3')
dv.add_formula('a',
               'close/Delay(close,1)-1',
               is_quarterly=False,
               add_data=True)
dv.add_formula('b',
               '(close/Delay(EMA3,19))^(1/20)-1',
               is_quarterly=False,
               add_data=True)
Factor1 = dv.add_formula(
    'Factor1',
    '-Log((Ts_Sum(If(a>b,1,0),20)-1)*Ts_Sum(If(a<b,(a-b)^2,0),20)/(Ts_Sum(If(a<b,1,0),20))*Ts_Sum(If(a>b,(a-b)^2,0),20))',
    is_quarterly=False,
    add_data=True)

EMA = dv.get_ts('close').ewm(span=60, adjust=False).mean()
예제 #3
0
    plt.show()  #画图


def signal_data(signal, name, period=5, quantile=5):
    obj = cal_obj(signal, name, period, quantile)
    return obj.signal_data  #得到一个详细的数据


#3_画图展示:
plot_pfm(factor, 'roe_pb', period=5, quantile=5)
#ic值  t-value:t检验,p-value:pvalue,IC SKew:偏度,IC Kurtosis:峰度
#Daily Quantile Return:每个Quantile的收益率,Cumulative Return of Each Quantile:每个Quantile的累计收益率
#Signal Weighted Long Only Portfolio Cumulative Return 多头的收益率
#Signal Weighted Short Only Portfolio Cumulative Return 空头的收益率
#Top Minus Bottom Quantile Return 多空收益(多减空的一个收益)
#Top Minus Bottom (long top,short bottom) Portfolip Cumulative Return (做多Quantile高的,做空Quantile低的的收益率)
#Daily IC and Moving Average: IC的均值;Distribution Daily IC: IC的分布;IC Monthly Mean;每个月IC的值

#4_信号表格:
signal_df = signal_data(
    factor, 'roe_pb')  #signal:因子值,return:收益率(未来5天的收益率)(period=5),quantile:百分位
print(signal_df.head(100))

Q5 = signal_df.signal[signal_df['quantile'] ==
                      5]  #先判断'quantile'是否等于5返回一列true或者false,是true的话则记录signal
Q5[Q5 > 0] = 1  #将这些列中的元素转标记成1
dv.append_df(Q5.unstack(), 'roe_pb_Q5'
             )  #在dv中加入一列Q5.unstack(),'roe_pb_Q5'为列名  可以运行下A=Q5.unstack()以方便查看
dv.get_ts('roe_pb_Q5')  #读取roe_pb_Q5
dv.save_dataview('G:/data/hs300')
예제 #4
0
    dv.add_formula('down_limit',
                   '(close - Delay(close, 1)) / Delay(close, 1) < -0.095',
                   is_quarterly=False,
                   add_data=True)
    can_enter = np.logical_and(
        dv.get_ts('up_limit') < 1,
        ~mask_sus)  # 未涨停dv.get_ts('up_limit') < 1,未停牌(~mask_sus):即可以进场
    can_exit = np.logical_and(
        dv.get_ts('down_limit') < 1,
        ~mask_sus)  # 未跌停dv.get_ts('down_limit') < 1,未停牌(~mask_sus):即可以出场
    return can_enter, can_exit


mask_index_member = mask_index()
can_enter, can_exit = limit_up_down()

#3_添加数据
# dv.remove_field('mask_index_member')
# dv.remove_field('can_enter')
# dv.remove_field('can_exit')
dv.append_df(mask_index_member, 'mask_index_member')  #后面是给新因子的名称
dv.append_df(can_enter, 'can_enter')
dv.append_df(can_exit, 'can_exit')

#保存:
dv.save_dataview('G:/data/hs300')
print(dv.get_ts('mask_index_member').head())
X1 = dv.get_ts('mask_index_member')  #true表示不在指数成分里,false表示在指数成分里
X2 = dv.get_ts('can_enter')  #可以买入
X3 = dv.get_ts('can_exit')  #可以卖出
예제 #5
0
warnings.filterwarnings("ignore")
dataview_folder = '../Factor'
dv = DataView()
dv.load_dataview(dataview_folder)

from jaqs_fxdayu.research.signaldigger import process

Open = dv.get_ts("open_adj")
High = dv.get_ts("high_adj")
Low = dv.get_ts("low_adj")
Close = dv.get_ts("close_adj")
trade_status = dv.get_ts('trade_status')
mask_sus = trade_status == 0
# 剔除掉停牌期的数据 再计算指标
open_masked = process._mask_df(Open, mask=mask_sus)
high_masked = process._mask_df(High, mask=mask_sus)
low_masked = process._mask_df(Low, mask=mask_sus)
close_masked = process._mask_df(Close, mask=mask_sus)

from jaqs_fxdayu.data import signal_function_mod as sfm
cci = sfm.ta(ta_method='CCI',
             ta_column=0,
             Open=open_masked,
             High=high_masked,
             Low=low_masked,
             Close=close_masked,
             Volume=None)
dv.append_df(cci, 'CCI')
dv.get_ts('CCI').tail()
예제 #6
0
    # 跌停
    dv.add_formula('down_limit',
                   '(close - Delay(close, 1)) / Delay(close, 1) < -0.095',
                   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()
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(