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

在初始化 中,设置
self.bg_weekly = BarGenerator(
self.on_bar, 1, self.on_weekly_bar, Interval.WEEKLY
)
onbar的时候
def on_tick(self, tick: TickData):
"""处理Tick数据"""
self.bg_minute.update_tick(tick)

def on_bar(self, bar: BarData):
    """处理基础K线数据"""
    self.bg_minute.update_bar(bar)
    self.bg_weekly.update_bar(bar)

但是on_weekly_bar没有被调用过。救助

Member
avatar
加入于:
帖子: 5541
声望: 334

bg目前没有提供周线合成支持

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

请问一下,5日线合成也没有激活 from vnpy_ctastrategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
from vnpy.trader.constant import Interval
from datetime import time

class FourDayMacdStrategy(CtaTemplate):
"""4天合成K线的MACD金叉死叉策略"""

author = "Your Name"

# 策略参数
fast_window = 12      # MACD快线参数
slow_window = 26      # MACD慢线参数
signal_window = 9     # MACD信号线参数
fixed_size = 1        # 每次交易数量

# 策略变量
macd = 0              # MACD值
signal = 0            # 信号线值
hist = 0              # 柱状图值

parameters = ["fast_window", "slow_window", "signal_window", "fixed_size"]
variables = ["macd", "signal", "hist"]

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """初始化策略"""
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)

    # 创建4天的合成K线生成器,使用daily_end参数指定每日收盘时间
    self.bg_4day = BarGenerator(
        on_bar=self.on_bar,
        window=4,
        on_window_bar=self.on_4day_bar,
        interval=Interval.DAILY,
        daily_end=time(15, 0)  # 正确的参数名是daily_end
    )

    # 创建4天K线的数组管理器
    self.am_4day = ArrayManager(size=100)  # 增加size参数确保足够容量

def on_init(self):
    """策略初始化回调"""
    self.write_log("策略初始化")
    # 加载足够的历史数据(建议至少是窗口大小的10倍)
    self.load_bar(40)  # 40天数据可生成10根4日K线

def on_start(self):
    """策略启动回调"""
    self.write_log("策略启动")

def on_stop(self):
    """策略停止回调"""
    self.write_log("策略停止")

def on_tick(self, tick: TickData):
    """Tick更新回调"""
    self.bg_4day.update_tick(tick)

def on_bar(self, bar: BarData):
    """1天K线更新回调"""
    self.bg_4day.update_bar(bar)

def on_4day_bar(self, bar: BarData):
    """4天合成K线更新回调"""
    # 更新数组管理器
    self.am_4day.update_bar(bar)
    if not self.am_4day.inited:
        return

    # 计算MACD指标
    macd, signal, hist = self.am_4day.macd(
        self.fast_window, 
        self.slow_window, 
        self.signal_window, 
        array=True
    )

    self.macd = macd[-1]
    self.signal = signal[-1]
    self.hist = hist[-1]

    # 获取当前持仓
    pos = self.pos

    # 交易逻辑
    if pos == 0:  # 无持仓
        # 金叉做多信号
        if macd[-1] > signal[-1] and macd[-2] <= signal[-2] and hist[-1] > 0:
            self.buy(bar.close_price, self.fixed_size)
        # 死叉做空信号
        elif macd[-1] < signal[-1] and macd[-2] >= signal[-2] and hist[-1] < 0:
            self.short(bar.close_price, self.fixed_size)

    elif pos > 0:  # 持有多头
        # 死叉平多信号
        if macd[-1] < signal[-1] and macd[-2] >= signal[-2] and hist[-1] < 0:
            self.sell(bar.close_price, abs(pos))

    elif pos < 0:  # 持有空头
        # 金叉平空信号
        if macd[-1] > signal[-1] and macd[-2] <= signal[-2] and hist[-1] > 0:
            self.cover(bar.close_price, abs(pos))

    self.put_event()

def on_order(self, order: OrderData):
    """委托更新回调"""
    pass

def on_trade(self, trade: TradeData):
    """成交更新回调"""
    self.put_event()

def on_stop_order(self, stop_order: StopOrder):
    """停止单更新回调"""
    pass
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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