谢啦大神,还有一个问题, 在非交易时段, 只要使用 7*24小时的 地址
ctp 和ctptest 都是可以连接上的, 那么他们究竟有啥区别呢?
找到原因了,以上配置 需要在交易时段 才可以连接 。
非交易时间段,需要使用以下地址
7*24小时
180.168.146.187:10130
180.168.146.187:10131
vnpy文档:
用户名username:111111 (6位纯数字账号)
密码password:1111111 (需要修改一次密码用于盘后测试)
经纪商编号brokerid:9999 (SimNow默认经纪商编号)
交易服务器地址td_address:218.202.237.33 :10102 (盘中测试)
行情服务器地址md_address:218.202.237.33 :10112 (盘中测试)
授权码auth_code:0000000000000000(16个0)
名称app_id:simnow_client_test
username:换成 自己注册的simnow的也是一样
我看论坛里面说是写在on_trade里面, 但是demo策略 BollChannelStrategy 是写在on_bar上面. 目前遇到两个问题,请大神不吝赐教!
# 使用bar.close_price 作为当前市价最新价
def on_5min_bar():
self.cancel_all()
if 达到开多条件:
# 计算多单止损和止盈价格, 开多之后下停止委托单
self.long_stop_lose = 开多止损价格
self.long_stop_win = 开多止盈价格
if self.pos == 0:
self.buy(bar.close_price, self.fixed_size)
elif self.pos > 0:
# 开多之后下止盈,止损停止委托单
self.sell(self.long_stop_lose, abs(self.pos), True)
self.sell(self.long_stop_win, abs(self.pos), True)
elif self.pos < 0 :
# 平掉空单
self.cover(bar.close_price, abs(self.pos))
# 开多单
self.buy(self.close_price, self.fixed_size)
if 达到开空条件:
# 计算空单止损和止盈价格, 开空之后下停止委托单
self.short_stop_lose = 空单止损价格
self.short_stop_win = 空单止盈价格
if self.pos == 0:
self.short(bar.close_price, self.fixed_size)
elif self.pos < 0:
# 开空之后下止盈,止损停止委托单
self.cover(self.short_stop_lose, abs(self.pos), True)
self.cover(self.short_stop_win, abs(self.pos), True)
elif self.pos > 0 :
# 平掉多单
self.sell(bar.close_price, abs(self.pos))
# 开空单
self.short(self.close_price, self.fixed_size)
是的,没有任何输出,
不过 问题解决了,问过他们技术支持了, 要先用他们的仿真账号登录, 通过之后才能用正式账号登录!
CTPTEST 下市价单的时候 ,提示 交易委托失败,代码:147 ,信息: CTP: 缺少ExchangeID字段, 请填入ExchangeID
订单状态为 拒单
请教各位大神,这个是什么原因呢?
用Python的交易员 wrote:
检查CTP和CTPTEST不要同时加载(import)
我确定没有同时 import , 下面ctptest 我 都注释了
代码如下:from vnpy.gateway.ctp import CtpGateway # from vnpy.gateway.ctptest import CtptestGateway
如题, 在使用simnow账号 连接CTPTEST 一切正常
但是 使用正式账号和仿真账号 连接CTP 的时候 没有任何反应, 也没有日志输出 . 期货公司那边已经开通了CTP 程序化交易 也拿到了 行情服务器, 交易服务器, 授权编码 brokerid 等信息 , 求助一下各位大神!
确认期货公司使用的 版本是6.3.15
楼上正解, RB88 和当前的主力合约RB1910 获取的数据的确不一样. 省去了3000大洋诶, 谢谢大家的热心回答~
我 换了一个图片地址
部分日志结果:
平空 2019-07-11 20:30:00 11619.0
平空 2019-07-11 20:45:00 11586.5
平空 2019-07-11 21:00:00 11680.0
平空 2019-07-11 21:15:00 11665.5
平空 2019-07-11 21:30:00 11633.0
平空 2019-07-11 21:45:00 11649.0
平空 2019-07-11 22:00:00 11700.5
平空 2019-07-11 22:15:00 11678.5
开多 2019-07-11 22:30:00 11786.5
开多 2019-07-11 22:45:00 11775.0
开多 2019-07-11 23:00:00 11775.5
开多 2019-07-11 23:15:00 11743.5
开空 2019-07-11 23:30:00 11680.0
开空 2019-07-11 23:45:00 11532.0
日志打印出的7月11日有很多次开平仓操作, 但是 实际委托记录上只有1条, 实在弄不明白是什么原因,请大神不吝赐教!
end_date 加1天也没有用, 我加过 ricequant 客服了, 客服说 只有收费版 才提供实时数据, 1.5万/ 每年,不限制流量. vnpy既然接入了rqdata, 应该了解这个收费吧. 所以想跟群主确认一下.
是的 ,用在bitmex btc合约上的, 但是我只是本地回测,这个也跟api不稳定有关吗?
我知道7月15日是收盘了, 但是 7月16日的数据呢?我调接口的时间是7月16日16:13分
如果拿不到当下的最新的数据,那岂不是只能用于回测,不能用于实盘?
df = rq.get_price('RB88', frequency='1m', fields=['open', 'high', 'low', 'close', 'volume'],end_date=datetime.now())
2019-07-15 14:52:00 3985.0 3989.0 3985.0 3987.0 10290.0
2019-07-15 14:53:00 3987.0 3988.0 3987.0 3987.0 4412.0
2019-07-15 14:54:00 3987.0 3992.0 3986.0 3992.0 14592.0
2019-07-15 14:55:00 3991.0 3997.0 3990.0 3996.0 34794.0
2019-07-15 14:56:00 3996.0 4006.0 3996.0 4004.0 78092.0
2019-07-15 14:57:00 4005.0 4009.0 4003.0 4008.0 48942.0
2019-07-15 14:58:00 4008.0 4014.0 4007.0 4013.0 49984.0
2019-07-15 14:59:00 4013.0 4019.0 4013.0 4018.0 46804.0
2019-07-15 15:00:00 4019.0 4031.0 4017.0 4030.0 102240.0
现在是是7月16日16:13分 ,调用以上代码,只能获取到7月15日及以前的数据,如何才能获取 7月16日 16:13分之前的数据?
on_tick() 和 on_bar() 都没写逻辑 ,下单逻辑都是写在 on_15min_bar()中的
def on_tick(self, tick: TickData):
"""
Callback of new tick data update.
"""
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
self.bg.update_bar(bar)
def on_15min_bar(self, bar: BarData):
""""""
self.cancel_all()
am = self.am
am.update_bar(bar)
if not am.inited:
return
self.boll_up, self.boll_down = am.boll(self.boll_window, self.boll_dev)
self.cci_value = am.cci(self.cci_window)
self.atr_value = am.atr(self.atr_window)
if self.pos == 0:
self.intra_trade_high = bar.high_price
self.intra_trade_low = bar.low_price
if self.cci_value > 0:
print("开多", bar.datetime, bar.close_price)
self.buy(self.boll_up, self.fixed_size, True)
elif self.cci_value < 0:
print("开空", bar.datetime, bar.close_price)
self.short(self.boll_down, self.fixed_size, True)
elif self.pos > 0:
def on_15min_bar(self, bar: BarData):
""""""
self.cancel_all()
am = self.am
am.update_bar(bar)
if not am.inited:
return
但是我有执行 self.cancel_all() 方法进行撤单操作! 为什么没有撤单成功呢?