大家好,我是名正在不断摸索学习的 “小学生“ 。 最近遇到了点小问题。我尝试写一个price action类型的策略(如下图所示)
当最新一根K线突破内包线(inside bar)的时候,就做空或者做多;处于着急测试的原因,我这个策略只写了做多部分。
问题就是:
当我打开vnpy ui进行回测的时候,无法进行回测(如下图所示)
等了很长时间没有反应就又点了一下回测,就显示这样的图片
但当我不通过打开vnpy客户端而是用backtesting文件回测的时候,却是可以跑的。
为了防止是数据方面的问题,我用同样的数据测试了下自带的几个strategy,并没有问题,所以问题肯定出在我写的这个代码上了。(我把代码attach在下面了)个人猜测会不会是因为我调用K线的方式有问题导致数据没法读取?
求各位大神们指点下。万分感谢
Regards,
Leo
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class three_bar(CtaTemplate):
author = "Leo_Monster"
fixed_size=1
parameters=["fixed_size"]
variables=[]
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
self.bg = BarGenerator(self.on_bar,window=1,interval=Interval.HOUR)
self.am = ArrayManager()
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")
self.load_bar(5)
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): normal
self.am.update_bar(bar)
if not self.am.inited:
return
if self.pos ==0:
if self.am.high_array[-2]>self.am.high_array[-1] and\
self.am.low_array[-2]<self.am.low_array[-1]:
self.buy(bar.open_price,self.fixed_size)
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