VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 9
声望: 0

加载数据回放

engine.load_data()
engine.run_backtesting()
2025-04-26 21:06:20.086947 开始加载历史数据
2025-04-26 21:06:20.109975 i99.DCE加载进度: [6%]
2025-04-26 21:06:20.110426 i99.DCE加载进度:# [12%]
2025-04-26 21:06:20.110815 i99.DCE加载进度:# [19%]
2025-04-26 21:06:20.111204 i99.DCE加载进度:## [25%]
2025-04-26 21:06:20.111583 i99.DCE加载进度:### [31%]
2025-04-26 21:06:20.111987 i99.DCE加载进度:### [38%]
2025-04-26 21:06:20.112458 i99.DCE加载进度:#### [44%]
2025-04-26 21:06:20.112826 i99.DCE加载进度:##### [50%]
2025-04-26 21:06:20.113173 i99.DCE加载进度:##### [56%]
2025-04-26 21:06:20.113530 i99.DCE加载进度:###### [62%]
2025-04-26 21:06:20.113877 i99.DCE加载进度:###### [69%]
2025-04-26 21:06:20.114524 i99.DCE加载进度:####### [75%]
2025-04-26 21:06:20.114994 i99.DCE加载进度:######## [81%]
2025-04-26 21:06:20.115374 i99.DCE加载进度:######## [88%]
2025-04-26 21:06:20.115727 i99.DCE加载进度:######### [94%]
2025-04-26 21:06:20.116070 i99.DCE加载进度:########## [100%]
2025-04-26 21:06:20.118820 i99.DCE历史数据加载完成,数据量:0
2025-04-26 21:06:20.118850 所有历史数据加载完成
2025-04-26 21:06:20.118950 策略初始化完成
2025-04-26 21:06:20.118960 开始回放历史数据
2025-04-26 21:06:20.118966 历史数据回放结束
在回测界面是可以加载数据的,但在投研模块就不行,不知道为什么?代码是用的教程提供的代码。

Member
avatar
加入于:
帖子: 1870
声望: 142

【回测界面可以加载数据】,这个截图看下?

Member
avatar
加入于:
帖子: 9
声望: 0

KeyError Traceback (most recent call last)
Cell In[4], line 1
----> 1 run_backtesting(TurtleLimitSignal)

Cell In[3], line 28, in run_backtesting(strategy_class)
25 engine.load_data()
26 engine.run_backtesting()
---> 28 df = engine.calculate_result()
29 engine.calculate_statistics()
30 engine.show_chart()

File C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\backtesting.py:288, in BacktestingEngine.calculate_result(self)
285 for key, value in daily_result.dict.items():
286 results[key].append(value)
--> 288 self.daily_df = DataFrame.from_dict(results).setindex("date")
290 self.output(
("逐日盯市盈亏计算完成"))
291 return self.daily_df

File C:\veighna_studio\Lib\site-packages\pandas\core\frame.py:6122, in DataFrame.set_index(self, keys, drop, append, inplace, verify_integrity)
6119 missing.append(col)
6121 if missing:
-> 6122 raise KeyError(f"None of {missing} are in the columns")
6124 if inplace:
6125 frame = self

KeyError: "None of ['date'] are in the columns"

Member
avatar
加入于:
帖子: 9
声望: 0

是不能直接在投研上下载数据吗?要在哪里下载?

Member
avatar
加入于:
帖子: 5465
声望: 333

瑞燕 wrote:

KeyError Traceback (most recent call last)
Cell In[4], line 1
----> 1 run_backtesting(TurtleLimitSignal)

Cell In[3], line 28, in run_backtesting(strategy_class)
25 engine.load_data()
26 engine.run_backtesting()
---> 28 df = engine.calculate_result()
29 engine.calculate_statistics()
30 engine.show_chart()

File C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\backtesting.py:288, in BacktestingEngine.calculate_result(self)
285 for key, value in daily_result.dict.items():
286 results[key].append(value)
--> 288 self.daily_df = DataFrame.from_dict(results).setindex("date")
290 self.output(
("逐日盯市盈亏计算完成"))
291 return self.daily_df

File C:\veighna_studio\Lib\site-packages\pandas\core\frame.py:6122, in DataFrame.set_index(self, keys, drop, append, inplace, verify_integrity)
6119 missing.append(col)
6121 if missing:
-> 6122 raise KeyError(f"None of {missing} are in the columns")
6124 if inplace:
6125 frame = self

KeyError: "None of ['date'] are in the columns"
"None of ['date'] are in the columns"是没有成交记录

Member
avatar
加入于:
帖子: 5465
声望: 333

瑞燕 wrote:

是不能直接在投研上下载数据吗?要在哪里下载?
是用的哪个模块下载数据(ctabacktester/datamanager)
用什么方式回测的(图形界面/jupyter)

Member
avatar
加入于:
帖子: 9
声望: 0

是海龟策略第43节课的代码,用的投研里的jupyter界面

重载策略模块代码

from datetime import datetime

from vnpy_portfoliostrategy.backtesting import BacktestingEngine, Interval

from backtesting import BacktestingEngine, Interval

import turtle_strategy
import importlib
importlib.reload(turtle_strategy)

TurtleStrategy = turtle_strategy.TurtleStrategy

读取指数合约乘数

import pandas as pd

df: pd.DataFrame = pd.read_csv("index_contract.csv")

contract_sizes = {}

for _, row in df.iterrows():
if "CFFEX" in row.vt_symbol or "CZCE" in row.vt_symbol:
vt_symbol = row.vt_symbol.upper()
else:
vt_symbol = row.vt_symbol

contract_sizes[vt_symbol] = row.contract_size

创建回测引擎

engine = BacktestingEngine()

配置合约信息

vt_symbols = [
"i99.DCE", "j99.DCE", "j$9.DCE", "rb99.SHFE", "hc99.SHFE",
"TA99.CZCE", "pp99.DCE", "eb99.DCE",
"CF99.CZCE", "ru99.SHFE", "sp99.SHFE",
"SM99.CZCE", "al99.SHFE",
"SC99.INE", "ZC99.CZCE",
"IF99.CFFEX"
]
rates = {s: 0.001 for s in vt_symbols}
slippages = {s: 0 for s in vt_symbols}
sizes = {s: contract_sizes[s] for s in vt_symbols}
priceticks = {s: 0.01 for s in vt_symbols}

设置回测参数

engine.set_parameters(
vt_symbols=vt_symbols,
interval=Interval.MINUTE,
start=datetime(2020, 1, 1),
end=datetime(2025, 4, 25),
rates=rates,
slippages=slippages,
sizes=sizes,
priceticks=priceticks,
capital=10_000_000,
)

添加策略实例

engine.add_strategy(TurtleStrategy, {})

加载数据回放

engine.load_data()
engine.run_backtesting()

Super Moderator
avatar
加入于:
帖子: 85
声望: 8

1. 确认是否通过图形界面下载数据

  • 如果你是通过VeighNa Trader的图形界面下载的历史数据,可以通过DataManager模块查看已下载的数据,确保数据下载成功且没有报错。

2. 确认图形界面和Jupyter的启动目录是否一致

  • VeighNa Trader默认将数据存储在运行时目录下(通常是C:\Users\你的用户名\.vntrader),而Jupyter Notebook的启动目录可能不同。如果两者启动目录不一致,Jupyter将无法读取到图形界面下载的数据。
  • 解决方法
    1. 在Jupyter中检查当前工作目录:
      import os
      print(os.getcwd())
      
    2. 如果目录不一致,切换到VeighNa Trader的运行时目录:
      os.chdir("C:\\Users\\你的用户名\\.vntrader")
      

希望这个回答能帮助你解决问题!如果还有其他疑问,欢迎随时提问。

Member
avatar
加入于:
帖子: 9
声望: 0

是一定要先在图形界面下载历史数据吗?不能直接在投研下的jupyter用代码下载?

Member
avatar
加入于:
帖子: 1870
声望: 142

https://github.com/vnpy/vnpy/blob/dev/examples/download_bars/download_bars.ipynb

看这里的DEMO吧

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】