之前用股指回测一直没发现这个BUG
正常股指交易时间是9:30-10:30,10:30-11:30,13:00-14:00,14:00-15:00
但是VNPY合成的K线是9:30-10:00,10:00-11:00,11:00-14:00, 14:00 -15:00
和之前https://www.vnpy.com/forum/topic/3409-wei-shi-yao-ni-de-hui-ce-ce-lue-he-bie-de-ping-tai-bu-tai-yi-yang
问题一样。
16:50:09 策略文件strategies.cinco_strategy加载失败,触发异常:
Traceback (most recent call last):
File "C:\Users\Lenovo\miniconda3\lib\site-packages\vnpy\app\cta_backtester\engine.py", line 110, in load_strategy_class_from_module
module = importlib.import_module(module_name)
File "C:\Users\Lenovo\miniconda3\lib\importlib__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'strategies.cinco_strategy'
载入出现如上报错,请问是怎么出错了 谢谢~
Traceback (most recent call last):
File "c:\vnstudio\lib\site-packages\vnstation\cli.py", line 92, in run_trader
main_engine.add_app(app)
File "c:\vnstudio\lib\site-packages\vnpy\trader\engine.py", line 96, in add_app
engine = self.add_engine(app.engine_class)
File "c:\vnstudio\lib\site-packages\vnpy\trader\engine.py", line 71, in add_engine
engine = engine_class(self, self.event_engine)
File "c:\vnstudio\lib\site-packages\vnpy\app\option_master\engine.py", line 75, in init
self.load_setting()
File "c:\vnstudio\lib\site-packages\vnpy\app\option_master\engine.py", line 85, in load_setting
self.setting = load_json(self.setting_filename)
File "c:\vnstudio\lib\site-packages\vnpy\trader\utility.py", line 99, in load_json
data = json.load(f)
File "c:\vnstudio\lib\json__init.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "c:\vnstudio\lib\json\init__.py", line 348, in loads
return _default_decoder.decode(s)
File "c:\vnstudio\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\vnstudio\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
如题,我希望仓位管理能基于我的初始资金量来做,希望能在CTA策略里获取资金信息
用群主教程里的cuatro策略,8个参数寻优。16G内存直接炸掉死机,这怎么解决啊?
setting = OptimizationSetting()
setting.set_target("return_drawdown_ratio")
setting.add_parameter("boll_window", 6, 40, 2)
setting.add_parameter("boll_dev", 0.4, 4, 0.2)
setting.add_parameter("rsi_window", 4, 60, 4)
setting.add_parameter("rsi_signal", 10, 50, 4)
setting.add_parameter("fast_window", 4, 60, 4)
setting.add_parameter("slow_window", 8, 80, 4)
setting.add_parameter("trailing_long", 0.8, 1, 0.2)
setting.add_parameter("trailing_short", 0.8, 1, 0.2)
engine_if.run_ga_optimization(setting)
如题,用的vnpy master 》exemple 里backtesting的跑。
KeyError Traceback (most recent call last)
<ipython-input-5-4b99ee50d5a7> in <module>
4 setting.add_parameter("kk_dev", 0.5, 5, 0.1)
5
----> 6 engine.run_ga_optimization(setting)
E:\vnpy_master\examples\cta_backtesting\vnpy\app\cta_strategy\backtesting.py in run_ga_optimization(self, optimization_setting, population_size, ngen_size, output)
706 ngen,
707 stats,
--> 708 halloffame=hof
709 )
710
c:\vnstudio\lib\site-packages\deap\algorithms.py in eaMuPlusLambda(population, toolbox, mu, lambda_, cxpb, mutpb, ngen, stats, halloffame, verbose)
300 invalid_ind = [ind for ind in population if not ind.fitness.valid]
301 fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
--> 302 for ind, fit in zip(invalid_ind, fitnesses):
303 ind.fitness.values = fit
304
E:\vnpy_master\examples\cta_backtesting\vnpy\app\cta_strategy\backtesting.py in ga_optimize(parameter_values)
1253 def ga_optimize(parameter_values: list):
1254 """"""
-> 1255 return _ga_optimize(tuple(parameter_values))
1256
1257
E:\vnpy_master\examples\cta_backtesting\vnpy\app\cta_strategy\backtesting.py in _ga_optimize(parameter_values)
1246 ga_end,
1247 ga_mode,
-> 1248 ga_inverse
1249 )
1250 return (result[1],)
E:\vnpy_master\examples\cta_backtesting\vnpy\app\cta_strategy\backtesting.py in optimize(target_name, strategy_class, setting, vt_symbol, interval, start, rate, slippage, size, pricetick, capital, end, mode, inverse)
1219 engine.add_strategy(strategy_class, setting)
1220 engine.load_data()
-> 1221 engine.run_backtesting()
1222 engine.calculate_result()
1223 statistics = engine.calculate_statistics(output=False)
E:\vnpy_master\examples\cta_backtesting\vnpy\app\cta_strategy\backtesting.py in run_backtesting(self)
291 # Use the rest of history data for running backtesting
292 for data in self.history_data[ix:]:
--> 293 func(data)
294
295 self.output("历史数据回放结束")
E:\vnpy_master\examples\cta_backtesting\vnpy\app\cta_strategy\backtesting.py in new_bar(self, bar)
740
741 self.cross_limit_order()
--> 742 self.cross_stop_order()
743 self.strategy.on_bar(bar)
744
E:\vnpy_master\examples\cta_backtesting\vnpy\app\cta_strategy\backtesting.py in cross_stop_order(self)
907 stop_order.status = StopOrderStatus.TRIGGERED
908
--> 909 self.active_stop_orders.pop(stop_order.stop_orderid)
910
911 # Push update to strategy.
KeyError: 'STOP.3104'
VNPY在进行参数优化的的时候,每一次calculate_result()都要load_data()一次。很多时候感觉数据载入很费时间,是否可以在参数寻优的时候不重复载入历史数据?如果要实现不重复载入不知道有什么难点?我用的sqlite的数据库。
Bar generator生成K线只能按小时或者分钟. 很多不同的商品的交易时间是不同的, 请问这样的情况下如何来生成日K线
"""
"""
from datetime import time
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class DualThrust(CtaTemplate):
""""""
author = "wew20000@126.com"
#input parameters
k1 = 0.5
k2 = 0.5
fixed_size = 1
#bar datas
bars = []
day_open = 0
day_high = 0
day_low = 0
day_close = 0
exit_time = time(hour=14, minute=55)
#technical analysis indicators
DT_range = 0
long_entry = 0
short_entry = 0
#status control parameters
long_entered = False
short_entered = False
#other
parameters = ["k1", "k2", "fixed_size"]
variables = ["DT_range", "long_entry", "short_entry", "exit_time"]
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super(DualThrust, self).__init__(
cta_engine, strategy_name, vt_symbol, setting
)
self.bg = BarGenerator(self.on_bar)
self.am = ArrayManager()
self.bars = []
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")
self.load_bar(10)
def on_start(self):
"""
Callback when strategy is started.
"""
self.write_log("策略启动")
def on_stop(self):
"""
Callback when strategy is stopped.
"""
self.write_log("策略停止")
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.cancel_all()
self.bars.append(bar)
if len(self.bars) <= 2:
return
else:
self.bars.pop(0)
last_bar = self.bars[-2]
# New Day
if last_bar.datetime.date() != bar.datetime.date():
if self.day_close:
self.DT_range = self.day_high - self.day_low
self.long_entry = bar.open_price + self.k1 * self.DT_range#第一分钟K线确定上轨
self.short_entry = bar.open_price - self.k2 * self.DT_range#第一分钟K线确定下轨
#每天第一根K线收盘价为当日K线OHLC
self.day_open = bar.open_price
self.day_high = bar.high_price
self.day_low = bar.close_price
self.day_close = bar.close_price
self.long_entered = False
self.short_entered = False
# Today
else:
self.day_high = max(self.day_high, bar.high_price)
self.day_low = min(self.day_low, bar.low_price)
self.day_close = bar.close_price
# Check Data
if self.DT_range == 0:
return
# Trading
if bar.datetime.time() < self.exit_time:
#no position
if self.pos == 0:
if bar.close_price > self.day_open:
if not self.long_entered:
self.buy(self.long_entry, self.fixed_size, stop=True)
else:
if not self.short_entered:
self.short(self.short_entry, self.fixed_size, stop=True)
#long position
elif self.pos > 0:
self.long_entered = True
self.sell(self.short_entry, self.fixed_size, stop=True)
if not self.short_entered:
self.short(self.short_entry, self.fixed_size, stop=True)
#short position
elif self.pos < 0:
self.short_entered = True
self.cover(self.long_entry, self.fixed_size, stop=True)
if not self.long_entered:
self.buy(self.long_entry, self.fixed_size, stop=True)
# Close existing position
else:
if self.pos > 0:
self.sell(bar.close_price * 0.99, abs(self.pos))
elif self.pos < 0:
self.cover(bar.close_price * 1.01, abs(self.pos))
self.put_event()
def on_order(self, order: OrderData):
"""
Callback of new order data update.
"""
pass
def on_trade(self, trade: TradeData):
"""
Callback of new trade data update.
"""
self.put_event()
def on_stop_order(self, stop_order: StopOrder):
"""
Callback of stop order update.
"""
pass
上面是我按教程自己写的dt策略,应该和默认的策略逻辑是一样的,但是回测结果不同。开仓点位有细微差别请问是不是代码哪里有问题
Traceback (most recent call last):
File "C:\vnstudio\lib\site-packages\vnpy\trader\ui\mainwindow.py", line 278, in open_widget
widget = widget_class(self.main_engine, self.event_engine)
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_backtester\ui\widget.py", line 43, in init
self.backtester_engine.init_engine()
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_backtester\engine.py", line 60, in init_engine
self.init_rqdata()
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_backtester\engine.py", line 66, in init_rqdata
result = rqdata_client.init()
File "C:\vnstudio\lib\site-packages\vnpy\trader\rqdata.py", line 56, in init
use_pool=True,
File "C:\vnstudio\lib\site-packages\rqdatac\client.py", line 167, in init
remaining_days = quota["remaining_days"]
TypeError: 'NoneType' object is not subscriptable
如题 米矿突然开始报错。回测不了了。
15:06:52 数据下载失败,触发异常:
Traceback (most recent call last):
File "C:\vnstudio\lib\site-packages\peewee.py", line 3005, in execute_sql
cursor.execute(sql, params or ())
sqlite3.OperationalError: table dbbardata has no column named open_interest
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_backtester\engine.py", line 384, in run_downloading
database_manager.save_bar_data(data)
File "C:\vnstudio\lib\site-packages\vnpy\trader\database\database_sql.py", line 374, in save_bar_data
self.class_bar.save_all(ds)
File "C:\vnstudio\lib\site-packages\vnpy\trader\database\database_sql.py", line 149, in save_all
c).on_conflict_replace().execute()
File "C:\vnstudio\lib\site-packages\peewee.py", line 1812, in inner
return method(self, database, args, **kwargs)
File "C:\vnstudio\lib\site-packages\peewee.py", line 1883, in execute
return self._execute(database)
File "C:\vnstudio\lib\site-packages\peewee.py", line 2623, in _execute
return super(Insert, self)._execute(database)
File "C:\vnstudio\lib\site-packages\peewee.py", line 2360, in _execute
cursor = database.execute(self)
File "C:\vnstudio\lib\site-packages\peewee.py", line 3018, in execute
return self.execute_sql(sql, params, commit=commit)
File "C:\vnstudio\lib\site-packages\peewee.py", line 3012, in execute_sql
self.commit()
File "C:\vnstudio\lib\site-packages\peewee.py", line 2783, in exit
reraise(new_type, new_type(exc_args), traceback)
File "C:\vnstudio\lib\site-packages\peewee.py", line 183, in reraise
raise value.with_traceback(tb)
File "C:\vnstudio\lib\site-packages\peewee.py", line 3005, in execute_sql
cursor.execute(sql, params or ())
peewee.OperationalError: table dbbardata has no column named open_interest
如题,在CTA回测模块里下载历史数据的时候报错 下载的是IF88合约
已经升级到最新2.0.8版本
安装过程中出现错误(dependents)
执行失败(意外退出代码:1):"C:\vnstudio/python.exe - m -pip install --no--index
-f C:\vnstudio/pkgs -r C:vnstudio/pkgs/requirement.txt"
安装的时候出现如上报错,请问怎么解决呀。