量化选股就是采用数量的方法判断某个公司是否值得买入的行为。根据某个方法,如果该公司满足了该方法的条件,则放入股票池,如果不满足,则从股票池中剔除。量化选股的方法有很多种,总的来说,可以分为公司估值法、趋势法和资金法三大类。
import numpy as np
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
# 查询revenue前十名的公司的股票并且他们的pe_ratio在55和60之间。打fundamentals的时候会有auto-complete方便写查询代码。
fundamental_df = get_fundamentals(
query(
fundamentals.income_statement.revenue, fundamentals.eod_derivative_indicator.pe_ratio
).filter(
fundamentals.eod_derivative_indicator.pe_ratio > 55
).filter(
fundamentals.eod_derivative_indicator.pe_ratio < 60
).order_by(
fundamentals.income_statement.revenue.desc()
).limit(
10
)
)
# 将查询结果dataframe的fundamental_df存放在context里面以备后面只需:
context.fundamental_df = fundamental_df
# 实时打印日志看下查询结果,会有我们精心处理的数据表格显示:
logger.info(context.fundamental_df)
update_universe(context.fundamental_df.columns.values)
# 对于每一个股票按照平均现金买入:
context.stocks = context.fundamental_df.columns.values
stocks_number = len(context.stocks)
context.average_percent = 0.99 / stocks_number
logger.info("Calculated average percent for each stock is: %f" % context.average_percent)
context.fired = False
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
# 开始编写你的主要的算法逻辑
# bar_dict[order_book_id] 可以拿到某个证券的bar信息
# context.portfolio 可以拿到现在的投资组合状态信息
# 使用order_shares(id_or_ins, amount)方法进行落单
# TODO: 开始编写你的算法吧!
# 对于选择出来的股票按照平均比例买入:
if not context.fired:
for stock in context.stocks:
order_target_percent(stock, context.average_percent)
logger.info("Bought: " + str(context.average_percent) + " % for stock: " + str(stock))
context.fired = True
参考资料:McCarthy E. ” Augmented Intelligence”: Combining Human Intelligence and Technology[J]. CFA Institute Magazine, 2017, 28(3).
更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2018 • OmegaXYZ-版权所有 转载请注明出处