VeighNa量化社区
你的开源社区量化交易平台
jiu
jiu's Avatar
Member
离线
22 帖子
声望: 0

description
之前用股指回测一直没发现这个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

如题 米矿突然开始报错。回测不了了。

安装进阶课程的步骤一步步创建子定义策略的回测,但每次加载完历史数据以后就不进行回放了。
VNPY自带默认的策略回测都是正常的。

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"
安装的时候出现如上报错,请问怎么解决呀。

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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