运行CincoStrategy,发现boll_up和boll_down的值始终相等的,加入am.std函数测试发现返回值始终是0。
am.boll调用std函数,但是只传入2个参数,std函数原型里面有3个参数。
def boll(
self,
n: int,
dev: float,
array: bool = False
) -> Union[
Tuple[np.ndarray, np.ndarray],
Tuple[float, float]
]:
"""
Bollinger Channel.
"""
mid = self.sma(n, array)
std = self.std(n,array)
up = mid + std * dev
down = mid - std * dev
return up, down
def std(self, n: int, nbdev: int = 1, array: bool = False) -> Union[float, np.ndarray]:
"""
Standard deviation.
"""
result = talib.STDDEV(self.close, n, nbdev)
if array:
return result
return result[-1]
加了这么多put_event 还是不好使,一开仓行情就不调动了。
def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
self.cancel_all()
if self.day_open == 0:
self.day_open = bar.open_price
self.range = self.last_high - self.last_low
self.long_entry = self.day_open + self.k1 * self.range
self.short_entry = self.day_open - self.k2 * self.range
if not self.range:
return
if bar.datetime.time() < self.exit_time:
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)
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)
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)
self.put_event()
if self.pos > 0:
if bar.close_price > self.long_entry * (1+self.stop_win):
self.sell(bar.close_price-1, self.fixed_size) # stop win
if bar.close_price < self.long_entry * (1-self.stop_loss):
self.sell(bar.close_price-1, self.fixed_size) # stop loss
if self.pos < 0:
if bar.close_price < self.short_entry * (1-self.stop_win):
self.cover(bar.close_price+1, self.fixed_size) # stop win
if bar.close_price > self.short_entry * (1 + self.stop_loss):
self.cover(bar.close_price+1, self.fixed_size) # stop win
self.put_event()
else:
if self.pos > 0:
self.sell(bar.close_price-1, abs(self.pos))
elif self.pos < 0:
self.cover(bar.close_price+1, abs(self.pos))
self.put_event()
我发现程序开仓之后,cta_strategy_data.json文件中的pos变量会变成1或-1,但是vntrader界面显示还是0,界面上的行情也从此时开始不再跳动,看起来像死机。
删除重启还是遇到同样的情况。
用的CTP借口,联想的笔记本,电信家庭宽带,换了一台台式机也是同样的情况。
1)每次点击功能->CTA策略都会报错,需要将VN trader启动配置的文件夹删除重建之后才能够正常启动。
2)运行dual thrust 策略,下单成交之后,行情窗口行情停止跳动,好像是不再接收行情了。
self.pos 会读取前一交易日未平掉的仓位吗?
v2.0.2和v2.0.3都出现这样的问题,点击连接CTP,输入账户和前置信息之后,点击连接无反应,再次点击即闪退,多次操作都是这样。
运行from vnpy.app.cta_strategy.backtesting import BacktestingEngine报错:
ImportError Traceback (most recent call last)
<ipython-input-9-79b5173e5e8e> in <module>
----> 1 from vnpy.app.cta_strategy.backtesting import BacktestingEngine
f:\vnconda\lib\site-packages\vnpy\app\cta_strategy\backtesting.py in <module>
7 import numpy as np
8 import matplotlib.pyplot as plt
----> 9 import seaborn as sns
10 from pandas import DataFrame
11
f:\vnconda\lib\site-packages\seaborn__init__.py in <module>
4
5 # Import seaborn objects
----> 6 from .rcmod import
7 from .utils import
8 from .palettes import *
f:\vnconda\lib\site-packages\seaborn\rcmod.py in <module>
3 import functools
4 import matplotlib as mpl
----> 5 from . import palettes, _orig_rc_params
6
7
f:\vnconda\lib\site-packages\seaborn\palettes.py in <module>
10 from .external.six.moves import range
11
---> 12 from .utils import desaturate, set_hls_values, get_color_cycle
13 from .colors import xkcd_rgb, crayons
14
f:\vnconda\lib\site-packages\seaborn\utils.py in <module>
5
6 import numpy as np
----> 7 from scipy import stats
8 import pandas as pd
9 import matplotlib as mpl
f:\vnconda\lib\site-packages\scipy\stats__init.py in <module>
365 from future__ import division, print_function, absolute_import
366
--> 367 from .stats import
368 from .distributions import
369 from .morestats import *
f:\vnconda\lib\site-packages\scipy\stats\stats.py in <module>
170 from scipy._lib._version import NumpyVersion
171 from scipy._lib._util import _lazywhere
--> 172 import scipy.special as special
173 from . import distributions
174 from . import mstats_basic
f:\vnconda\lib\site-packages\scipy\special__init__.py in <module>
641 from ._ufuncs import
642
--> 643 from .basic import
644 from ._logsumexp import logsumexp, softmax
645 from . import specfun
f:\vnconda\lib\site-packages\scipy\special\basic.py in <module>
16 psi, _zeta, hankel1, hankel2, yv, kv, ndtri,
17 poch, binom, hyp0f1)
---> 18 from . import specfun
19 from . import orthogonal
20 from ._comb import _comb_int
ImportError: DLL load failed: 找不到指定的模块。
请问BarGenerator和 ArrayManager 这两个方法的定义在哪里?找了半天没找到,这两个是不是自动生成K线的方法
哦,要加交易所后缀
连接CTP登陆成功,初始化策略报错:订阅行情失败,找不到合约m1909. 是还需要在什么地方订阅合约行情吗?
搞定了,从2.0.1升级成功,之前是从2.0升级报错
就是在VNConda的Scripts目录下运行pip报错
穿透式监管测试是否只需要替换VNConda\Lib\site-packages\vnpy\api\ctp 目录下两个dll文件,然后用期货公司给的账号登陆就可以了?接口头文件需要替换吗?在哪里替换
运行 pip install https://pip.vnpy.com/vnpy/vnpy-2.0.2.tar.gz 报错 no matching distribution found for ibapi(from vnpy = 2.02)