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

description

用Python的交易员 wrote:

不支持,因为组合策略的多合约回测无法保证回测过程中on_trade/on_order的时间先后和实盘中的情景一致
那单单实盘中可以用可以么?

在组合策略中如何能像cta策略中的on_trade和on_order那样获取所需的信息。

怎么同时跑多个脚本策略?

请问一下期权的策略有模板么?写好之后是应该放在哪个目录?

如果相反,那是不是买入方向的停止单和限价单 跟卖出方向的完全相反?

也就是怎样能调用到get_history_data()这个方法。

Traceback (most recent call last):
File "D:\python\vnpy-2.0.8\vnpy-2.0.8\vnpy\trader\ui\mainwindow.py", line 278, in open_widget
widget = widget_class(self.main_engine, self.event_engine)
File "D:\python\vnpy-2.0.8\vnpy-2.0.8\vnpy\app\cta_backtester\ui\widget.py", line 43, in init
self.backtester_engine.init_engine()
File "D:\python\vnpy-2.0.8\vnpy-2.0.8\vnpy\app\cta_backtester\engine.py", line 60, in init_engine
self.init_rqdata()
File "D:\python\vnpy-2.0.8\vnpy-2.0.8\vnpy\app\cta_backtester\engine.py", line 66, in init_rqdata
result = rqdata_client.init()
File "D:\python\vnpy-2.0.8\vnpy-2.0.8\vnpy\trader\rqdata.py", line 56, in init
use_pool=True,
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\rqdatac\client.py", line 167, in init
remaining_days = quota["remaining_days"]
TypeError: 'NoneType' object is not subscriptable、

请问经常出现这个问题的原因是什么?

Traceback (most recent call last):
File "C:\vnstudio\lib\site-packages\vnpy\trader\ui\mainwindow.py", line 265, 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
df = rqdata_all_instruments(date=datetime.now())
File "C:\vnstudio\lib\site-packages\rqdatac\decorators.py", line 131, in wrap
return func(args, **kwargs)
File "C:\vnstudio\lib\site-packages\rqdatac\services\basic.py", line 320, in all_instruments
ins_ret = filter(cond, _all_instruments_list(market))
File "C:\vnstudio\lib\site-packages\rqdatac\decorators.py", line 111, in wrapper
value = user_function(
args, kwargs)
File "C:\vnstudio\lib\site-packages\rqdatac\services\basic.py", line 108, in _all_instruments_list
return [Instrument(i) for i in get_client().execute("all_instruments", market=market)]
File "C:\vnstudio\lib\site-packages\rqdatac\decorators.py", line 59, in wrap
return func(*args,
kwargs)
File "C:\vnstudio\lib\site-packages\rqdatac\thread_local.py", line 43, in execute
return self._execute(self._get_connection(), method, args, kwargs)
File "C:\vnstudio\lib\site-packages\rqdatac\thread_local.py", line 39, in _execute
raise e
File "C:\vnstudio\lib\site-packages\rqdatac\thread_local.py", line 34, in _execute
return conn.execute(method, *args, **kwargs)
File "C:\vnstudio\lib\site-packages\rqdatac\connection.py", line 132, in execute
msg_type, body = self._read_one_packet()
File "C:\vnstudio\lib\site-packages\rqdatac\connection.py", line 102, in _read_one_packet
raise get_error(code)(msg)
rqdatac.share.errors.QuotaExceeded: login session num reached MAX limit

用Python的交易员 wrote:

应该是非正常退出,导致写入json文件到一半的时候被终止,文件被破坏了

在使用DualThrustStrategy策略时,点击停止就出现了上述问题。
{
"123": {
"pos": 0,
"range": 0,
"long_entry": 0,
"short_entry": 0,
"exit_time":

写到这里就没写进去了,时间没写进去。

用Python的交易员 wrote:

删掉C:\users\administrator.vntrader目录,然后重启,另外推荐新手用VNStudio,不要自己手动安装

Traceback (most recent call last):
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\ui\widget.py", line 246, in stop_strategy
self.cta_engine.stop_strategy(self.strategy_name)
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\engine.py", line 693, in stop_strategy
self.sync_strategy_data(strategy)
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\engine.py", line 790, in sync_strategy_data
save_json(self.data_filename, self.strategy_data)
File "D:\python\vnpy-2.0.6\vnpy\trader\utility.py", line 108, in save_json
ensure_ascii=False
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json__init.py", line 179, in dump
for chunk in iterable:
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 431, in _iterencode
yield from _iterencode_dict(o, _current_indent_level)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 405, in _iterencode_dict
yield from chunks
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 405, in _iterencode_dict
yield from chunks
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 438, in _iterencode
o = _default(o)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.
class.name__} '
TypeError: Object of type time is not JSON serializable

用Python的交易员 wrote:

删掉C:\users\administrator.vntrader目录,然后重启,另外推荐新手用VNStudio,不要自己手动安装

可以说说是什么原因造成的么?之后我可以避免这样。

Traceback (most recent call last):
File "D:\python\vnpy-2.0.6\vnpy\trader\ui\mainwindow.py", line 265, in open_widget
widget = widget_class(self.main_engine, self.event_engine)
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\ui\widget.py", line 37, in init
self.cta_engine.init_engine()
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\engine.py", line 112, in init_engine
self.load_strategy_data()
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\engine.py", line 779, in load_strategy_data
self.strategy_data = load_json(self.data_filename)
File "D:\python\vnpy-2.0.6\vnpy\trader\utility.py", line 91, in load_json
data = json.load(f)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json__init.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\
init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 14 column 22 (char 259)

这个错误该怎么解决啊?谢谢

Use the first [days] of history data for initializing strategy

使用历史数据的前几天来初始化策略

    day_count = 0
    ix = 0

    for ix, data in enumerate(self.history_data):
        if self.datetime and data.datetime.day != self.datetime.day:
            day_count += 1
            print(self.days)
            if day_count >= self.days:
                break

        self.datetime = data.datetime
        self.callback(data)

    self.strategy.inited = True
    self.output("策略初始化完成")

数据多的时候就出错,少的时候还可以。
希望各位大佬能帮帮忙,说说出错的原因。
谢谢了。

请问执行buy(bar.close_price, 1)之后self.pos并没有变化,导致后面重复执行self.pos == 0的这个分支,之后self.pos再突然加上这个漏掉的1,这到底是什么原因?(只有多开和多平,都是1手,pos是不可能为2的啊,正常来说列表只有两个元素,因为这原因多执行了一次,出现了列表有4个元素),是线程的问题么???

再次调用on_bar之后self.pos为 1 ######
[2128.0, 2092.0]
再次调用on_bar之后self.pos为 1 ######
[2128.0, 2092.0]
sell(price, 1)
再次调用on_bar之后self.pos为 0 ######
再次调用on_bar之后self.pos为 0 ######
再次调用on_bar之后self.pos为 0 ######
buy(price, 1)
再次调用on_bar之后self.pos为 0 ######
再次调用on_bar之后self.pos为 0 ######
buy(price, 1)
再次调用on_bar之后self.pos为 1 ######
[2492.0, 2400.0, 2747.0, 2608.0]
再次调用on_bar之后self.pos为 1 ######
[2492.0, 2400.0, 2747.0, 2608.0]
再次调用on_bar之后self.pos为 2 ######
[2492.0, 2400.0, 2747.0, 2608.0]
再次调用on_bar之后self.pos为 2 ######

用Python的交易员 wrote:

mohu wrote:

def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
if self.pos > 0:
if bar.close_price < self.bars1[1].low_price:
self.cover(bar.close_price, 1)
self.bars1 = []
self.bars = []
elif bar.close_price > 2 * abs(self.bars[0] - self.bars1[1].low_price):
self.cover(bar.close_price, 1)
self.bars1 = []
self.bars = []
else:
pass

    elif self.pos == 0:
        if len(self.bars1) < 2:
            gains = (bar.close_price - bar.open_price) / bar.open_price
            if gains > self.point:
                self.bars1.append(bar)
            else:
                self.bars1 = []
        else:
            self.buy(bar.open_price, 1)
            # 买入价
            self.bars.append(bar.open_price)
    self.put_event()


以上代码出现这个问题,是哪里写错了?怎么解决?希望大家能帮助一下,谢谢。
Exception in thread Thread-4:
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "D:\python\vnpy-2.0.6\vnpy\app\cta_backtester\engine.py", line 158, in run_backtesting
engine.run_backtesting()
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\backtesting.py", line 294, in run_backtesting
func(data)
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\backtesting.py", line 709, in new_bar
self.strategy.on_bar(bar)
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\strategies\my_gao_strategy2.py", line 72, in on_bar
if bar.close_price < self.bars1[1].low_price:
IndexError: list index out of range

这个报错是你的策略代码问题,做以上操作的时候,你要先检查下self.bars1中数据量有多少,是否有最少2个了,你才能用下标1取到数据
是我使用cover()错了,使用cover致使pos又加1了,不过cover()是平多还是平空?代码是平空,为什么在回测记录哪里看是方向是多。

我使用vn.py中原有的TestStrategy策略进行回测,也出现了下面的这个问题,求助啊。

Exception in thread Thread-4:
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "D:\python\vnpy-2.0.6\vnpy\app\cta_backtester\engine.py", line 158, in run_backtesting
engine.run_backtesting()
File "D:\python\vnpy-2.0.6\vnpy\app\cta_strategy\backtesting.py", line 282, in run_backtesting
self.callback(data)
TypeError: 'NoneType' object is not callable

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

沪公网安备 31011502017034号

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