在jupyter里使用get_price报错,
TypeError Traceback (most recent call last)
Cell In[9], line 1
----> 1 rb888_raw = rqdatac.get_price('RB888', '20230301', '20230331', '1m')
File c:\veighna_studio\lib\site-packages\rqdatac\decorators.py:150, in compatible_with_parm..wrap(args, **kwargs)
148 if item != value:
149 raise ValueError("'{}': except '{}', got '{}'".format(name, value, item))
--> 150 return func(args, **kwargs)
File c:\veighna_studio\lib\site-packages\rqdatac\services\get_price.py:86, in get_price(order_book_ids, start_date, end_date, frequency, fields, adjust_type, skip_suspended, expect_df, time_slice, market, kwargs)
83 raise ValueError("time_slice: invalid, expect tuple or list value like ('09:55', '10:11'), got {}".format(time_slice))
84 start, end = to_time(time_slice[0]), to_time(time_slice[1])
---> 86 df = _get_price(
87 order_book_ids, start_date, end_date, frequency,
88 fields, adjust_type, skip_suspended, expect_df, market, kwargs
89 )
91 if df is None or not sliceable or not time_slice:
92 # 非tick、minbar或者不指定切片时间,直接返回
93 return df
File c:\veighna_studio\lib\site-packages\rqdatac\decorators.py:67, in retry..decorate..wrap(args, **kwargs)
65 while c > 0:
66 try:
---> 67 return func(args, **kwargs)
...
4129 )
4130 indexer = key
4131 else:
TypeError: Slicing a positional slice with .loc is not allowed, Use .loc with labels or .iloc with positions instead.
以前也用get_price,没出现过这个问题,不知道为什么现在会报错。现在使用query_bar_history则不报错,照道理query_bar_history里也调用get_price了,问什么会出现这种情况呢
刚刚试了一下,user那里填组织的名称,password那里填token,就能下载录入数据了。
另外请教两个问题:
1.windows上,如何查看数据存储的物理位置呢,用户目录下好像没有找到对应的bucket。
2.Dbeaver尝试连接influxdb后,无法查看到里面下载的数据?
配置完influxdb后,下载数据时出现以下报错`Traceback (most recent call last):
File "C:\veighna_studio\lib\site-packages\vnpy_datamanager\ui\widget.py", line 620, in download
count: int = self.engine.download_bar_data(symbol, exchange, interval, start, self.output)
File "C:\veighna_studio\lib\site-packages\vnpy_datamanager\engine.py", line 215, in download_bar_data
self.database.save_bar_data(data)
File "C:\veighna_studio\lib\site-packages\vnpy_influxdb\influxdb_database.py", line 94, in save_bar_data
self.write_api.write(
File "C:\veighna_studio\lib\site-packages\influxdb_client\client\write_api.py", line 378, in write
results = list(map(write_payload, payloads.items()))
File "C:\veighna_studio\lib\site-packages\influxdb_client\client\write_api.py", line 376, in write_payload
return self._post_write(_async_req, bucket, org, final_string, payload[0])
File "C:\veighna_studio\lib\site-packages\influxdb_client\client\write_api.py", line 509, in _post_write
return self._write_service.post_write(org=org, bucket=bucket, body=body, precision=precision,
File "C:\veighna_studio\lib\site-packages\influxdb_client\service\write_service.py", line 60, in post_write
(data) = self.post_write_with_http_info(org, bucket, body, **kwargs) # noqa: E501
File "C:\veighna_studio\lib\site-packages\influxdb_client\service\write_service.py", line 90, in post_write_with_http_info
return self.api_client.call_api(
File "C:\veighna_studio\lib\site-packages\influxdb_client_sync\api_client.py", line 343, in call_api
return self.call_api(resource_path, method,
File "C:\veighna_studio\lib\site-packages\influxdb_client_sync\api_client.py", line 173, in call_api
response_data = self.request(
File "C:\veighna_studio\lib\site-packages\influxdb_client_sync\api_client.py", line 388, in request
return self.rest_client.POST(url,
File "C:\veighna_studio\lib\site-packages\influxdb_client_sync\rest.py", line 311, in POST
return self.request("POST", url,
File "C:\veighna_studio\lib\site-packages\influxdb_client_sync\rest.py", line 261, in request
raise ApiException(http_resp=r)
influxdb_client.rest.ApiException: (401)
Reason: Unauthorized
HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json; charset=utf-8', 'X-Influxdb-Build': 'OSS', 'X-Influxdb-Version': 'v2.7.0', 'X-Platform-Error-Code': 'unauthorized', 'Date': 'Sat, 10 Jun 2023 16:20:33 GMT', 'Content-Length': '55', 'Connection': 'close'})
HTTP response body: {"code":"unauthorized","message":"unauthorized access"}
`
是token没有配置的原因吗,该如何解决呢
MTF wrote:
一个是通用事件推送,一个是特定类型事件推送。
某些上层APP模块是依赖后者的,来提高应用引擎处理效率
请问某些上层APP是指什么,能举些例子吗
请教一下,我看on_tick,on_trade,on_order等等里面都有两个self.on_event(),请问为什么需要两个呢,我交易某个合约的话只保留第二个(里面有vt_symbol)的那个行不行?没太理解为什么要这样设计。
有几个不太理解的地方
第一个是
elif ((self.bar.datetime.minute != tick.datetime.minute) or (self.bar.datetime.hour != tick.datetime.hour)): #???
self.bar.datetime = self.bar.datetime.replace(second=0, microsecond=0)
self.on_bar(self.bar) #推送处理合成好的K线
new_minute = True
这里既然比较了分钟,为什么还要比较小时呢?这样做的意义在哪?
第二个问题是
self.bar.high_price = max(self.bar.high_price, tick.last_price)#???
if tick.high_price > self.last_tick.high_price:
self.bar.high_price = max(self.bar.high_price, tick.high_price)
self.bar.low_price = min(self.bar.low_price, tick.last_price)
if tick.low_price < self.last_tick.low_price:
self.bar.low_price = min(self.bar.low_price, tick.low_price)
为什么不直接max(self.bar.high_price, tick.high_price)呢
我在bargenerator里写了个时间判断的方法,想用tick.symbol来判断是不是螺纹,等号后面应该是rb还是RB呢?数据服务商用的是米筐,对这里会有影响吗?
def tradetime(self, exchange: Exchange, tick: TickData) -> bool:
if exchange == Exchange.SHFE:
if re.findall('[a-zA-Z]+', tick.symbol)[0] == "rb":
if (
时间部分
):
return True
请问应该添加在哪里呢
xiaohe wrote:
可以用ctabacktester下载指定时间段的数据
非常感谢,已经能下载指定时间段了,不过又有了两个新问题:
1-我当时想把tick数据存在另一个数据库里,于是用sqlitestudio新建了一个名为database_tick.db的数据库,veighna全局配置里也改了这个名字,也重启了,但为什么下载的时候还是下载到了原有默认的database.db里?
2-重复下载某一个时间段的数据,似乎不会检查数据是否重复,而是直接添加到后面,这样会对回测结果产生影响么?
MTF wrote:
DataManager没有提供Tick数据的查看功能(因为数量太大了,UI会卡死),可以直接通过开发接口访问,大概如下:
from vnpy.trader.database import get_database db = get_database() ticks = db.load_tick_data(xxx)
其中xxx是你要加载的数据参数(代码、交易所、开始、结束)
感谢解惑~
再请教一个问题:请问有没有办法只下载某一时间段的数据,vnpy好像默认结束日期为当前日期
使用米筐下载了tick数据,但是在数据管理那里看不了tick的数据,请问怎么查看并且导出成csv呢?数据库用的默认的sqlite
xiaohe wrote:
只是举个例子:
from datetime import time tick1 = time(hour=9, minute=0, microsecond=0) tick2 = time(hour=9, minute=0, microsecond=500) def on_tick(self, tick: TickData): if tick.datetime.time() == tick1: xxx if tick.datetime.time() == tick2: xxx
之后有问题建议还是单独开新帖吧
非常感谢!
郭易燔 wrote:
- portfoliostrategy可以订阅多个标的合约,可以使用指数判断交易方向,然后映射到主力合约进行委托下单。但是,所有的合约需要在策略创建时就确定,中途无法进行修改,并且主力合约需要自行判断
- 无法去掉
你好,请教一下,我想在策略里面储存九点开盘时第一秒的两个tick,
def on_tick(self, tick: TickData):
self.tick_1 = ? self.tick_2 = ?
请问等号后面该怎么写啊
郭易燔 wrote:
- portfoliostrategy可以订阅多个标的合约,可以使用指数判断交易方向,然后映射到主力合约进行委托下单。但是,所有的合约需要在策略创建时就确定,中途无法进行修改,并且主力合约需要自行判断
- 无法去掉
谢谢
郭易燔 wrote:
- 可以查看一下这笔委托的委托价格,可能当前时的bar.close_price不是4043
- 持仓均价是前一交易日结算出来的价格,结算的浮动盈亏反映在结算单里;开仓均价就是你开仓的价格,如果平仓结算,是按开仓均价来结算的。
- 是的
1.请问有没有可能将策略拆分成在指数上做逻辑判断,在主力合约上下单?实现起来复杂么
2.请问能否在打印时,将框中的系统时间去掉
1成交价格和目标价格不一致的疑惑:
bar1的收盘价是4043,bar2的收盘价是4050,我理解的执行逻辑是bar1结束,bar2刚开始走的时候触发了self.buy(bar.close_price + 3, self.fixed_size),也就是希望以4043成交,最多3个滑点(4046)?这样的理解对么?为什么实盘成交价格却是4050呢,盘后回测的时候成交价格也是4043,就算实盘有滑点,也不应该是4050?不太理解
2持仓均价的疑惑:
一笔单子是白天在4050开了一手,右下角那个持仓均价显示的也是4050,但是晚上实盘的时候,持仓均价变成4022了?我查询账单后看到开仓价是4050,昨结算4030,结算价4022,为什么持仓均价会变成结算价呢?盈亏难道不是只和开仓价有关系么?
3self.sell(6000, abs(self.pos), True)的意思是不是价格低于6000就触发停止单卖出?
是不是核数太多了?,能否突破63这个限制呢?
参数优化后,优化结果不显示,station那边显示
另一个问题是云主机上安装veighna后,显示
当时试了下可以回测于是没管这个问题继续跑优化了,这是优化结果导致不显示的原因吗?
该如何解决这两个问题呢
xiaohe wrote:
你on_bar已经收到1分钟的bar了,可以直接用了,不需要update_bar了。
多周期策略请参考vnpy_ctastrategy.strategies里的示例策略multi_timeframe_strategy。
self.bg1.update_tick(tick)
self.bgx.update_tick(tick)
请问这两个都要吗
如图,米框上的RB888数据和快期里看到的数据相差了一千多接近两千,这样应该相信哪个呢?如果回测的话是否有意义呢?数值相差很大的话是不是参数优化时要避开这段时间?