Backtrader实现三层滤网策略‌

Backtrader实现三层滤网策略‌

1. 三层滤网策略‌

三层滤网策略‌是一种综合运用不同时间框架和技术指标进行交易决策的方法,由亚历山大·埃尔德发明。这一策略的核心在于通过三个层次的过滤或测试来评估交易机会,以确保交易的成功率。这三个层次分别关注长期趋势、短期波动以及入场时机,具体如下:

‌第一层滤网‌:在大周期(如周线图)中,使用趋势型指标来判断主要趋势的运行方向,这被称为“市场潮汐”或“大周期的趋势”。例如,在周线图上分析趋势,如果趋势向上,则表明市场整体处于上升趋势中。
‌第二层滤网‌:在小周期(如日线图)中,使用震荡型指标来识别与主要趋势逆向的次级走势。这被称为“市场波浪”或“小周期的波动”。例如,在日线图上,当周线趋势向上时,日线图上的下跌可以被视为买入机会。
‌第三层滤网‌:当第一、二层滤网条件均满足后,关注小周期中的突破型K线作为入场信号。这被称为“盘中突破”或具体的入场时机。例如,当大周期趋势向上且小周期摆荡指标向下时,利用追踪型停止买单捕捉盘中的向上突破作为买入信号。

三层滤网策略通过这种多层次的分析,旨在提高交易决策的准确性和效率。它不仅考虑了市场的长期趋势,还关注了短期波动和具体的入场时机,从而帮助交易者更好地把握市场机会。

2. 实现
(1)代码
class ThreeScreenStrategy(bt.Strategy):
    params = (
        ('middleperiod', 15),  # 中期移动平均线周期
        ('longperiod', 60),  # 长期移动平均线周期
        ('shortperiod', 5),  # 短期移动平均线周期
        ('printlog',False),  # 日志输出标志
    )

    def __init__(self):
        self.dataclose = self.data.close
        self.order = None
        self.printlog = self.p.printlog

        # 添加指标
        self.sma_long = bt.indicators.SimpleMovingAverage(
            self.data.close, period=self.params.longperiod)
        self.sma_mid = bt.indicators.SimpleMovingAverage(
            self.data.close, period=self.params.middleperiod)
        self.sma_short = bt.indicators.SimpleMovingAverage(
            self.data.close, period=self.params.shortperiod)

    def next(self):
        if self.order:
            return

        # 第一层:长期趋势
        if self.dataclose[0] > self.sma_long[0] :
            long_term_trend = 'UP'
        else:
            long_term_trend = 'DOWN'

        # 第二层:中期趋势
        if self.dataclose[0] > self.sma_mid[0] :
            mid_term_trend = 'UP'
        else:
            mid_term_trend = 'DOWN'

        # 第三层:短期买卖信号
        if self.dataclose[0] > self.sma_short[0] :
            short_term_trend = 'UP'
        else :
            short_term_trend = 'DOWN'

        # 三重条件共同判断,都满足才能执行交易
        # 买入
        if short_term_trend == 'UP' and long_term_trend == 'UP' and mid_term_trend == 'UP':
            if not self.position :
                self.buy()
        # 卖出
        elif short_term_trend == 'DOWN'  and long_term_trend == 'DOWN' and mid_term_trend == 'DOWN':    
            if self.position :
                self.sell()
            
    def notify_order(self, order):
        if order.status in [order.Submitted, order.Accepted]:
            return

        if order.status in [order.Completed]:
            if order.isbuy():
                self.log(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值