In [6]:
#coding=utf-8

from rqalpha.api import *
import traceback
from datetime import *
from sqlalchemy import create_engine
import pandas as pd
from rqalpha.utils.logger import user_log


def dependency():
    return []

def market(market=90):
    if market == 83:
        return 'XSHG'
    elif market == 90:
        return 'XSHE'
    else:
        return ""

def compute(startdt,enddt,context):
    '''
    PE
    :param startdt:
    :param enddt:
    :return:
    '''
    #context.config 对应配置的extra部分
    jydbConf = context.config.jydb
    _jyConnStr = "mysql+pymysql://%s:%s@%s:%s/%s"%(jydbConf.user,jydbConf.passwd,jydbConf.host,jydbConf.port,jydbConf.db)
    engine = create_engine(_jyConnStr)
    
    _category = [1, ]
    _sectors = [1, 2, 6]
    _sql = "SELECT p.TradingDay as date,p.PE as value,a.SecuCode as code,a.SecuMarket" \
                   " FROM LC_DIndicesForValuation as p inner join secumain as a "\
                    "on a.innerCode=p.innerCode where a.SecuMarket in (83,90) " \
                   "and a.SecuCategory in (%s) and a.ListedSector in (%s) " \
                   "and a.ListedState!=9 and p.TradingDay between '%s' and '%s' order by p.TradingDay asc" % (
                        ",".join([str(i) for i in _category]), ",".join([str(i) for i in _sectors])
                        ,startdt.strftime('%Y-%m-%d'),
                       enddt.strftime('%Y-%m-%d'))
#     print(_sql)
    _res = pd.read_sql(sql=_sql,con = engine)
#     market = {90:"XSHE",83:"XSHG"}
    _res.code = _res.code + "." + _res.SecuMarket.apply(market)
    _res = _res.drop(['SecuMarket'],axis=1).set_index(['date','code']).unstack(level=-1)
    _res.columns = _res.columns.droplevel(level=0)
    return _res

In [7]:
# test
config= {"extra":{"jydb":{"host":"172.18.44.5","port":3306,"user":"liangh","passwd":"huaxun!@#db","db":"jydb"}}}
from rqalpha.utils import RqAttrDict
conf = RqAttrDict(config)
from rqalpha.mod.rqalpha_mod_alphaStar_factors.factor_context import FactorContext
context = FactorContext(conf)
context.registerDepending(dependency())
res =  compute(datetime(2017,1,1),datetime(2017,2,1),context)
res.head(10)


Out[7]:
code 000001.XSHE 000002.XSHE 000004.XSHE 000005.XSHE 000006.XSHE 000007.XSHE 000008.XSHE 000009.XSHE 000010.XSHE 000011.XSHE ... 603986.XSHG 603987.XSHG 603988.XSHG 603989.XSHG 603990.XSHG 603993.XSHG 603996.XSHG 603997.XSHG 603998.XSHG 603999.XSHG
date
2017-01-03 6.7407 9.5646 48.2571 26.5261 11.4471 42.4395 30.5768 -79.2387 137.9092 20.9009 ... 91.2327 65.4678 1136.0236 36.9102 85.8684 51.2801 47.7668 25.6374 158.9808 129.2768
2017-01-04 6.7407 9.6200 48.5285 27.2252 11.6010 43.0412 30.7405 -80.6780 138.6173 21.1596 ... 91.2327 64.7987 1249.6898 37.0290 86.1638 51.9639 48.5919 25.8974 159.2468 131.2987
2017-01-05 6.7480 9.6569 48.2463 27.0698 11.6247 42.6672 30.8060 -79.8447 138.2633 20.9440 ... 91.2327 62.7326 1240.2708 36.0587 86.7079 51.9639 49.2757 25.8064 157.2961 129.7070
2017-01-06 6.7186 9.5231 47.7251 27.3028 11.8496 41.3826 31.0351 -79.6174 136.4929 21.8279 ... 91.2327 58.8757 1209.1403 35.6132 82.4480 51.5536 49.1814 25.5074 155.7887 130.8255
2017-01-09 6.7333 9.5323 46.6938 27.4582 11.7786 40.7972 31.1988 -80.0720 137.7322 21.9573 ... 91.2327 58.6199 1290.0796 35.7914 82.2614 51.8271 49.2521 25.5854 156.9414 135.3427
2017-01-10 6.7333 9.4954 46.9543 27.2252 11.5537 40.3094 31.0024 -80.4507 136.4929 20.9333 ... 91.2327 58.1673 1292.6339 36.0884 82.6501 52.3741 48.8749 25.5464 157.4734 133.0626
2017-01-11 6.7259 9.4123 46.0858 26.6426 11.4590 40.4070 30.6423 -78.1781 131.1819 19.9955 ... 91.2327 57.6360 1303.1704 35.9498 81.5928 54.2886 47.4367 25.0263 166.5175 128.9326
2017-01-12 6.7333 9.4123 45.6515 26.3707 11.0091 40.0167 30.6423 -77.0418 128.7034 19.8769 ... 91.2327 57.0260 1344.5181 35.9795 81.6706 53.1946 47.1302 24.9093 162.2615 129.1477
2017-01-13 6.7407 10.0629 44.5116 25.9435 10.4527 38.7159 30.1512 -76.2843 124.9857 18.4433 ... 91.2327 54.0940 1297.7425 34.3558 77.1618 53.6048 48.0968 23.6613 160.6654 125.9642
2017-01-16 6.7259 9.6892 41.5369 25.0114 10.0029 38.7159 28.6453 -72.5723 120.5599 17.4947 ... 91.2327 51.0243 1281.2992 32.6528 72.9796 54.5621 49.1106 22.3612 144.7053 115.6392

10 rows × 3088 columns


In [15]:
from numpy import log
res.head(10).applymap(log)


D:\Program Files\Anaconda3\envs\rqalpha\lib\site-packages\ipykernel\__main__.py:2: RuntimeWarning: invalid value encountered in log
  from ipykernel import kernelapp as app
Out[15]:
code 000001.XSHE 000002.XSHE 000004.XSHE 000005.XSHE 000006.XSHE 000007.XSHE 000008.XSHE 000009.XSHE 000010.XSHE 000011.XSHE ... 603986.XSHG 603987.XSHG 603988.XSHG 603989.XSHG 603990.XSHG 603993.XSHG 603996.XSHG 603997.XSHG 603998.XSHG 603999.XSHG
date
2017-01-03 1.908164 2.258069 3.876543 3.278129 2.437736 3.748080 3.420242 NaN 4.926595 3.039792 ... 4.513413 4.181558 7.035289 3.608488 4.452816 3.937303 3.866331 3.244052 5.068783 4.861956
2017-01-04 1.908164 2.263844 3.882151 3.304143 2.451091 3.762158 3.425581 NaN 4.931717 3.052094 ... 4.513413 4.171286 7.130651 3.611701 4.456250 3.950549 3.883457 3.254143 5.070455 4.877475
2017-01-05 1.909246 2.267673 3.876319 3.298419 2.453132 3.753430 3.427709 NaN 4.929160 3.041852 ... 4.513413 4.138881 7.123085 3.585148 4.462545 3.950549 3.897431 3.250623 5.058130 4.865278
2017-01-06 1.904880 2.253720 3.865457 3.306989 2.472294 3.722861 3.435119 NaN 4.916273 3.083189 ... 4.513413 4.075428 7.097665 3.572716 4.412168 3.942622 3.895516 3.238969 5.048501 4.873864
2017-01-09 1.907065 2.254686 3.843611 3.312665 2.466284 3.708613 3.440380 NaN 4.925311 3.089100 ... 4.513413 4.071074 7.162459 3.577708 4.409902 3.947913 3.896952 3.242022 5.055872 4.907810
2017-01-10 1.907065 2.250807 3.849175 3.304143 2.447006 3.696585 3.434065 NaN 4.916273 3.041341 ... 4.513413 4.063323 7.164437 3.585971 4.414616 3.958412 3.889264 3.240496 5.059257 4.890820
2017-01-11 1.905966 2.242017 3.830505 3.282511 2.438775 3.699003 3.422381 NaN 4.876585 2.995507 ... 4.513413 4.054147 7.172555 3.582124 4.401741 3.994314 3.859396 3.219927 5.115100 4.859290
2017-01-12 1.907065 2.242017 3.821036 3.272254 2.398722 3.689297 3.422381 NaN 4.857511 2.989558 ... 4.513413 4.043507 7.203791 3.582949 4.402694 3.973957 3.852914 3.215241 5.089209 4.860957
2017-01-13 1.908164 2.308855 3.795750 3.255921 2.346860 3.656250 3.406225 NaN 4.828199 2.914701 ... 4.513413 3.990723 7.168381 3.536771 4.345905 3.981639 3.873216 3.163841 5.079324 4.835998
2017-01-16 1.905966 2.271012 3.726582 3.219332 2.302875 3.656250 3.354989 NaN 4.792147 2.861898 ... 4.513413 3.932302 7.155630 3.485931 4.290180 3.999340 3.894075 3.107327 4.974699 4.750475

10 rows × 3088 columns


In [2]:
# evaluateFileDemo
from rqalpha.mod.rqalpha_mod_alphaStar_factors import evaluate_file

config = {
  "base": {
    "start_date": "2018-01-01",
    "end_date": "2018-04-01",
  },
}

factor_file_path = "./pe.ipynb"

evaluate_file(factor_file_path=factor_file_path,config=config,config_file = "../config_factor.yml")


2018-01-02 INFO pe compute,startdt:2018-01-02 00:00:00,enddt:2018-03-14
[2018-05-03 11:43:03.315052] INFO: system_log: get factor value success
没有 000003.XSHE 相关数据
没有 000013.XSHE 相关数据
没有 000015.XSHE 相关数据
没有 000047.XSHE 相关数据
没有 000405.XSHE 相关数据
没有 000412.XSHE 相关数据
没有 000508.XSHE 相关数据
没有 000542.XSHE 相关数据
没有 000556.XSHE 相关数据
没有 000588.XSHE 相关数据
没有 000621.XSHE 相关数据
没有 000653.XSHE 相关数据
没有 000658.XSHE 相关数据
没有 000660.XSHE 相关数据
没有 000675.XSHE 相关数据
没有 000689.XSHE 相关数据
没有 000730.XSHE 相关数据
没有 600625.XSHG 相关数据
没有 600632.XSHG 相关数据
没有 600646.XSHG 相关数据
没有 600669.XSHG 相关数据
没有 600670.XSHG 相关数据
没有 600709.XSHG 相关数据
没有 600813.XSHG 相关数据
没有 600878.XSHG 相关数据

In [ ]:
%load_ext rqalpha.mod.rqalpha_mod_alphaStar_factors
%evaluate -s 20170101 -e 20170131 -f ./testFactor.ipynb -rt r --config ../config_factor.yml