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

请教一下, 在CTA策略中,
定义了实例变量
def on_init(self):
self.buy_price = 0.0
self.sell_price = 0.0
def on_tick(self, tick: TickData) -> None:
self.buy_price = tick.bid_price_1
self.sell_price = tick.ask_price_1
在bar环节调用,仍然报错
def on_15min_bar(self, bar: BarData):
if self.pos == 0:
self.buy(buy_price , fixed_size)
报错如下:AttributeError: 'MA_logtest' object has no attribute 'buy_price'。
请问是什么原因?

Member
avatar
加入于:
帖子: 5568
声望: 335

贴一下完整报错截图吧

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

在on_15min_bar环节打印测试了一下,没有
2025-07-23 10:16:28.005 | INFO | CtaStrategy | [MA_logtest] 触发异常已停止
Traceback (most recent call last):
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/engine.py", line 619, in call_strategy_func
func()
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 108, in on_init
self.load_bar(
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/template.py", line 308, in load_bar
callback(bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 137, in on_bar
self.bg_15min.update_bar(bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy/trader/utility.py", line 266, in update_bar
self.update_bar_minute_window(bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy/trader/utility.py", line 306, in update_bar_minute_window
self.on_window_bar(self.window_bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 144, in on_15min_bar
print(self.buy_price)
^^^^^^^^^^^^^^
AttributeError: 'MA_logtest' object has no attribute 'buy_price'

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

on_bar打印了一下,结果如下:
Traceback (most recent call last):
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/engine.py", line 619, in call_strategy_func
func()
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 108, in on_init
self.load_bar(
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/template.py", line 308, in load_bar
callback(bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 138, in on_bar
print(self.buy_price)
^^^^^^^^^^^^^^

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

在on_tick环节打印是有正常数据的

Member
avatar
加入于:
帖子: 5568
声望: 335

你打印的是self.buy_price不是buy_price,但是策略类没有给self.buy_price这个全局变量定义

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

麻烦问下要怎么修改呢?在tick环节实例化之后,不能在bar中调用吗?
Traceback (most recent call last):
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/engine.py", line 619, in call_strategy_func
func()
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 109, in on_init
self.load_bar(
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/template.py", line 308, in load_bar
callback(bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 139, in on_bar
self.bg_15min.update_bar(bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy/trader/utility.py", line 266, in update_bar
self.update_bar_minute_window(bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy/trader/utility.py", line 306, in update_bar_minute_window
self.on_window_bar(self.window_bar)
File "/opt/anaconda3/envs/VNT4/lib/python3.12/site-packages/vnpy_ctastrategy/strategies/MA_15min.py", line 187, in on_15min_bar
self.short(self.short_price, 1)
^^^^^^^^^^^^^^^^
AttributeError: 'MA_logtest' object has no attribute 'short_price'

Member
avatar
加入于:
帖子: 5568
声望: 335

你要局部创建就不要加self,要用全局变量就要在策略init函数定义呀

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

沪公网安备 31011502017034号

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