VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 3
声望: 0

大神们请教下,我在测试简单的双均线时发现经常出现单边连续信号,哪位大神给有空帮忙看下只是什么问题导致的呢
源码如下:
`
class EmaStrategy(CtaTemplate):
""""""
fast_window = 30
slow_window = 150

fast_ema0 = 0.0
fast_ema1 = 0.0

slow_ema0 = 0.0
slow_ema1 = 0.0

parameters = ["fast_window", "slow_window"]
variables = ["fast_ema0", "fast_ema1", "slow_ema0", "slow_ema1"]

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    """"""
    super(EmaStrategy, self).__init__(cta_engine, strategy_name, vt_symbol, setting)

    self.bg = BarGenerator(
        self.on_bar,
        window=3,
        on_window_bar=self.on_3m_bar
    )
    self.am = ArrayManager(self.slow_window + 1)

def on_init(self):
    """策略初始化"""
    self.load_bar(10)  # use_database=True

def on_start(self):
    """策略开始"""

def on_stop(self):
    """停止策略"""

def on_tick(self, tick: TickData):
    """"""
    self.bg.update_tick(tick)

def on_bar(self, bar: BarData):
    """推送1m bar 合成策略所需的时间颗粒的bar"""
    self.bg.update_bar(bar)

def on_3m_bar(self, bar: BarData):
    """"""
    am = self.am
    am.update_bar(bar)
    if not am.inited:
        return

    # 计算指标
    fast_ema = am.ema(self.fast_window, True)
    self.fast_ema0 = fast_ema[-1]
    self.fast_ema1 = fast_ema[-2]

    slow_ema = am.ema(self.slow_window, True)
    self.slow_ema0 = slow_ema[-1]
    self.slow_ema1 = slow_ema[-2]

    # 信号产生条件
    cross_upward = self.fast_ema0 > self.slow_ema0 and self.fast_ema1 < self.slow_ema1
    cross_down = self.fast_ema0 < self.slow_ema0 and self.fast_ema1 > self.slow_ema1

    if cross_upward:
        print(bar.datetime, "金叉")

    elif cross_down:
        print(bar.datetime, "死叉")

`

print结果:

description

Member
avatar
加入于:
帖子: 1653
声望: 121

ArrayManager长度太短了,ema指标的计算对于起始数据是强依赖的,短了就会造成结果变化

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

沪公网安备 31011502017034号

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