我的策略要同时用到一分钟和五分钟的K线,在策略文件中是这么写的,是哪里错了吗? self.put_event()是on_bar和on_5_min_bar下面都要加吗?
def init(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super().init(cta_engine, strategy_name, vt_symbol, setting)
self.bg1 = BarGenerator(self.on_bar)
self.am1 = ArrayManager()
self.bg5 = BarGenerator(self.on_bar, 5, self.on_5_min_bar)
self.am5 = ArrayManager()
def on_tick(self, tick: TickData):
"""
Callback of new tick data update.
"""
self.bg1.update_tick(tick)
self.bgx.update_tick(tick)
def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
self.bg1.update_bar(bar)
self.bg5.update_bar(bar)
if not self.am1.inited:
return
def on_5_min_bar(self, bar: BarData):
""""""
self.cancel_all()
self.am5.update_bar(bar)
if not self.am5.inited:
return
感谢,请问是在哪个文件下进行的修改呢?
目前已经在用默认的sqlite数据库,能否再创建一个sqlite数据库呢?
我设置了亏损15个点止损的条件,大部分情况是正常触发的,但是有几笔交易没有正常触发,出现了大量亏损。
定位到那几笔交易后发现并不是特别剧烈的下跌,在中间的某些bar本应该可以触发止损的,但是并没有正常触发,这是为什么呢?
另外,我在右侧面板看到2月21日有一个大额亏损,但是点开K线图表和成交记录却没有找到相关交易?好诡异
请问如何给参数优化加进度条呢。。优化的时候经常会卡死,然后也不知道是在什么时候卡死的,为什么卡死的
linux上也是可以运行回测优化的吧?
请问回测的参数优化是并行的吗?是的话是基于mpi还是openmp呢?如何设置核数
xiaohe wrote:
可参考https://www.vnpy.com/forum/topic/2167-cha-xun-cang-wei-chi-cang-jun-jie-wei-cheng-jiao-wei-tuo-dan-yi-ge-han-shu-gao-ding
谢谢~
再请教一个编程问题,我按帖子改好后,get_position_detail这个函数能否被utility里的其他自定义函数调用?并最终在策略文件里运行?
那我想获取开仓均价是得用positiondata吗
我想自定义一个函数profit_monitor用于计算实时的盈利情况,因此需要获得真实的开仓均价。查询了一下论坛,好像是用on_trade获取开仓均价。
研究了下TradeData,发现有九个值
symbol: str
exchange: Exchange
orderid: str
tradeid: str
direction: Direction = None
offset: Offset = Offset.NONE
price: float = 0
volume: float = 0
datetime: datetime = None
我想在utility中写这个profit_monitor函数并在策略文件中使用,是否可行?需要import其他内容吗?
def profit_monitor(self):
return self.close_array[-1] - self.on_trade[6]
另外PositionData和TradeData区别在哪呢?
我只需要回放一天的数据
xiaohe wrote:
woodlandnight wrote:
顺带问一下,有没有可能在jupyter里把arraymanager的内容打印出来呢
可以
我试着在jupyter里写了一下,但是提示报错AttributeError: 'NoneType' object has no attribute 'on_init',请问该如何修改代码呢
from datetime import datetime
from vnpy_ctastrategy.backtesting import BacktestingEngine
from vnpy.trader.utility import ArrayManager
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol = "IF888.CFFEX",
interval = "1m",
start = datetime(2020,8,3),
end = datetime(2020,8,4),
rate = 0.3/10000,
slippage = 0.2,
size = 300,
pricetick = 0.2,
capital = 1_000_000
)
engine.load_data()
engine.run_backtesting()
am = ArrayManager()
print(am.macd)
C:\veighna_studio\lib\site-packages\vnpy\trader\setting.py:32: PytzUsageWarning: The zone attribute is specific to pytz's interface; please migrate to a new time zone provider. For more details on how to do so, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
"database.timezone": get_localzone().zone,
启动时提示这个,请问该如何解决
顺带问一下,有没有可能在jupyter里把arraymanager的内容打印出来呢
xiaohe wrote:
am.macd传array=True返回的第一项就是macd的array
非常感谢!再请教一下,macd的周期会影响到array的长度吗?如果会的话,为了保证array长度,是不是要相应修改arraymannager的size?如果不会的话,满足它周期计算的bar是在哪传入的
请教一下各位大佬,我想缓存近100个bar的macd信息,一开始看到了时间序列容器Arraymanager,想把macd直接写到Arraymanager里,后来发现,得先有Arraymanager,才能开始计算指标。似乎直接写在Arraymanager里不成立。
如何才能让近100个bar除了高开低收以外,多一列MACD的信息呢?
一不小心将python版本更新到了3.10,回测的时候python.exe提示“应用程序无法正常启动0xc000012d”,不知道是不是更新了python版本导致的,请问如何在不影响其他组件的情况下,降低版本呢
谢谢陈总
我在策略中定义了一个变量A,初始值是0,希望用来计数,并且每次开仓后清零,
但是回测中出现了UnboundLocalError: local variable 'A' referenced before assignment,
百度后好像是全局变量的问题,于是加了global A,
再次回测出现了NameError: name 'A' is not defined
编程小白整不会了,晕,请问该如何解决呢