我想找到有关怎样调用SpreadAlgoTemplate中interval的相关代码,请问在哪个文件中可以找到?
我用的同样的策略,同样的标的,同样的时间,但是在jupyter上和vnstation里回测的结果不一样,而且差别很大:
在vnstation里面:
而在jupyter里面:
请问这是怎么回事?
在Jupyter做参数优化的时候出现问题:
2020-01-09 14:34:48.499169 逐日盯市盈亏计算完成
2020-01-09 14:34:48.500155 开始计算策略统计指标
gen nevals mean std min max
0 100 [7.74054611] [0.34501181] [7.19715305] [8.25334413]
ValueError Traceback (most recent call last)
<ipython-input-4-b458f6cb496e> in <module>
9 #setting.add_parameter("time_window", 5, 50, 2)
10
---> 11 engine.run_ga_optimization(setting)
c:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\backtesting.py in run_ga_optimization(self, optimization_setting, population_size, ngen_size, output)
685 ngen,
686 stats,
--> 687 halloffame=hof
688 )
689
c:\vnstudio\lib\site-packages\deap\algorithms.py in eaMuPlusLambda(population, toolbox, mu, lambda, cxpb, mutpb, ngen, stats, halloffame, verbose)
314 for gen in range(1, ngen + 1):
315 # Vary the population
--> 316 offspring = varOr(population, toolbox, lambda, cxpb, mutpb)
317
318 # Evaluate the individuals with an invalid fitness
c:\vnstudio\lib\site-packages\deap\algorithms.py in varOr(population, toolbox, lambda_, cxpb, mutpb)
232 if op_choice < cxpb: # Apply crossover
233 ind1, ind2 = list(map(toolbox.clone, random.sample(population, 2)))
--> 234 ind1, ind2 = toolbox.mate(ind1, ind2)
235 del ind1.fitness.values
236 offspring.append(ind1)
c:\vnstudio\lib\site-packages\deap\tools\crossover.py in cxTwoPoint(ind1, ind2)
45 size = min(len(ind1), len(ind2))
46 cxpoint1 = random.randint(1, size)
---> 47 cxpoint2 = random.randint(1, size - 1)
48 if cxpoint2 >= cxpoint1:
49 cxpoint2 += 1
c:\vnstudio\lib\random.py in randint(self, a, b)
220 """
221
--> 222 return self.randrange(a, b+1)
223
224 def _randbelow(self, n, int=int, maxsize=1<<BPF, type=type,
c:\vnstudio\lib\random.py in randrange(self, start, stop, step, _int)
198 return istart + self._randbelow(width)
199 if step == 1:
--> 200 raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
201
202 # Non-unit step argument supplied.
ValueError: empty range for randrange() (1,1, 0)
请问这是什么问题?
如题。
我想在同一台电脑上进行实盘交易和模拟仿真,都是使用无ui的进程。但是开第二个进程的时候出问题了:
启动CTA策略守护父进程
启动子进程
子进程启动成功
2019-12-18 14:43:04,133 INFO: 主引擎创建成功
2019-12-18 14:43:04,136 INFO: 注册日志事件监听
2019-12-18 14:43:04,136 INFO: 连接CTP接口
2019-12-18 14:43:04,158 INFO: 交易服务器连接成功
2019-12-18 14:43:04,162 INFO: 行情服务器连接成功
2019-12-18 14:43:04,258 INFO: 交易服务器授权验证成功
2019-12-18 14:43:04,258 INFO: 行情服务器登录成功
2019-12-18 14:43:04,264 INFO: 交易服务器登录成功
2019-12-18 14:43:04,290 INFO: 结算信息确认成功
2019-12-18 14:43:04,583 INFO: 合约信息查询成功
Process Process-1:
Traceback (most recent call last):
File "C:\vnstudio\lib\multiprocessing\process.py", line 297, in _bootstrap
self.run()
File "C:\vnstudio\lib\multiprocessing\process.py", line 99, in run
self._target(self._args, **self._kwargs)
File "C:\Users\Administrator\Desktop\test_run.py", line 56, in run_child
cta_engine.init_engine()
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine.py", line 106, in init_engine
self.init_rqdata()
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine.py", line 128, in init_rqdata
result = rqdata_client.init()
File "C:\vnstudio\lib\site-packages\vnpy\trader\rqdata.py", line 60, in init
df = rqdata_all_instruments()
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)]
TypeError: 'NoneType' object is not iterable
是我的代码出问题还是rqdata的账号只能连接一次?还是别的什么问题?
我的价差策略是这样的:
这样的话我理解是在价差小于0.35的时候做多。但是实际发单却是这样的:
实际成交的价差是98.49-98.135=0.355.
类似的问题还出现在平仓的时候。这个是因为payup引起的吗?我不知道这个payup=10在策略里是起到什么作用?
在用no_ui运行策略时,每次开盘的时候,比如上午9:00或者夜盘21:00,会连续出现两根k线:一根是上次收盘时候的最后一根,一根是开盘的第一根。比如说上午9:00的时候,在ni1912这个标的上会连续出现00:00 和 09:00这两根k线。这样的话策略会出现问题,比方说会连续下单两次。请问这个问题怎么解决?
开始运行实盘时会运行load_bar加载历史数据,在am.inited == True 以后,策略会在bar上运行。我的问题是,如果此时仍在历史数据阶段,即load_bar加载的历史数据数多于ArrayManager里的数据,策略实际在实盘之前就可能发出交易委托了。这时的交易应该怎么处理呢?
我试着运行了下no_ui的脚本,在策略初始化之后触发异常:
Traceback (most recent call last):
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine.py", line 584, in call_strategy_func
func()
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\strategies\commodity.py", line 55, in on_init
self.load_bar(90)
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\template.py", line 233, in load_bar
self.cta_engine.load_bar(self.vt_symbol, days, interval, callback)
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine.py", line 539, in load_bar
bars = self.query_bar_from_rq(symbol, exchange, interval, start, end)
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine.py", line 145, in query_bar_from_rq
data = rqdata_client.query_history(req)
File "C:\vnstudio\lib\site-packages\vnpy\trader\rqdata.py", line 136, in query_history
adjust_type="none"
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\get_price.py", line 124, in get_price
pf = get_minbar(order_book_ids, start_date, end_date, fields, duration, market)
File "C:\vnstudio\lib\site-packages\rqdatac\services\get_price.py", line 441, in get_minbar
data = [(obid, {k: np.frombuffer(v) for k, v in d.items()}) for obid, d in data]
TypeError: 'NoneType' object is not iterable
好像是rqdata这边出了问题,请问应该怎么解决?
rqdata无法读到:
我按照论坛里的讨论把master分支更新了,但是还是出问题。
Traceback (most recent call last):
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_backtester\engine.py", line 365, in run_downloading
data = rqdata_client.query_history(req)
File "C:\vnstudio\lib\site-packages\vnpy\trader\rqdata.py", line 136, in query_history
adjust_type="none"
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\get_price.py", line 117, in get_price
pf = get_minbar(order_book_ids, start_date, end_date, fields, duration, market)
File "C:\vnstudio\lib\site-packages\rqdatac\services\get_price.py", line 433, in get_minbar
"get_minbar_v", order_book_ids, start_date, end_date, fields, duration, 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\connection_pool.py", line 25, in execute
with self._get_connection() as conn:
File "C:\vnstudio\lib\contextlib.py", line 112, in enter
return next(self.gen)
File "C:\vnstudio\lib\site-packages\rqdatac\connection_pool.py", line 36, in _get_connection
conn = self._ensure_connection()
File "C:\vnstudio\lib\site-packages\rqdatac\connection_pool.py", line 52, in _ensure_connection
if conn.is_nomal():
AttributeError: 'Connection' object has no attribute 'is_nomal'
请问这个问题怎么解决?
请问如何在策略中获取买一价和卖一价?
如题。
我想知道如何不通过vnstation的图形界面直接在脚本上创建策略并实盘运行?
我想通过策略自动控制交易的品种,但是vnpy里的策略都要限定某个标的,只能在制定标的上运行自动交易。
想问问有什么办法可以在多个标的上让策略自动选择交易品种吗?