VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 20
声望: 0

看之前代码中的一些示例策略里面,各K线的指标都是在当前bar收盘结束时计算输出。

想了解下有没有什么方法可以在当前bar收盘前实时输出各种指标数据。

Member
avatar
加入于:
帖子: 1817
声望: 137

直接访问bg缓存的合成中K线对象即可:

self.bg.bar
Member
avatar
加入于:
帖子: 20
声望: 0

MTF wrote:

直接访问bg缓存的合成中K线对象即可:

self.bg.bar

感谢指导,谢谢

Member
avatar
加入于:
帖子: 20
声望: 0

MTF wrote:

直接访问bg缓存的合成中K线对象即可:

self.bg.bar

试了下,感觉这个self.bg.bar没有任何数据,报错NoneType object,代码如下,能否帮忙看看,谢谢。
self.bg10 = BarGenerator(self.on_bar, 10, self.on_10min_bar)
self.am10 = ArrayManager()
self.am10.update_bar(self.bg10.bar)

异常信息如下:
am10.update_bar(self.bg10.bar)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 524, in update_bar
self.open_array[-1] = bar.open_price
AttributeError: 'NoneType' object has no attribute 'open_price'

Member
avatar
加入于:
帖子: 1817
声望: 137

需要至少在on_bar回调函数下更新了一根1分钟K线进入bg

self.bg.update_bar(bar)

然后才能访问合成中的N分钟K线:

self.bg.window_bar

另外注意ArrayManager是按照数量缓存的K线(也就是同样时间戳不会自动覆盖,而是尾部追加),所以如果多次往am里添加同一个时间戳还没走完的K线会导致状态错误

Member
avatar
加入于:
帖子: 20
声望: 0

MTF wrote:

需要至少在on_bar回调函数下更新了一根1分钟K线进入bg

self.bg.update_bar(bar)

然后才能访问合成中的N分钟K线:

self.bg.window_bar

另外注意ArrayManager是按照数量缓存的K线(也就是同样时间戳不会自动覆盖,而是尾部追加),所以如果多次往am里添加同一个时间戳还没走完的K线会导致状态错误

上面就是我在on_bar函数中执行了update_bar函数后的结果,代码如下:

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)
    if self.log:
        self.log_fp = open(f"{strategy_name}.log", "w+")
    self.strategy_name = strategy_name

    self.bg5 = BarGenerator(self.on_bar, 5, self.on_5min_bar)
    self.am5 = ArrayManager()

    self.bg10 = BarGenerator(self.on_bar, 10, self.on_10min_bar)
    self.am10 = ArrayManager()

def on_bar(self, bar: BarData):
    """
    Callback of new bar data update.
    """
    self.bg5.update_bar(bar)
    self.bg10.update_bar(bar)

def on_5min_bar(self, bar: BarData):
    """"""
    self.cancel_all()
    am5 = self.am5
    am10 = self.am10
    am5.update_bar(bar)
    print(self.bg10.window_bar.open_price)
    am10.update_bar(self.bg10.bar)

我在init函数中分别为5分钟和10分钟K线各自定义了一个bg和am。

报错如下:
PS C:\Users\10191\Documents\PVT\QuantityTrading\vnpy> C:\veighna_studio\python.exe C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\strategies\backtest.py
2024-09-07 11:46:40.936132 开始加载历史数据
2024-09-07 11:46:40.937133 加载进度:# [0%]
2024-09-07 11:46:41.275659 加载进度:# [9%]
2024-09-07 11:46:41.405803 加载进度:## [19%]
2024-09-07 11:46:41.617811 加载进度:### [28%]
2024-09-07 11:46:41.839450 加载进度:#### [38%]
2024-09-07 11:46:42.055184 加载进度:##### [47%]
2024-09-07 11:46:42.261215 加载进度:###### [56%]
2024-09-07 11:46:42.464912 加载进度:####### [66%]
2024-09-07 11:46:42.775186 加载进度:######## [75%]
2024-09-07 11:46:42.981184 加载进度:######### [84%]
2024-09-07 11:46:43.171219 加载进度:########## [94%]
2024-09-07 11:46:43.393189 历史数据加载完成,数据量:49780
Traceback (most recent call last):
File "C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\strategies\backtest.py", line 47, in <module>
engine.run_backtesting()
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\backtesting.py", line 219, in run_backtesting
self.strategy.on_init()
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\strategies\ag2410_kdj_multi_timeframe_v1.py", line 534, in on_init
self.load_bar(10)
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\template.py", line 315, in load_bar
callback(bar)
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\strategies\ag2410_kdj_multi_timeframe_v1.py", line 562, in on_bar
self.bg5.update_bar(bar)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 274, in update_bar
self.update_bar_minute_window(bar)
File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 313, in update_bar_minute_window
self.on_window_bar(self.window_bar)
File "C:\veighna_studio\lib\site-packages\vnpy_ctastrategy\strategies\ag2410_kdj_multi_timeframe_v1.py", line 578, in on_5min_bar
print(self.bg10.window_bar.open_price)
AttributeError: 'NoneType' object has no attribute 'open_price'
PS C:\Users\10191\Documents\PVT\QuantityTrading\vnpy>

Member
avatar
加入于:
帖子: 5346
声望: 323

你是在am.update_bar下面打印的,不是在bg.update_bar下面打印的

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】