三重滤网交易系统(基于Backtrader实现)

定义与核心理念

三重滤网交易系统由亚历山大·埃尔德博士(Alexander Elder)于1985年设计,是一种结合多时间框架和多种技术指标的交易策略。三重滤网系统的理念是,在不同时间结构之下,运用追踪趋势指标与震荡指标对相关金融工具进行分析。

技术指标分类

  • 第一类是追踪趋势指标,或者称之为“顺势指标”,如移动平均线、平滑异同移动平均线、定向指标等。这些指标随着市场行情的升降而升降,同时当行情在一定范围内波动时,此类指标也同样进行横盘的调整。

  • 第二类指标被称之为震荡指标,或摆荡指标,如产品价格通道、强力指标、随机指标、埃尔德线等。此类指标主要用于判明相关金融工具是否处于超卖或超买的状态,捕捉相关价格在升势和降势当中的反转行情。

  • 第三类指标是综合指标,主要包括看涨共识、交易者的态度、新高与新低指标等。其主要作用是判明市场交易群体的情绪变化,把握相关市场行情升降的总体趋势。

三重滤网的具体构成

三重滤网交易系统通过三个不同时间框架的滤网来筛选交易机会,每个滤网对应不同的市场趋势层级:

  1. 第一重滤网(长期趋势,市场潮汐)

    • 作用:确定市场的主要趋势方向。
    • 工具:通常使用周线或月线的MACD柱或指数加权移动平均线(EMA)。
    • 逻辑:采用顺势指标辨识长期的趋势。如果周线MACD柱向上运行,表示市场处于上升趋势,适合做多;反之,则适合做空。
  2. 第二重滤网(中期趋势,市场波浪)

    • 作用:在中期时间框架内寻找与长期趋势逆向的回调或反弹机会。
    • 工具:使用日线或小时线的震荡指标,如RSI、随机振荡器(Stochastic Oscillator)等。
    • 逻辑:运用日线图上的摆荡指标,在周线的上升趋势中,利用日线的跌势寻找买进机会。在周线的下降趋势中,利用日线的涨势寻找放空机会。例如,若长期趋势向上,当RSI指标进入超卖区域(如RSI低于30),则可能是一个中期买入信号。
  3. 第三重滤网(短期趋势,盘中突破)

    • 作用:在短期时间框架内寻找具体的入场时机。
    • 工具:使用小时图或更短周期的图表,结合价格突破信号。
    • 逻辑:该层网是辨认顺着潮汐方向的涟漪,它根据盘中的价格行为设定进场点。例如,在中期趋势确认后,若价格突破短期阻力位(如前一根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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值