Closed cnmike closed 7 years ago
@cnmike 请贴一下配置信息和简易可复现问题的策略代码,我们好查询问题
from rqalpha.api import *
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
logger.info("init")
context.s1 = "000300.XSHG"
context.s2 = "AU1702"
context.s3 = "FU1702"
update_universe(context.s1)
subscribe(context.s2)
subscribe(context.s3)
# 是否已发送了order
context.fired = False
def before_trading(context):
pass
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
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:
# order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
order_percent(context.s1, 1)
buy_open(context.s2, 1)
buy_open(context.s3, 1)
context.fired = True
__config__ = {
"base": {
"securities": ["future","stock"],
"start_date": "2016-06-01",
"end_date": "2017-01-01",
"frequency": "1d",
"stock_starting_cash": 1000000,
"future_starting_cash": 1000000,
"benchmark": "000300.XSHG",
},
"extra": {
"log_level": "debug",
},
"mod": {
"sys_progress": {
"enabled": True,
"show": True,
},
"sys_simulation": {
"commission_multiplier": 0.01,
"matching_type": "next_bar",
}
},
}
@cnmike 我在本地测试是没问题的啊。你在 handle_bar
输出一下 positions 查看一下
def handle_bar(context, bar_dict):
if not context.fired:
# order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
order_percent(context.s1, 1)
buy_open(context.s2, 1)
buy_open(context.s3, 1)
context.fired = True
logger.info(context.portfolio.positions.keys())
我这边的输出结果:
这里就有问题,为什么2016-06-01号打出来的context.portfolio.positions.keys()),只有一支股票
2016-06-01打印只有一只股票,但是数量是0,实际上是没有仓位的。因为你设置的是 next_bar 撮合。develop 分支去掉了这个0仓位
@cnmike 我只是举个例子 说明的是可以同时交易股票和期货的。你自己测试一下就知道了。这个不算是Bug,如果选择next_bar 的撮合方式,当前创建订单以后中会生成持仓为0的Position, 所以logger.info(context.portfolio.positions.keys())
会输出股票的key。
你的主要问题不是只能购买期货,不能交易股票吗?
主要问题是购买期货和交易股票,但是没办法出回测结果
无法复现,关闭此issue
"securities": ["stock", "future"],设置了,但是只生效期货,股票就没办法交易