学习视频来源B站:[link] https://www.bilibili.com/video/av55456917?t=566&p=17
Python机器学习与量化交易
——————————————————
照着视频码出来的原代码是这样的:
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
# 在HS300,选出市值比较小的10只股票。
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
context.hs300 = index_components("000300.XSHG")
# before_trading此函数会在每天交易开始前被调用,当天只会被调用一次
def before_trading(context):
# 获取过滤的股票
q = query(
fundamentals.eod_derivative_indicator.market_cap
).order_by(
fundamentals.eod_derivative_indicator.market_cap
).filter(
fundamentals.stockcode.in_(context.hs300)
).limit(20)
fund = get_fundamentals()
# 获得10只股票的名字
context.stock_list = fund.T.index
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
# # 开始编写你的主要的算法逻辑
# # bar_dict[order_book_id] 可以拿到某个证券的bar信息
# # context.portfolio 可以拿到现在总的投资组合信息
# # TODO: 开始编写你的算法吧!
# 卖出
# 去positions里面获取仓位
for stock in context.portfolio.positions.keys():
if stock not in context.stock_list:
order_target_percent(stock,0)
# 买入
for stock in context.stock_list:
order_target_percent(stock,1.0/20)
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
pass
“编译策略”运行,报错(下图):
提示line26,就去看了下。
发现前面定义了 q = query(…),却没赋值进 fund。所以,把
fund = get_fundamentals()
改成了
fund = get_fundamentals(q)
再编译一次。这次就编译出来了(下图)。
比较顺利。完。