数据加载

在实盘中,RQData通过实时载入数据进行策略的初始化。该功能主要在CTA实盘引擎engine.py内实现。下面介绍具体流程:

  • 在菜单栏点击“配置”,进入全局配置页面输入RQData账号密码;或者直接配置json文件,即在用户目录下.vntrader文件夹找到vt_setting.json,如图。

enter image title here

  • 初始化RQData客户端:从vt_setting.json中读取RQData的账户、密码到rq_client.init()函数进行初始化
  1. def init_rqdata(self):
  2. """
  3. Init RQData client.
  4. """
  5. username = SETTINGS["rqdata.username"]
  6. password = SETTINGS["rqdata.password"]
  7. if not username or not password:
  8. return
  9.  
  10. import rqdatac
  11.  
  12. self.rq_client = rqdatac
  13. self.rq_client.init(username, password,
  14. ('rqdatad-pro.ricequant.com', 16011))
  • RQData载入实盘数据:输入vt_symbol后,首先会转换成符合RQData格式的rq_symbol,通过get_price()函数下载数据,并且插入到数据库中。
  1. def query_bar_from_rq(
  2. self, vt_symbol: str, interval: Interval, start: datetime, end: datetime
  3. ):
  4. """
  5. Query bar data from RQData.
  6. """
  7. symbol, exchange_str = vt_symbol.split(".")
  8. rq_symbol = to_rq_symbol(vt_symbol)
  9. if rq_symbol not in self.rq_symbols:
  10. return None
  11.  
  12. end += timedelta(1) # For querying night trading period data
  13.  
  14. df = self.rq_client.get_price(
  15. rq_symbol,
  16. frequency=interval.value,
  17. fields=["open", "high", "low", "close", "volume"],
  18. start_date=start,
  19. end_date=end
  20. )
  21.  
  22. data = []
  23. for ix, row in df.iterrows():
  24. bar = BarData(
  25. symbol=symbol,
  26. exchange=Exchange(exchange_str),
  27. interval=interval,
  28. datetime=row.name.to_pydatetime(),
  29. open_price=row["open"],
  30. high_price=row["high"],
  31. low_price=row["low"],
  32. close_price=row["close"],
  33. volume=row["volume"],
  34. gateway_name="RQ"
  35. )
  36. data.append(bar)