[AI Alphas(A股版)] 完整的因子表

alpha101
ai_alphas
策略分享
标签: #<Tag:0x00007fc05b2fa7d8> #<Tag:0x00007fc05b2fa698> #<Tag:0x00007fc05b2fa558>

(iQuant) #1

本文是 AI Alphas(A股版)的附录

文章提到的200多个因子,列举如下,可直接在可视化AI策略中的输入特征列表模块中加入这些因子。

features = [
        'turn_0',
        'return_6',
        'fs_roe_0',
        'fs_eps_0',
        'fs_bps_0',
        'fs_roa_0',
        'return_20',
        'rank_turn_0',
        'rank_turn_9',
        'ta_rsi(close_0,28)',
        'rank_pb_lf_0',
        'fs_roa_ttm_0',
        'fs_roe_ttm_0',
        'high_0/low_0',
        'fs_eps_yoy_0',
        'sqrt(high_0*low_0)-amount_0/volume_0*adjust_factor_0',
        'sum(max(0,high_0-delay(close_0,1)),20)/sum(max(0,delay(close_0, 1)-low_0),20)*100',
        '((close_0-open_0)/((high_0-low_0)+.001))',
        'turn_9',
        'ta_ema(((high_0+low_0)/2-(delay(high_0,1)+delay(low_0,1))/2)*(high_0-low_0)/volume_0,7)',
        'turn_1',
        'fs_operating_revenue_yoy_0',
        'fs_operating_revenue_qoq_0',
        'fs_net_profit_margin_ttm_0',
        'fs_gross_profit_margin_ttm_0',
        'rank_pe_lyr_0',
        'rank_pe_ttm_0',
        'rank_ps_ttm_0',
        'rank_return_9',
        'rank_fs_bps_0',
        'rank_return_6',
        'rank_return_15',
        'close_1/open_0',
        'open_0/close_0',
        'high_0/close_1',
        'close_0/open_0',
        'rank_return_30',
        'rank_return_20',
        'rank_avg_turn_1',
        'close_9/close_0',
        'rank_avg_turn_6',
        'fs_cash_ratio_0',
        'close_4/close_0',
        'close_6/close_0',
        'close_2/close_0',
        'close_3/close_0',
        'close_5/close_0',
        'close_1/close_0',
        'rank_avg_turn_0',
        'volume_0/mean(volume_0, 3)*100', 
        'rank_avg_turn_3',
        'rank_avg_turn_9',
        'close_20/close_0',
        'rank_avg_turn_15',
        'close_15/close_0',
        'rank_avg_turn_20',
        'rank_market_cap_0',
        'amount_2/amount_0',
        'rank_fs_eps_yoy_0',
        'return_5/return_0',
        'amount_4/amount_0',
        'rank_fs_roe_ttm_0',
        'return_9/return_0',
        'amount_3/amount_0',
        'amount_5/amount_0',
        '(-1*correlation(open_0,volume_0,10))' ,
        '(-1*delta((((close_0-low_0)-(high_0-close_0))/(close_0-low_0)),9))', 
        'ta_atr(high_0,low_0,close_0,5)',
        '((-1*((low_0-close_0)*(open_0**5)))/((low_0-high_0)*(close_0**5)))',
        'turn_6',
        '-1*delta(((close_0-low_0)-(high_0-close_0))/(high_0-low_0),1)',
        'turn_3',
        'std(volume_0,10)',
        'ta_ema(((high_0+low_0-0)/2-(delay(high_0,1)+delay(low_0,1))/2)*(high_0-low_0)/volume_0,15)',
        '(close_0-mean(close_0,12))/mean(close_0,12)*100',
        '(close_0-delay(close_0,6))/delay(close_0,6)*volume_0',
        '(volume_0-delay(volume_0,5))/delay(volume_0,5)*100',
        'sum(((close_0-low_0)-(high_0-close_0))/(high_0-low_0)*volume_0,20)',
        '(close_0-mean(close_0,24))/mean(close_0,24)*100',
        '((sum(close_0,7)/7)-close_0)+correlation(amount_0/volume_0*adjust_factor_0,delay(close_0,5),230)',
        'turn_15',
        'rank((-1*((1-(open_0/close_0))**1)))', 
        'mean(close_0,12)/close_0',
        'ta_ema((close_0-ts_min(low_0,9))/(ts_max(high_0,9)-ts_min(low_0,9))*100,3)',
        'turn_20',
        '(close_0-delay(close_0,20))/delay(close_0,20)*100',
        'close_0-delay(close_0,5)',
        'ta_ema(volume_0, 21)',
        'close_0/delay(close_0,5)',
        'std(amount_0,20)',
        'sum(((close_0-low_0)-(high_0-close_0))/(high_0-low_0)*volume_0,6)',
        '((high_0+low_0+close_0)/3-mean((high_0+low_0+close_0)/3,12))/(0.015*mean(abs(close_0-mean((high_0+low_0+close_0)/3,12)),12))',
        'std(amount_0,6)',
        'ta_ema(((ts_max(high_0,6)-close_0)/(ts_max(high_0,6)-ts_min(low_0,6))*100),20)',
        'ta_ema(ta_ema((close_0-ts_min(low_0,9))/(ts_max(high_0,9)-ts_min(low_0,9))*100,3),3)',
        '(close_0-delay(close_0,6))/delay(close_0,6)*100',
        '(((high_0*low_0)**0.5)-amount_0/volume_0*adjust_factor_0)',
        '(mean(close_0,3)+mean(close_0,6)+mean(close_0,12)+mean(close_0,24))/(4*close_0)',
        'ta_ema(close_0-delay(close_0,5),5)',
        'ta_ema(high_0-low_0,10)/ta_ema(ta_ema(high_0-low_0,10),10)',
        '((high_0-ta_ema(close_0,15))-(low_0-ta_ema(close_0,15)))/close_0',
        '(close_0+high_0+low_0)/3',
        'std(volume_0,20)',
        'open_0/shift(close_0,1)-1 ',  
        'return_9',
        '(mean(close_0,3)+mean(close_0,6)+mean(close_0,12)+mean(close_0,24))/4',
        'rank(delta(((((high_0+low_0)/2)*0.2)+(amount_0/volume_0*adjust_factor_0*0.8)),4)*-1)',
        '(rank(sign(delta((((open_0*0.85)+(high_0 *0.15))),4)))*-1)',
        '(-1*correlation(close_0,volume_0, 10))',
        'close_0-delay(close_0,20)',
        '(close_0-delay(close_0,1))/delay(close_0,1)*volume_0',
        '(close_0-delay(close_0,12))/delay(close_0,12)*volume_0',
        'return_3',
        'return_0',
        '(high_0-low_0-ta_ema(high_0-low_0, 11))/ta_ema(high_0-low_0, 11)*100',
        'return_1',
        'mean(abs(close_0-mean(close_0,6)),6)',
        '-1*((low_0-close_0*(open_0**5)))/((close_0-high_0)*(close_0**5))',
        'mean(amount_0,20)',
        'return_30',
        'return_15',
        '(rank((amount_0/volume_0*adjust_factor_0-close_0))/rank((amount_0/volume_0*adjust_factor_0 + close_0)))', 
        '((rank(max((amount_0/volume_0*adjust_factor_0-close_0),3))+rank(min((amount_0/volume_0*adjust_factor_0-close_0), 3)))*rank(delta(volume_0, 3)))',
        'ta_beta(high_0,low_0,12)',
        'correlation(amount_0/volume_0*adjust_factor_0,volume_0,5)',
        'ta_adx(high_0,low_0,close_0,14)',
        'rank_turn_3',
        'rank_turn_1',
        'correlation(high_0/low_0,volume_0,4)',
        'rank_turn_6',
        'ta_rsi(close_0,14)',
        'rank_turn_15',
        'rank_turn_20',
        'rank_fs_roa_0',
        'rank_fs_roe_0',
        'rank_fs_eps_0',
        'rank_return_3',
        'rank_return_1',
        'rank_return_0',
        'low_0/close_1',
        'return_4/return_0',
        'rank_fs_roa_ttm_0',
        'amount_1/amount_0',
        'ta_wma(close_0,5)/close_0',
        'mean(close_0,5)/close_0',
        'ta_ema(close_0,5)/close_0',
        'ta_atr(high_0,low_0,close_0,14)/close_0',
        'avg_turn_9/turn_0',
        'avg_turn_1/turn_0',
        'ta_wma(close_0,30)/close_0',
        'return_9/return_5',
        'avg_turn_6/turn_0',
        'return_3/return_0',
        'ta_atr(high_0,low_0,close_0,28)/close_0',
        'close_0/mean(close_0,10)',
        'return_1/return_5',
        'return_0/return_3',
        'mean(close_0,30)/close_0',
        'return_1/return_0',
        'return_9/return_3',
        'ta_ema(close_0,30)/close_0',
        'avg_turn_3/turn_0',
        'return_1/return_3',
        'close_0/mean(close_0,30)',
        'return_6/return_5',
        'return_6/return_0',
        'close_0/mean(close_0,20)',
        'return_0/return_5',
        'return_6/return_3',
        'fs_net_profit_yoy_0',
        'fs_net_profit_qoq_0',
        'return_90/return_5',
        'return_15/return_0',
        'avg_turn_15/turn_0',
        'return_20/return_5',
        'return_50/return_5',
        'rank_sh_holder_num_0',
        'return_30/return_5',
        'avg_turn_20/turn_0',
        'return_30/return_0',
        'return_30/return_3',
        'return_20/return_0',
        'return_20/return_3',
        'return_15/return_5',
        'rank_fs_cash_ratio_0',
        'return_70/return_5',
        'return_60/return_5',
        'return_80/return_5',
        'return_15/return_3',
        'return_30/return_10',
        'return_70/return_10',
        'amount_0/avg_amount_5',
        'return_80/return_10',
        'return_50/return_10',
        'return_20/return_10',
        'return_90/return_10',
        'amount_0/avg_amount_3',
        'return_120/return_5',
        'return_60/return_10',
        'fs_net_profit_margin_0',
        '(high_0-low_0)/close_0',
        'return_120/return_10',
        'mean(close_0,20)/mean(close_0,30)',
        'mean(close_0,30)/mean(close_0,60)',
        'mean(close_0,10)/mean(close_0,60)',
        '(low_1-close_0)/close_0',
        'rank_market_cap_float_0',
        'mean(close_0,10)/mean(close_0,20)',
        '(low_1-close_1)/close_0',
        '(close_1-low_0)/close_0',
        '(low_0-close_1)/close_0',
        'mean(close_0,10)/mean(close_0,30)',
        'rank_fs_net_profit_qoq_0',
        'rank_sh_holder_avg_pct_0',
        'fs_gross_profit_margin_0',
        '(high_0-close_1)/close_0',
        '(high_1-close_0)/close_0',
        'rank_fs_net_profit_yoy_0',
        '(open_0-close_0)/close_0',
        '(close_1-high_0)/close_0',
        '(high_1-close_1)/close_0',
        '(high_0-low_0)/(close_0-open_0)',
        'rank_fs_operating_revenue_yoy_0',
        'rank_fs_operating_revenue_qoq_0',
        '(open_0-close_0)/(high_0-low_0)',
        'rank_sh_holder_avg_pct_6m_chng_0',
        'rank_sh_holder_avg_pct_3m_chng_0',
        'mean(close_0,3)/close_0',
        'mean(amount_0,3)/amount_0',
        'mean(volume_0,3)/volume_0',
        'avg_mf_net_amount_6/mf_net_amount_0',
        'avg_mf_net_amount_9/mf_net_amount_0',
        'avg_mf_net_amount_3/mf_net_amount_0',
        'avg_mf_net_amount_20/mf_net_amount_0',
        'avg_mf_net_amount_15/mf_net_amount_0',
        'avg_mf_net_amount_12/mf_net_amount_0',
        'avg_mf_net_amount_9/avg_mf_net_amount_3',
        'avg_mf_net_amount_6/avg_mf_net_amount_3',
        'close_0/mean(close_0,3)',
        'avg_mf_net_amount_20/avg_mf_net_amount_3',
        'avg_mf_net_amount_12/avg_mf_net_amount_3',
        'avg_mf_net_amount_15/avg_mf_net_amount_3',
        'amount_0/mean(amount_0,3)',
        '((close_0-low_0)-(high_0-close_0))/(high_0-close_0)',
        '(high_0-low_0+high_1-low_1+high_2-low_2)/close_0',
        'mean(close_0,6)/close_0',
        'mean(amount_0,6)/amount_0',
        'mean(volume_0,6)/volume_0',
        '3/1*(high_0-low_0)/(high_0-low_0+high_1-low_1+high_2-low_2)',
        'mean(close_0,6)/mean(close_0,3)',
        'mean(close_0,9)/close_0',
        'mean(amount_0,6)/mean(amount_0,3)',
        'mean(amount_0,9)/amount_0',
        'mean(volume_0,9)/volume_0',
        '(mean(high_0,6)-mean(low_0,6))/close_0',
        'mean(close_0,9)/mean(close_0,3)',
        'mean(amount_0,9)/mean(amount_0,3)',
        'mean(close_0,15)/close_0',
        '(mean(high_0,9)-mean(low_0,9))/close_0',
        'mean(amount_0,15)/amount_0',
        'mean(volume_0,15)/volume_0',
        '(mean(high_0,6)-mean(low_0,6))/(mean(high_0,3)-mean(low_0,3))',
        'mean(close_0,15)/mean(close_0,3)',
        'mean(amount_0,15)/mean(amount_0,3)',
        'mean(close_0,20)/close_0',
        'mean(amount_0,20)/amount_0',
        'mean(volume_0,20)/volume_0',
        'mean(close_0,20)/mean(close_0,3)',
        '(mean(high_0,9)-mean(low_0,9))/(mean(high_0,3)-mean(low_0,3))',
        'mean(amount_0,20)/mean(amount_0,3)',
        '(sum(high_0,15)-sum(low_0,15))/close_0',
        '(mean(high_0,15)-mean(low_0,15))/(mean(high_0,3)-mean(low_0,3))',
        '(sum(high_0,20)-sum(low_0,20))/close_0',
        '(mean(high_0,20)-mean(low_0,20))/(mean(high_0,3)-mean(low_0,3))',
        ]

282个因子快速定义的秘密:表达式引擎
【重磅】AI Alphas(A股版)
No data left after dropnan错误
(huangmou37) #2

这个列表部分公式是明显有错误吧?比如:

’((-1((low_0-close_0)(open_0**5)))/((low_0-high_0)(close_05)))’,

这里的**是笔误吗?

又比如:

’-1delta(((close_0-low_0)-(high_0-close_0))/(high_0-low_0),1)’,

这里的-1delta是否应该为-1 * deta

当然,还有一些其他的错误,导致复制到策略里面无法运行。


(huangmou37) #3

如果想避免代码与Markdown冲突,可以这样编辑:
markdown


(iQuant) #4

确实是由于markdown把*识别为加粗了,所以导致有问题。

**不是笔误,2**3表示是2的三次方。


(huangmou37) #5

因子列表涉及很多函数,比如ta_rsi(…), ta_ema(…),这些函数貌似不能被训练引擎认识,会报“Key error”。我用的训练器是最新的M.stock_ranker_train.v5。难道我需要提前导入别的包吗?


(iQuant) #6

你并不需要别的包。参照下面的策略模板即可。

克隆策略
In [2]:
## 基础配置
class conf:
    start_date = '2014-01-01'
    end_date='2017-07-17'
    split_date = '2015-01-01'
    instruments = D.instruments(start_date, end_date)
    hold_days = 5
    features = [
         'ta_sma(close_0,12)',
        'shift(close_0,15) / close_0'
               ]
    # 数据标注标注
    label_expr = [
    # 计算未来一段时间(hold_days)的相对收益
    'shift(close, -5) / shift(open, -1) - shift(benchmark_close, -5) / shift(benchmark_open, -1)',
    # 极值处理:用1%和99%分位的值做clip
    'clip(label, all_quantile(label, 0.01), all_quantile(label, 0.99))',
    # 将分数映射到分类,这里使用20个分类,这里采取等宽离散化
    'all_wbins(label, 20)',
    # 过滤掉一字涨停的情况 (设置label为NaN,在后续处理和训练中会忽略NaN的label)
    'where(shift(high, -1) == shift(low, -1), NaN, label)'
    ]

## 量化回测 https://bigquant.com/docs/module_trade.html
# 回测引擎:准备数据,只执行一次
def prepare(context):
    # context.start_date / end_date,回测的时候,为trader传入参数;在实盘运行的时候,由系统替换为实盘日期
    instruments = D.instruments()
    ## 在样本外数据上进行预测
    n0 = M.general_feature_extractor.v5(
        instruments=D.instruments(),
        start_date=context.start_date, end_date=context.end_date,
        features=conf.features)
    n1 = M.derived_feature_extractor.v1(
        data=n0.data,
        features= conf.features)
    n2 = M.transform.v2(data=n1.data, transforms=None, drop_null=True)
    n3 = M.stock_ranker_predict.v5(model=context.options['model'], data=n2.data)
    context.instruments = n3.instruments
    context.options['predictions'] = n3.predictions

# 回测引擎:初始化函数,只执行一次
def initialize(context):
    # 加载预测数据
    context.ranker_prediction = context.options['predictions'].read_df()
    # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
    # 预测数据,通过options传入进来,使用 read_df 函数,加载到内存 (DataFrame)
    # 设置买入的股票数量,这里买入预测股票列表排名靠前的5只
    stock_count = 5
    # 每只的股票的权重,如下的权重分配会使得靠前的股票分配多一点的资金,[0.339160, 0.213986, 0.169580, ..]
    context.stock_weights = T.norm([1 / math.log(i + 2) for i in range(0, stock_count)])
    # 设置每只股票占用的最大资金比例
    context.max_cash_per_instrument = 0.2

# 回测引擎:每日数据处理函数,每天执行一次
def handle_data(context, data):
    # 按日期过滤得到今日的预测数据
    ranker_prediction = context.ranker_prediction[
        context.ranker_prediction.date == data.current_dt.strftime('%Y-%m-%d')]
    # 1. 资金分配
    # 平均持仓时间是hold_days,每日都将买入股票,每日预期使用 1/hold_days 的资金
    # 实际操作中,会存在一定的买入误差,所以在前hold_days天,等量使用资金;之后,尽量使用剩余资金(这里设置最多用等量的1.5倍)
    is_staging = context.trading_day_index < context.options['hold_days'] # 是否在建仓期间(前 hold_days 天)
    cash_avg = context.portfolio.portfolio_value / context.options['hold_days']
    cash_for_buy = min(context.portfolio.cash, (1 if is_staging else 1.5) * cash_avg)
    cash_for_sell = cash_avg - (context.portfolio.cash - cash_for_buy)
    positions = {e.symbol: p.amount * p.last_sale_price
                 for e, p in context.perf_tracker.position_tracker.positions.items()}
    # 2. 生成卖出订单:hold_days天之后才开始卖出;对持仓的股票,按StockRanker预测的排序末位淘汰
    if not is_staging and cash_for_sell > 0:
        equities = {e.symbol: e for e, p in context.perf_tracker.position_tracker.positions.items()}
        instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(
                lambda x: x in equities and not context.has_unfinished_sell_order(equities[x]))])))
        # print('rank order for sell %s' % instruments)
        for instrument in instruments:
            context.order_target(context.symbol(instrument), 0)
            cash_for_sell -= positions[instrument]
            if cash_for_sell <= 0:
                break
    # 3. 生成买入订单:按StockRanker预测的排序,买入前面的stock_count只股票
    buy_cash_weights = context.stock_weights
    buy_instruments = list(ranker_prediction.instrument[:len(buy_cash_weights)])
    max_cash_per_instrument = context.portfolio.portfolio_value * context.max_cash_per_instrument
    for i, instrument in enumerate(buy_instruments):
        cash = cash_for_buy * buy_cash_weights[i]
        if cash > max_cash_per_instrument - positions.get(instrument, 0):
            # 确保股票持仓量不会超过每次股票最大的占用资金量
            cash = max_cash_per_instrument - positions.get(instrument, 0)
        if cash > 0:
            price = data.current(context.symbol(instrument), 'price')
            lots = int(cash/price/100)
            context.order_lots(context.symbol(instrument), lots)

            
## 通过训练集数据训练模型            
# 数据标注
m1 = M.advanced_auto_labeler.v1(
                               instruments=conf.instruments, start_date=conf.start_date, end_date=conf.split_date,
                               label_expr=conf.label_expr, benchmark='000300.SHA', cast_label_int=True)                     
# 抽取基础特征           
m2_1 = M.general_feature_extractor.v5(
        instruments=D.instruments(),
        start_date=conf.start_date, end_date=conf.split_date,
        features=conf.features)

# 抽取衍生特征 
m2_2 = M.derived_feature_extractor.v1(
        data=m2_1.data,
        features= conf.features)

# 特征转换
m3 = M.transform.v2(data=m2_2.data, transforms=None, drop_null=True)

# 合并标注和特征数据
m4 = M.join.v2(data1=m1.data, data2=m3.data, on=['date', 'instrument'], sort=True)

# 开始训练模型
m5 = M.stock_ranker_train.v5(training_ds=m4.data, features=conf.features)

## 测试集上进行回测
m6 = M.trade.v3(
    instruments=None,
    start_date=conf.split_date,
    end_date=conf.end_date,
    prepare=prepare,
    initialize=initialize,
    handle_data=handle_data,
    order_price_field_buy='open',       
    order_price_field_sell='close',      
    capital_base=50001,               
    benchmark='000300.SHA',             
    options={'hold_days': conf.hold_days, 'model': m5.model_id},
    m_deps=np.random.rand()
)
[2017-10-31 14:30:54.070528] INFO: bigquant: advanced_auto_labeler.v1 开始运行..
[2017-10-31 14:30:54.073647] INFO: bigquant: 命中缓存
[2017-10-31 14:30:54.074557] INFO: bigquant: advanced_auto_labeler.v1 运行完成[0.004064s].
[2017-10-31 14:30:54.100524] INFO: bigquant: general_feature_extractor.v5 开始运行..
[2017-10-31 14:31:01.373828] INFO: general_feature_extractor: year 2014, featurerows=569948
[2017-10-31 14:31:06.163041] INFO: general_feature_extractor: year 2015, featurerows=0
[2017-10-31 14:31:06.172679] INFO: general_feature_extractor: total feature rows: 569948
[2017-10-31 14:31:06.175012] INFO: bigquant: general_feature_extractor.v5 运行完成[12.074538s].
[2017-10-31 14:31:06.193446] INFO: bigquant: derived_feature_extractor.v1 开始运行..
[2017-10-31 14:31:08.963095] INFO: derived_feature_extractor: extracted ta_sma(close_0,12), 2.466s
[2017-10-31 14:31:09.055847] INFO: derived_feature_extractor: extracted shift(close_0,15) / close_0, 0.091s
[2017-10-31 14:31:09.231621] INFO: derived_feature_extractor: /y_2014, 569948
[2017-10-31 14:31:09.786328] INFO: bigquant: derived_feature_extractor.v1 运行完成[3.592876s].
[2017-10-31 14:31:09.799307] INFO: bigquant: transform.v2 开始运行..
[2017-10-31 14:31:10.548728] INFO: transform: transformed /y_2014, 531223/569948
[2017-10-31 14:31:10.561325] INFO: transform: transformed rows: 531223/569948
[2017-10-31 14:31:10.591106] INFO: bigquant: transform.v2 运行完成[0.79174s].
[2017-10-31 14:31:10.605849] INFO: bigquant: join.v2 开始运行..
[2017-10-31 14:31:13.822280] INFO: join: /y_2014, rows=517281/531223, timetaken=2.278001s
[2017-10-31 14:31:13.904966] INFO: join: total result rows: 517281
[2017-10-31 14:31:13.907263] INFO: bigquant: join.v2 运行完成[3.301446s].
[2017-10-31 14:31:13.928470] INFO: bigquant: stock_ranker_train.v5 开始运行..
[2017-10-31 14:31:14.904245] INFO: df2bin: prepare bins ..
[2017-10-31 14:31:15.020723] INFO: df2bin: prepare data: training ..
[2017-10-31 14:31:19.620978] INFO: stock_ranker_train: 17ab5306 准备训练: 517281 行数
[2017-10-31 14:32:32.691251] INFO: bigquant: stock_ranker_train.v5 运行完成[78.762867s].
[2017-10-31 14:32:32.750023] INFO: bigquant: backtest.v7 开始运行..
[2017-10-31 14:32:32.803839] INFO: bigquant: general_feature_extractor.v5 开始运行..
[2017-10-31 14:32:38.259986] INFO: general_feature_extractor: year 2015, featurerows=569698
[2017-10-31 14:32:43.908698] INFO: general_feature_extractor: year 2016, featurerows=641546
[2017-10-31 14:32:48.854241] INFO: general_feature_extractor: year 2017, featurerows=382398
[2017-10-31 14:32:48.880066] INFO: general_feature_extractor: total feature rows: 1593642
[2017-10-31 14:32:48.886973] INFO: bigquant: general_feature_extractor.v5 运行完成[16.083175s].
[2017-10-31 14:32:48.894833] INFO: bigquant: derived_feature_extractor.v1 开始运行..
[2017-10-31 14:32:55.094867] INFO: derived_feature_extractor: extracted ta_sma(close_0,12), 5.267s
[2017-10-31 14:32:55.388243] INFO: derived_feature_extractor: extracted shift(close_0,15) / close_0, 0.292s
[2017-10-31 14:32:55.553705] INFO: derived_feature_extractor: /y_2015, 569698
[2017-10-31 14:32:55.903021] INFO: derived_feature_extractor: /y_2016, 641546
[2017-10-31 14:32:56.385240] INFO: derived_feature_extractor: /y_2017, 382398
[2017-10-31 14:32:56.598876] INFO: bigquant: derived_feature_extractor.v1 运行完成[7.703991s].
[2017-10-31 14:32:56.609030] INFO: bigquant: transform.v2 开始运行..
[2017-10-31 14:32:57.162485] INFO: transform: transformed /y_2015, 527734/569698
[2017-10-31 14:32:57.901967] INFO: transform: transformed /y_2016, 638153/641546
[2017-10-31 14:32:58.254815] INFO: transform: transformed /y_2017, 378374/382398
[2017-10-31 14:32:58.283807] INFO: transform: transformed rows: 1544261/1593642
[2017-10-31 14:32:58.296767] INFO: bigquant: transform.v2 运行完成[1.687748s].
[2017-10-31 14:32:58.311194] INFO: bigquant: stock_ranker_predict.v5 开始运行..
[2017-10-31 14:32:58.931137] INFO: df2bin: prepare data: prediction ..
[2017-10-31 14:33:12.930127] INFO: stock_ranker_predict: 准备预测: 1544261 行
[2017-10-31 14:33:24.801640] INFO: bigquant: stock_ranker_predict.v5 运行完成[26.490405s].
[2017-10-31 14:34:17.697522] INFO: Performance: Simulated 618 trading days out of 618.
[2017-10-31 14:34:17.698916] INFO: Performance: first open: 2015-01-05 14:30:00+00:00
[2017-10-31 14:34:17.699903] INFO: Performance: last close: 2017-07-17 19:00:00+00:00
  • 收益率3.66%
  • 年化收益率1.48%
  • 基准收益率3.67%
  • 阿尔法-0.0
  • 贝塔0.86
  • 夏普比率-0.1
  • 收益波动率30.33%
  • 信息比率-0.0
  • 最大回撤41.8%
[2017-10-31 14:34:21.409336] INFO: bigquant: backtest.v7 运行完成[108.659286s].

(ziyue170) #7

请问原来那个版本的因子表还有么,哪可以找到


(ziyue170) #8

shift(close_0,1)这个是什么意思啊


(lilong) #9

shift(x, d)表示的是d天之前的x的值,close_0是当日收盘价。shift(close_0,1)就是昨天的收盘价,你可以看文档中的“表达式引擎”。


(ghw) #10

请问有不有因子编号?比如我要找国泰君26?


(siyishenqing) #11

同问啊,有找到因子编号没。。。


(a20180322) #12

除了这282个因子还有其它因子吗,比如list_board_0,有相关详细说明吗,比如因子定义,影响,因子相互关联作用效果等


(andrew) #13

请问gtja的因子没标注是在哪,可以注明吗?


(z652896169) #14

请问因子的具体说明有吗?所有因子都只有一个英文名称,具体作用怎么知道?


(lbnxll007) #15

[quote=“lilong, post:9, topic:1001”]
昨天的
[/quote]这些因子都没有注解,好多不知道什么意思呐!!!哪里有完整版的,带注解的?