VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 18
声望: 0
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    # 创建5分钟K线合成器
    self.bg5 = BarGenerator(
        on_bar=self.on_bar,
        window=5,
        on_window_bar=self.on_5min_bar,
        interval=Interval.MINUTE
    )
    self.am5 = ArrayManager(size=100)  # 使用ArrayManager管理5分钟K线


tempam = self.am5
tempam.update_bar(self.bg5.bar)

    self.write_log(f"br0={self.bg5.bar.close_price}.BAR1={tempam.close_array[-2]},BAR2={tempam.close_array[-3]}")

    if self.am5 and self.bg5.bar:
        self.am5=self.am5[:-1] 


报错:

Traceback (most recent call last):
File ""D:\VeighNa_Studio\Lib\site-packages\vnpy_ctastrategy\engine.py"", line 613, in call_strategy_func
func(params)
~~^^^^^^^^
File ""D:\VeighNa_Studio\Lib\site-packages\vnpy_ctastrategy\strategies\my_strategy.py"", line 64, in on_tick
self.bg5.update_tick(tick)
~
~~~^^^^^^
File ""D:\VeighNa_Studio\Lib\site-packages\vnpy\trader\utility.py"", line 230, in update_tick
self.on_bar(self.bar)
~
~~^^^^^^^^^^
File ""D:\VeighNa_Studio\Lib\site-packages\vnpy_ctastrategy\strategies\my_strategy.py"", line 142, in on_bar
self.am5=self.am5[:-1]
~
~^^^^^
TypeError: 'ArrayManager' object is not subscriptable

Super Moderator
avatar
加入于:
帖子: 85
声望: 8

你尝试对ArrayManager对象进行切片操作导致报错。ArrayManager本身不可直接切片,但可以通过其属性(如close_array)进行数组操作。

修改最后一行为:

self.am5.close_array = self.am5.close_array[:-1]

说明:

  1. ArrayManager对象包含close_array等属性用于存储具体数据
  2. 原始错误代码self.am5=self.am5[:-1]试图对整个对象切片,而ArrayManager未实现__getitem__方法
  3. 正确做法是直接操作其内部数组属性(如close_array

建议检查:

  • ArrayManager的其他数组属性(如open_array/high_array/low_array)
  • 是否需要同步更新其他技术指标计算
  • 数据截断对后续策略逻辑的影响
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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