定义与核心理念
三重滤网交易系统由亚历山大·埃尔德博士(Alexander Elder)于1985年设计,是一种结合多时间框架和多种技术指标的交易策略。三重滤网系统的理念是,在不同时间结构之下,运用追踪趋势指标与震荡指标对相关金融工具进行分析。
技术指标分类
-
第一类是追踪趋势指标,或者称之为“顺势指标”,如移动平均线、平滑异同移动平均线、定向指标等。这些指标随着市场行情的升降而升降,同时当行情在一定范围内波动时,此类指标也同样进行横盘的调整。
-
第二类指标被称之为震荡指标,或摆荡指标,如产品价格通道、强力指标、随机指标、埃尔德线等。此类指标主要用于判明相关金融工具是否处于超卖或超买的状态,捕捉相关价格在升势和降势当中的反转行情。
-
第三类指标是综合指标,主要包括看涨共识、交易者的态度、新高与新低指标等。其主要作用是判明市场交易群体的情绪变化,把握相关市场行情升降的总体趋势。
三重滤网的具体构成
三重滤网交易系统通过三个不同时间框架的滤网来筛选交易机会,每个滤网对应不同的市场趋势层级:
-
第一重滤网(长期趋势,市场潮汐)
- 作用:确定市场的主要趋势方向。
- 工具:通常使用周线或月线的MACD柱或指数加权移动平均线(EMA)。
- 逻辑:采用顺势指标辨识长期的趋势。如果周线MACD柱向上运行,表示市场处于上升趋势,适合做多;反之,则适合做空。
-
第二重滤网(中期趋势,市场波浪)
- 作用:在中期时间框架内寻找与长期趋势逆向的回调或反弹机会。
- 工具:使用日线或小时线的震荡指标,如RSI、随机振荡器(Stochastic Oscillator)等。
- 逻辑:运用日线图上的摆荡指标,在周线的上升趋势中,利用日线的跌势寻找买进机会。在周线的下降趋势中,利用日线的涨势寻找放空机会。例如,若长期趋势向上,当RSI指标进入超卖区域(如RSI低于30),则可能是一个中期买入信号。
-
第三重滤网(短期趋势,盘中突破)
- 作用:在短期时间框架内寻找具体的入场时机。
- 工具:使用小时图或更短周期的图表,结合价格突破信号。
- 逻辑:该层网是辨认顺着潮汐方向的涟漪,它根据盘中的价格行为设定进场点。例如,在中期趋势确认后,若价格突破短期阻力位(如前一根K线的最高价),则构成入场信号。
止损
“三重滤网”交易系统采用非常紧密的停损策略,这是一种严格的风险控制手段。紧密的停损意味着交易者在进入交易后,会尽快设定一个相对较近的止损点,以便在市场走势不利于自己时,能够迅速止损出场,避免损失进一步扩大。这种策略体现了交易者对风险的高度警惕和严格管理,力求将潜在的损失控制在一个较小的范围内。
止损方案的核心是紧密止损:
- 买入止损设置:止损点在交易当天或前一天的低价下方一档处。这意味着一旦价格跌破这个点,交易者会立即止损出场。
- 卖空止损设置:止损点在交易当天或前一天的高价位上方一档处。一旦价格超过这个点,交易者也会止损平仓。
这种紧密止损的优点是能够有效控制单次交易的损失,但缺点是可能会在市场小幅波动时被止损出场,从而错过后续的大幅波动收益。
保守的交易者应该根据“三重滤网”交易系统的第一个讯号进场买进或放空,然后继续持有部位,直到主要趋势发生反转或被停损出场。积极的交易者可以继续采纳日线摆荡指标的每个新讯号,利用既有部位的获利部分进行加码。
优势与局限性
- 优势:通过多层过滤,减少错误信号,适应多种市场环境。
- 局限性:系统依赖于技术指标,可能在极端市场条件下失效;需要交易者对指标有深入理解。
应用场景
三重滤网交易系统适用于多种金融市场,包括股票、期货、外汇等。其优势在于:
- 多时间框架分析:结合长期、中期和短期趋势,避免单一时间框架的局限性。
- 减少虚假信号:通过多层过滤,筛选出更可靠的交易机会。
- 灵活性:可以根据交易者的风格和偏好调整时间框架和指标。
实战应用示例
假设一位交易者希望在日线级别进行交易:
- 第一重滤网:使用周线MACD柱判断主要趋势。若MACD柱向上,则市场处于上升趋势。
- 第二重滤网:在日线图上,当RSI指标进入超卖区域(如RSI低于30),确认中期回调结束。
- 第三重滤网:在小时图上,当价格突破短期阻力位时,确认入场信号。
class TripleScreenStrategy(bt.Strategy):
params = (
('macd_fast', 12),
('macd_slow', 26),
('macd_signal', 9),
('rsi_period', 14), # RSI周期
('rsi_oversold', 30), # RSI超卖阈值调整为30
('resistance_period', 1), # 阻力位计算周期(日线)
('take_profit', 1.10), # 止盈10%
('stop_loss', 0.95), # 止损5%
)
def __init__(self):
# 日行情数据
self.data_daily = self.datas[0]
# 周行情数据
self.data_weekly = self.datas[1]
# 周线MACD
self.macd_weekly = bt.indicators.MACD(
self.data_weekly.close,
period_me1=self.params.macd_fast,
period_me2=self.params.macd_slow,
period_signal=self.params.macd_signal
)
# 添加日线数据的指标
self.rsi_daily = bt.indicators.RSI(
self.data_daily.close,
period=self.params.rsi_period
)
# 日线短期阻力位(过去N日最高价)
self.resistance = bt.indicators.Highest(
self.data_daily.high,
period=self.params.resistance_period
)
# 记录交易订单
self.order = None
def next(self):
try:
# 长期趋势 MACD 指标
macd_cross_up = self.macd_weekly.macd[0] > self.macd_weekly.signal[0]
# 中期趋势 RSI < 30 时视为买入信号
rsi_oversold = self.rsi_daily[0] < self.params.rsi_oversold
# 短期趋势 若价格突破前一根 K 线的最高价,则视为买入信号
price_breakout = self.data_daily.close[0] > self.resistance
# 买入信号
if (macd_cross_up and
rsi_oversold and
price_breakout):
size = self.broker.getcash() // self.data.close[0]
self.order = self.buy(size=size)
# 持仓卖出信号
if self.position:
# 止盈或止损 止盈10%,止损5%
if self.data_daily.close[0] >= self.position.price * self.params.take_profit:
self.order = self.close()
elif self.data_daily.close[0] <= self.position.price * self.params.stop_loss:
self.order = self.close()
elif self.macd_weekly.macd[0] < self.macd_weekly.signal[0]: # 周线MACD趋势反转
self.order = self.close()
except Exception as e:
print(f"策略执行异常: {str(e)}")
def notify_order(self, order):
# 订单状态跟踪
if order.status in [order.Completed]:
if order.isbuy():
print(
f"买入 @ 价格: {order.executed.price:.2f}, "
f"成本: {order.executed.value:.2f}, "
f"佣金: {order.executed.comm:.2f}"
)
elif order.issell():
print(
f"卖出 @ 价格: {order.executed.price:.2f}, "
f"收益: {order.executed.value:.2f}, "
f"佣金: {order.executed.comm:.2f}"
)
self.order = None