[关闭]
@Channelchan 2018-01-10T15:47:23.000000Z 字数 2577 阅读 24006

因子高低价统计分布

  1. 读取本地数据
  2. 添加signal,添加high,low获取signal_data
  3. 对最高价与最低价进行分析,输出做多的Quantile75的止盈止损位

1_读取本地数据

  1. import numpy as np
  2. from jaqs.data import DataView
  3. from jaqs.research import SignalDigger
  4. import warnings
  5. warnings.filterwarnings("ignore")
  6. dataview_folder = 'JAQS_Data/hs300'
  7. dv = DataView()
  8. dv.load_dataview(dataview_folder)
D:\Anaconda3\lib\site-packages\statsmodels\compat\pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.
  from pandas.core import datetools


Dataview loaded successfully.
  1. def mask_index_member():
  2. df_index_member = dv.get_ts('index_member')
  3. mask_index_member = ~(df_index_member ==0) #定义信号过滤条件-非指数成分
  4. return mask_index_member
  5. def limit_up_down():
  6. # 定义可买卖条件——未停牌、未涨跌停
  7. trade_status = dv.get_ts('trade_status')
  8. mask_sus = trade_status == u'停牌'
  9. # 涨停
  10. dv.add_formula('up_limit', '(close - Delay(close, 1)) / Delay(close, 1) > 0.095', is_quarterly=False)
  11. # 跌停
  12. dv.add_formula('down_limit', '(close - Delay(close, 1)) / Delay(close, 1) < -0.095', is_quarterly=False)
  13. can_enter = np.logical_and(dv.get_ts('up_limit') < 1, ~mask_sus) # 未涨停未停牌
  14. can_exit = np.logical_and(dv.get_ts('down_limit') < 1, ~mask_sus) # 未跌停未停牌
  15. return can_enter,can_exit
  1. mask = mask_index_member()
  2. can_enter,can_exit = limit_up_down()
  3. price = dv.get_ts('close_adj')
  4. high = dv.get_ts('high_adj')
  5. low = dv.get_ts('low_adj')
  6. price_bench = dv.data_benchmark
Add formula failed: name [up_limit] exist. Try another name.
Add formula failed: name [down_limit] exist. Try another name.

2_添加signal,添加high,low获取signal_data

  1. dv.add_formula("Cor_Vwap",'- Correlation(vwap_adj, volume, 10)',is_quarterly=False)
  2. signal = dv.get_ts("Cor_Vwap")
Add formula failed: name [factor] exist. Try another name.
  1. sig = SignalDigger(output_format=None)
  2. sig.process_signal_before_analysis(signal,
  3. price=price,
  4. high=high,
  5. low=low,
  6. n_quantiles=5,
  7. mask=mask,
  8. can_enter=can_enter,
  9. can_exit=can_exit,
  10. period=5,
  11. #benchmark_price=price_bench,
  12. forward=True,)
  13. signal_data = sig.signal_data
  14. print(signal_data.head())
Nan Data Count (should be zero) : 0;  Percentage of effective data: 35%
                        signal    return  upside_ret  downside_ret  quantile
trade_date symbol                                                           
20120105   000008.SZ  0.244504  0.111011    0.133058     -0.038595         5
           000031.SZ  0.175844  0.073580    0.101128     -0.014574         4
           000046.SZ -0.655705  0.023770    0.067996     -0.027827         2
           000400.SZ  0.413553  0.027469    0.052792     -0.087961         5
           000413.SZ -0.770937  0.139239    0.170798     -0.014607         1

3_对最高价与最低价进行分析,输出做多的Quantile75的止盈止损位

  1. from jaqs.research import analysis
  2. result = analysis(signal_data=signal_data,
  3. is_event=False,
  4. period=5)
  1. print('Percentile75止盈:', result["space"].loc['upside_space_percentile75','long_space'])
Percentile75止盈: 0.0512136099887
  1. print('Percentile75止损:', result["space"].loc['downside_space_percentile75','long_space'])
Percentile75止损: -0.0196126635889
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注