量化交易 米筐 财务数据与定时器

获取财务数据(基本面数据)

get_fundamentals 查询财务数据,基本命数据,公司的数据(即将废弃)

4、 get_factor() 获取因子

说明文档地址

用途:查询财务数据

  • 回测的时候、主要拿来选股
  • 400多种 财务指标
# 获取股票截止 T-1 日的因子数据
get_factor(order_book_ids, factors,count=1,universe=None,expect_df=False)
参数 类型 说明
order_book_ids str or str list 合约代码,可传入 order_book_id, order_book_id list
factors str or str list 因子名称,可查询 rqdatac.get_all_factor_names() 得到所有有效因子字段
count int 默认为 1,获取多少个交易日的数据
universe str 当获取界面因子时,universe 指定了因子计算时的股票池
expect_df bool 默认为 False,当设置为 True 时,返回 multi-index DataFrame。

指标(因子)地址

  • 股票池获取

    index_components(order_book_id, date=None)
    
    stocks = all_instruments(type='CS').order_book_id # 所有股票
    stocks = index_components('000300.XSHG') # 沪深300
    # 股票池
    logger.info('stocks:{}'.format(stocks)) 
    logger.info('len:{}'.format(len(stocks)))
    context.stocks = stocks
    
  • 因子过滤

    # 获取财务数据
    # pe_ratio 获取市盈率因子 如果是单个数据则表现为 panel
    # 多个因子 结果为 dataFrame
    fund = get_factor(context.stocks, ['pe_ratio', 'pcf_ratio'])

    # 过滤  指标pe_ratio > 20 并且 pcf_ratio < 50
    fund = fund[(fund['pe_ratio'] > 20) &  (fund['pcf_ratio'] < 50)]
  • 排序
    # 排序
    fund = fund.sort_values(by='pe_ratio', ascending=True) # 升序排序
  • 限制个数
	# 个数限制
    fund = fund.head(10)
    # logger.info('fund01:\n{}'.format(fund))

获取财务数据,获取因子、排序、获取股票代码列表

# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    # 在context中保存全局变量
    context.s1 = "000001.XSHE"
    # 实时打印日志
    logger.info("RunInfo: {}".format(context.run_info))

    
    stocks = all_instruments(type='CS').order_book_id # 所有股票
    stocks = index_components('000300.XSHG') # 沪深300
    # 股票池
    logger.info('stocks:{}'.format(stocks)) 
    logger.info('len:{}'.format(len(stocks)))
    context.stocks = stocks

# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):

    # 获取财务数据
    # pe_ratio 获取市盈率因子 如果是单个数据则表现为 panel
    # 多个因子 结果为 dataFrame
    fund = get_factor(context.stocks, ['pe_ratio', 'pcf_ratio'])

    # 过滤  指标pe_ratio > 20 并且 pcf_ratio < 50
    fund = fund[(fund['pe_ratio'] > 20) &  (fund['pcf_ratio'] < 50)]

    # 排序
    fund = fund.sort_values(by='pe_ratio', ascending=True) # 升序排序

    # 个数限制
    fund = fund.head(10)
    # logger.info('fund01:\n{}'.format(fund))

    # 丢弃日期列
    fund = fund.reset_index(1, drop=True)
    logger.info('fund:\n{}'.format(fund))

    # 挑选后的股票代码
    stock_list = fund.index.values
    update_universe(fund.index.values)
    
    logger.info('stock_list:\n{}'.format(stock_list))



# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
    # 开始编写你的主要的算法逻辑
    pass

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
    pass

5、定时器

官方文档

通过财务数据选股票、不用每天获取、一般每隔一个星期、一个月定期获取一些符合条件的股票

只能在init中使用

  • scheduler.run_daily --每天运行
  • scheduler.run_weekly–每周运行
  • scheduler.run_monthly --每月运行

5.1 每月运行

scheduler.run_monthly(function, tradingday=t)

参数

参数 类型 注释
function function 使传入的function每日交易开始前运行。注意,function 函数一定要包含(并且只能包含)context, bar_dict 两个输入参数
tradingday int 范围为[-23,1], [1,23] ,例如,1 代表每月第一个交易日,-1 代表每月倒数第一个交易日,用户必须指定

function 函数一定要包含 context, bar_dict两个输入参数

tradingday [-23, 1] [1, 23] 1代表每月第一个交易日, -1 代表每月倒数第一个交易日

def init(context):
    # 定义按月运行 定时器
	scheduler.run_monthly(get_data, tradingday=1)

# 参数必须符合
def get_data(context, bar_dict):
	# 这里按月查询财务数据
	q = query(fundamentals.eod_derivative_indicator.pb_ratio
	).filter(fundamentals.eod_derivative_indicator.pb_ratio > 10
	).filter(fundamentals.stockcode.in_(context.index_list))
	
    fund =get_fundamentals(q)
    
	logger.info(fund.T)

运行顺序

  • 按月:2月 2月1日假设第一个交易日
    • 2月1日,运行顺序 before_trading ==> get_data ==> handle_bar
    • 2月其它日期 运行顺序 before_trading ==> handle_bar
#scheduler调用的函数需要包括context, bar_dict两个参数
def query_fundamental(context, bar_dict):
        # 查询revenue前十名的公司的股票并且他们的pe_ratio在25和30之间。
    stocks = all_instruments('CS').order_book_id
    fundamental_df = get_factor(stocks, ['pe_ratio', 'revenue'])
    fundamental_df = fundamental_df[(fundamental_df['pe_ratio'] > 25) & (fundamental_df['pe_ratio'] < 30)]
    fundamental_df = fundamental_df.sort_values(by='revenue', ascending=False).head(10).reset_index(1, drop=True)


    # 将查询结果dataframe的fundamental_df存放在context里面以备后面只需:
    context.fundamental_df = fundamental_df

    # 实时打印日志看下查询结果,会有我们精心处理的数据表格显示:
    logger.info(context.fundamental_df)
    update_universe(context.fundamental_df.index.values)

 # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
	# 每月的第一个交易日查询以下财务数据,以确保可以拿到最新更新的财务数据信息用来调整仓位
	scheduler.run_monthly(query_fundamental, tradingday=1)
上一篇:R语言分析代码


下一篇:MariaDB练习