Traceback (most recent call last):
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 3144, in execute_sql
cursor.execute(sql, params or ())
sqlite3.OperationalError: table dbbardata has no column named turnover
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/root/miniconda3/lib/python3.7/site-packages/vnpy/app/data_recorder/ui/widget.py", line 155, in process_exception_event
raise exc_info[1].with_traceback(exc_info[2])
File "/root/miniconda3/lib/python3.7/site-packages/vnpy/app/data_recorder/engine.py", line 82, in run
database_manager.save_bar_data(data)
File "/root/miniconda3/lib/python3.7/site-packages/vnpy/database/sqlite/sqlite_database.py", line 160, in save_bar_data
DbBarData.insert_many(c).on_conflict_replace().execute()
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 1907, in inner
return method(self, database, args, **kwargs)
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 1978, in execute
return self._execute(database)
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 2745, in _execute
return super(Insert, self)._execute(database)
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 2474, in _execute
cursor = database.execute(self)
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 3157, in execute
return self.execute_sql(sql, params, commit=commit)
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 3151, in execute_sql
self.commit()
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 2917, in exit
reraise(new_type, new_type(exc_value, exc_args), traceback)
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 190, in reraise
raise value.with_traceback(tb)
File "/root/miniconda3/lib/python3.7/site-packages/peewee.py", line 3144, in execute_sql
cursor.execute(sql, params or ())
peewee.OperationalError: table dbbardata has no column named turnover
base) root@linux-yuanhui:~/vnpy/vnpy-2.5.0/examples/vn_trader# python run.py
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
Aborted (core dumped)
可能是什么原因
Building wheels for collected packages: vnpy
Building wheel for vnpy (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: /root/miniconda3/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-6j86cjas/setup.py'"'"'; file='"'"'/tmp/pip-req-build-6j86cjas/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdistwheel -d /tmp/pip-wheel-vk1cbhg
cwd: /tmp/pip-req-build-6j86cjas/
Complete output (1877 lines):
/root/miniconda3/lib/python3.7/site-packages/psycopg2/init.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: http://initd.org/psycopg/docs/install.html#binary-install-from-pypi.
""")
/root/miniconda3/lib/python3.7/site-packages/setuptools/dist.py:717: UserWarning: Usage of dash-separated 'index-url' will not be supported in future versions. Please use the underscore name 'index_url' instead
% (opt, underscore_opt)
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.7
creating build/lib.linux-x86_64-3.7/vnpy
copying vnpy/init.py -> build/lib.linux-x86_64-3.7/vnpy
creating build/lib.linux-x86_64-3.7/vnpy/app
copying vnpy/app/init.py -> build/lib.linux-x86_64-3.7/vnpy/app
creating build/lib.linux-x86_64-3.7/vnpy/event
copying vnpy/event/init.py -> build/lib.linux-x86_64-3.7/vnpy/event
copying vnpy/event/engine.py -> build/lib.linux-x86_64-3.7/vnpy/event
creating build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/converter.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/database.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/setting.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/init.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/rqdata.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/event.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/engine.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/utility.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/gateway.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/constant.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/app.py -> build/lib.linux-x86_64-3.7/vnpy/trader
copying vnpy/trader/object.py -> build/lib.linux-x86_64-3.7/vnpy/trader
creating build/lib.linux-x86_64-3.7/vnpy/chart
copying vnpy/chart/init.py -> build/lib.linux-x86_64-3.7/vnpy/chart
copying vnpy/chart/item.py -> build/lib.linux-x86_64-3.7/vnpy/chart
copying vnpy/chart/manager.py -> build/lib.linux-x86_64-3.7/vnpy/chart
copying vnpy/chart/axis.py -> build/lib.linux-x86_64-3.7/vnpy/chart
copying vnpy/chart/base.py -> build/lib.linux-x86_64-3.7/vnpy/chart
copying vnpy/chart/widget.py -> build/lib.linux-x86_64-3.7/vnpy/chart
creating build/lib.linux-x86_64-3.7/vnpy/api
copying vnpy/api/init.py -> build/lib.linux-x86_64-3.7/vnpy/api
creating build/lib.linux-x86_64-3.7/vnpy/rpc
copying vnpy/rpc/init.py -> build/lib.linux-x86_64-3.7/vnpy/rpc
creating build/lib.linux-x86_64-3.7/vnpy/gateway
copying vnpy/gateway/init.py -> build/lib.linux-x86_64-3.7/vnpy/gateway
creating build/lib.linux-x86_64-3.7/vnpy/database
copying vnpy/database/init.py -> build/lib.linux-x86_64-3.7/vnpy/database
creating build/lib.linux-x86_64-3.7/vnpy/app/risk_manager
copying vnpy/app/risk_manager/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/risk_manager
copying vnpy/app/risk_manager/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/risk_manager
creating build/lib.linux-x86_64-3.7/vnpy/app/option_master
copying vnpy/app/option_master/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/option_master
copying vnpy/app/option_master/time.py -> build/lib.linux-x86_64-3.7/vnpy/app/option_master
copying vnpy/app/option_master/base.py -> build/lib.linux-x86_64-3.7/vnpy/app/option_master
copying vnpy/app/option_master/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/option_master
copying vnpy/app/option_master/algo.py -> build/lib.linux-x86_64-3.7/vnpy/app/option_master
creating build/lib.linux-x86_64-3.7/vnpy/app/rpc_service
copying vnpy/app/rpc_service/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/rpc_service
copying vnpy/app/rpc_service/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/rpc_service
creating build/lib.linux-x86_64-3.7/vnpy/app/market_radar
copying vnpy/app/market_radar/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/market_radar
copying vnpy/app/market_radar/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/market_radar
creating build/lib.linux-x86_64-3.7/vnpy/app/portfolio_manager
copying vnpy/app/portfolio_manager/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/portfolio_manager
copying vnpy/app/portfolio_manager/base.py -> build/lib.linux-x86_64-3.7/vnpy/app/portfolio_manager
copying vnpy/app/portfolio_manager/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/portfolio_manager
creating build/lib.linux-x86_64-3.7/vnpy/app/script_trader
copying vnpy/app/script_trader/cli.py -> build/lib.linux-x86_64-3.7/vnpy/app/script_trader
copying vnpy/app/script_trader/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/script_trader
copying vnpy/app/script_trader/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/script_trader
creating build/lib.linux-x86_64-3.7/vnpy/app/cta_backtester
copying vnpy/app/cta_backtester/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/cta_backtester
copying vnpy/app/cta_backtester/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/cta_backtester
creating build/lib.linux-x86_64-3.7/vnpy/app/paper_account
copying vnpy/app/paper_account/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/paper_account
copying vnpy/app/paper_account/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/paper_account
creating build/lib.linux-x86_64-3.7/vnpy/app/chart_wizard
copying vnpy/app/chart_wizard/init.py -> build/lib.linux-x86_64-3.7/vnpy/app/chart_wizard
copying vnpy/app/chart_wizard/engine.py -> build/lib.linux-x86_64-3.7/vnpy/app/chart_wizard
我看功能介绍算法交易是对交易的标的直接指定操作。
可以在策略中应用算法交易吗,事先配置好后在策略中下单的时候直接执行。
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol="j99.DCE",
#橡胶ru99.CFFEX,焦炭j99.DCE,螺纹钢rb888.SHFE,铜cu888.SHFE,鸡蛋jd99.DCE,铁矿石i99.DCE,豆粕$9.CFFEX,玉米c99.DCE
#郑醇ma99.CZCE,pp99.DCE,pvc99.DCE,pta99.CZCE,al99.SHFE,zn99.SHFE
interval="1m",
start=datetime(2010, 1, 16),
end=datetime(2014, 5, 16),
rate=0.3/10000,
slippage=1,
size=10,
pricetick=0.2,
capital=1_000_000,
)
engine.add_strategy(RBreakStrategy, {})
engine.load_data()
engine.run_backtesting()
df = engine.calculate_result()
engine.calculate_statistics()
engine.show_chart()、
CtaEngine中下面这个OffsetConverter是干嘛的,没有注释,只能靠猜。是不是开平标识,有些不一致,需要转换。能否解释一下。
self.offset_converter = OffsetConverter(self.main_engine)
群主写代码,一点注释的习惯都没有,其实只要写几个字,就不用猜来猜去了。有些自己写代码,过久了,没有注释,自己想都挺费劲的。
是我没看清,还是VNPY就是这么处理的。
隔夜策略,单子的止损单,在收盘后交易所没有了,我看了下VNPY也没有保存下来下次开盘的时候再发。这样会导致一个问题,下次开盘的时候,单子是没有止损的。
需要等到on_window_bar函数触发之后,计算后重新发出。例如15分钟的策略,需要等到9:15触发的时候才能计算,并重新发止损。
这开盘到15分钟满,是没有止损设置的。这是算是一个bug吗,我看文档里面都没写需要在策略里面自己处理这一部分。
1.第一个疑问,下面是update_tick函数中把tick更新到bar数据中的部分,最高价和最低价,为什么不是直接比较当前bar的最高最低价和tick最高最低价的比较,而是
还要比较上一个tick
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)
2.还是这个函数,在更新bar的成交量时候,为什么不是直接累加上新tick的成交量,还要和上一次做差值,再和0比较取最大的加上去
double volume_change = tickData->volume - m_lastTick->volume;
m_Bar->volume= m_Bar->volume+std::max(volume_change, 0.0);
下面这个generate_trade_pairs应该是生成交易对的,没完全看明白,程序是怎么判断两个交易是一对的。如果有加仓,开和平仓并不是相邻的,显示会不会有BUG。
因为我编写的策略有加仓,感觉显示出来的交易对有问题
\vnpy\app\cta_backtester\ui\widget.py
def generate_trade_pairs(trades: list) -> list:
""""""
long_trades = []
short_trades = []
trade_pairs = []
for trade in trades:
trade = copy(trade)
if trade.direction == Direction.LONG:
same_direction = long_trades
opposite_direction = short_trades
else:
same_direction = short_trades
opposite_direction = long_trades
while trade.volume and opposite_direction:
open_trade = opposite_direction[0]
close_volume = min(open_trade.volume, trade.volume)
d = {
"open_dt": open_trade.datetime,
"open_price": open_trade.price,
"close_dt": trade.datetime,
"close_price": trade.price,
"direction": open_trade.direction,
"volume": close_volume,
}
trade_pairs.append(d)
open_trade.volume -= close_volume
if not open_trade.volume:
opposite_direction.pop(0)
trade.volume -= close_volume
if trade.volume:
same_direction.append(trade)
return trade_pairs
我的笔记本电脑屏幕不大,回测结果有一部分看不到,这个界面可以手工调节大小吗。
在这个类里面
class StatisticsMonitor(QtWidgets.QTableWidget):
调试程序,如下,
orderList=self.buy(self.bollUpDay+self.priceTick, volume, True)
发送的开仓价格是4186 ,
执行上面那条语句后,查看self.active_stop_orders挂单的价格是4190,怎么这么奇怪?就是这个原因导致该成交单子没有成交。
后面会有更改吗
因为是把策略拷贝到专门的目录C:\Users\yuanhui\strategies下面,在vnpy\app\cta_strategy下面的策略文件中设置断点没用了。
请问有什么方法可以来设置调试
这个会是我策略的原因吗?还是bug.

File "c:\Users\yuanh\Documents\GitHub\vnpy\examples\add_by_yh\backtesting_yh.py", line 45, in <module>
engine.run_ga_optimization(setting)
 File "c:\Users\yuanh\Documents\GitHub\vnpy\vnpy\app\cta_strategy\backtesting.py", line 760, in run_gaoptimization
halloffame=hof
File "C:\vnstudio\Lib\site-packages\deap\algorithms.py", line 316, in eaMuPlusLambda
offspring = varOr(population, toolbox, lambda, cxpb, mutpb)
File "C:\vnstudio\Lib\site-packages\deap\algorithms.py", line 234, in varOr
ind1, ind2 = toolbox.mate(ind1, ind2)
File "C:\vnstudio\Lib\site-packages\deap\tools\crossover.py", line 51, in cxTwoPoint
cxpoint2 = random.randint(1, size - 1)
File "C:\vnstudio\Lib\random.py", line 222, in randint
return self.randrange(a, b+1)
File "C:\vnstudio\Lib\random.py", line 200, in randrange
raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
builtins.ValueError: empty range for randrange() (1,1, 0)
浏览器输出:
http://127.0.0.1:57254/
嗯… 无法访问此页面127.0.0.1 已拒绝连接。
在 Web 中搜索 127 0 0 1
ERR_CONNECTION_REFUSED
这是啥原因
于是自己安装plotly,但是总是不成功,是什么原因,如何解决呢?
(VN Studio) C:\vnstudio>pip install plotly==4.14.2
Collecting plotly==4.14.2
Downloading plotly-4.14.2-py2.py3-none-any.whl (13.2 MB)
|█ | 419 kB 2.5 kB/s eta 1:23:32ERROR: Exception:
Traceback (most recent call last):
File "c:\vnstudio\lib\site-packages\pip_vendor\urllib3\response.py", line 438, in _error_catcher
yield
File "c:\vnstudio\lib\site-packages\pip_vendor\urllib3\response.py", line 519, in read
data = self._fp.read(amt) if not fp_closed else b""
File "c:\vnstudio\lib\site-packages\pip_vendor\cachecontrol\filewrapper.py", line 62, in read
data = self.__fp.read(amt)
File "c:\vnstudio\lib\http\client.py", line 447, in read
n = self.readinto(b)
File "c:\vnstudio\lib\http\client.py", line 491, in readinto
n = self.fp.readinto(b)
File "c:\vnstudio\lib\socket.py", line 589, in readinto
return self._sock.recv_into(b)
File "c:\vnstudio\lib\ssl.py", line 1052, in recv_into
return self.read(nbytes, buffer)
File "c:\vnstudio\lib\ssl.py", line 911, in read
return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\vnstudio\lib\site-packages\pip_internal\cli\base_command.py", line 224, in _main
status = self.run(options, args)
File "c:\vnstudio\lib\site-packages\pip_internal\cli\req_command.py", line 180, in wrapper
return func(self, options, args)
File "c:\vnstudio\lib\site-packages\pip_internal\commands\install.py", line 321, in run
reqs, check_supported_wheels=not options.target_dir
File "c:\vnstudio\lib\site-packages\pip_internal\resolution\resolvelib\resolver.py", line 122, in resolve
requirements, max_rounds=try_to_avoid_resolution_too_deep,
File "c:\vnstudio\lib\site-packages\pip_vendor\resolvelib\resolvers.py", line 445, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "c:\vnstudio\lib\site-packages\pip_vendor\resolvelib\resolvers.py", line 339, in resolve
failure_causes = self._attempt_to_pin_criterion(name, criterion)
File "c:\vnstudio\lib\site-packages\pip_vendor\resolvelib\resolvers.py", line 207, in _attempt_to_pin_criterion
criteria = self._get_criteria_to_update(candidate)
File "c:\vnstudio\lib\site-packages\pip_vendor\resolvelib\resolvers.py", line 198, in _get_criteria_to_update
for r in self._p.get_dependencies(candidate):
File "c:\vnstudio\lib\site-packages\pip_internal\resolution\resolvelib\provider.py", line 172, in get_dependencies
for r in candidate.iter_dependencies(with_requires)
File "c:\vnstudio\lib\site-packages\pip_internal\resolution\resolvelib\provider.py", line 171, in <listcomp>
r
File "c:\vnstudio\lib\site-packages\pip_internal\resolution\resolvelib\candidates.py", line 257, in iter_dependencies
requires = self.dist.requires() if with_requires else ()
File "c:\vnstudio\lib\site-packages\pip_internal\resolution\resolvelib\candidates.py", line 239, in dist
self._prepare()
File "c:\vnstudio\lib\site-packages\pip_internal\resolution\resolvelib\candidates.py", line 226, in _prepare
dist = self._prepare_distribution()
File "c:\vnstudio\lib\site-packages\pip_internal\resolution\resolvelib\candidates.py", line 319, in _prepare_distribution
self._ireq, parallel_builds=True,
File "c:\vnstudio\lib\site-packages\pip_internal\operations\prepare.py", line 480, in prepare_linked_requirement
return self._prepare_linked_requirement(req, parallel_builds)
File "c:\vnstudio\lib\site-packages\pip_internal\operations\prepare.py", line 505, in _prepare_linked_requirement
self.download_dir, hashes,
File "c:\vnstudio\lib\site-packages\pip_internal\operations\prepare.py", line 257, in unpack_url
hashes=hashes,
File "c:\vnstudio\lib\site-packages\pip_internal\operations\prepare.py", line 130, in get_http_url
from_path, content_type = download(link, temp_dir.path)
File "c:\vnstudio\lib\site-packages\pip_internal\network\download.py", line 163, in call
for chunk in chunks:
File "c:\vnstudio\lib\site-packages\pip_internal\cli\progress_bars.py", line 168, in iter
for x in it:
File "c:\vnstudio\lib\site-packages\pip_internal\network\utils.py", line 88, in response_chunks
decode_content=False,
File "c:\vnstudio\lib\site-packages\pip_vendor\urllib3\response.py", line 576, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "c:\vnstudio\lib\site-packages\pip_vendor\urllib3\response.py", line 541, in read
raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
File "c:\vnstudio\lib\contextlib.py", line 130, in exit
self.gen.throw(type, value, traceback)
File "c:\vnstudio\lib\site-packages\pip_vendor\urllib3\response.py", line 443, in _error_catcher
raise ReadTimeoutError(self._pool, None, "Read timed out.")
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
调试能看到,开仓了14手,平仓了14手,但是后面还是不停收到平仓的消息,可能是什么问题?
下面是打印出来的trade消息,同一个时间的平仓消息不停的接收到。
datetime,orderid,tradeid,direction,offset,price,volume
2010-06-07 11:25:00+08:06,1,1,Direction.SHORT,Offset.OPEN,4020.4,14.0
2010-07-16 09:00:00+08:06,2,2,Direction.LONG,Offset.CLOSE,4063.4,14.0
2010-07-16 09:00:00+08:06,3,3,Direction.LONG,Offset.CLOSE,4058.0,14.0
2010-07-16 09:00:00+08:06,4,4,Direction.LONG,Offset.CLOSE,4058.0,14.0
2010-07-16 09:00:00+08:06,5,5,Direction.LONG,Offset.CLOSE,4058.0,14.0
2010-07-16 09:00:00+08:06,6,6,Direction.LONG,Offset.CLOSE,4058.0,14.0
我在策略里面记录下来了成交单,包括手数等。但是最后和self.pos对不上。哪里可以查询到self.pos对应的成交单,价格时间等
在跑策略的时候需要根据总资金来计算买入的手数,如何获取?