我知道了,因为ArrayManager没填满才没有输出,为什么要半年才能填满,分钟线不会这样的啊
我的BarGenerator是这样的
数据的日期是从20年1月16号开始的
结果输出的时候只有20年6月16号的数据,加载了少了半年才能合成第一根Bar
我换了好几台电脑都是这样,卸了重装还是一样 每次都是在BarGenerator下面加载了这段合成日线的代码
我以为我的原始数据有问题,但是我把Interval类型改为1分钟,1月16号的数据都可以每根都输出来
实在没办法了,下面是代码,大哥们帮我看下,谢谢!
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
from vnpy.trader.constant import Interval
class DoubleMaStrategy(CtaTemplate):
author = "用Python的交易员"
fast_window = 10
slow_window = 20
fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0
parameters = ["fast_window", "slow_window"]
variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]
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)
self.am = ArrayManager()
self.bg_x=BarGenerator(self.on_bar,1,self.on_x_bar,interval=Interval.DAILY)
self.am_x = ArrayManager()
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")
self.load_bar(40)
def on_start(self):
"""
Callback when strategy is started.
"""
self.write_log("策略启动")
self.put_event()
def on_stop(self):
"""
Callback when strategy is stopped.
"""
self.write_log("策略停止")
self.put_event()
def on_tick(self, tick: TickData):
"""
Callback of new tick data update.
"""
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
am = self.am
am.update_bar(bar)
self.bg_x.update_bar(bar)
if not am.inited:
return
pass
def on_x_bar(self,bar):
am = self.am_x
am.update_bar(bar)
if not am.inited:
return
pass
self.put_event()
print("on_day",bar.datetime)
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
对于我这种新手来说 合成日线真的是苦不堪言,要考虑的东西太多了
研究了半天通达信的数据 最后发现 通达信默认把夜盘的日期写到第二天去,导致夜盘的时间比早盘的数据还要靠后,等于夜盘的小时线默认放在早盘之后,调转了 回测一点都不准