本文介绍了一个基于G-Channel指标和指数移动平均线(EMA)的趋势跟踪交易策略。该策略利用G-Channel指标判断当前市场趋势方向,并结合EMA指标的穿越来产生买卖信号。这个策略的主要思想是在上涨趋势中价格回调到EMA附近时买入,在下跌趋势中价格反弹到EMA附近时卖出,从而捕捉主要的价格趋势。
该策略的核心是G-Channel指标,该指标由Andrew Guppy首次提出,旨在判断当前价格走势的趋势方向。G-Channel指标由一条上轨、一条下轨和一条平均线组成。其中上轨连接近期价格的最高点,下轨连接近期价格的最低点,平均线是上下轨的算术平均。
当收盘价向上突破上轨时,意味着开始形成上升趋势;当收盘价向下突破下轨时,意味着开始形成下降趋势。该策略使用 barssince()
函数来计算最近一次向上突破和向下突破分别发生在多少根K线之前,两者中发生在最近的那个方向就是当前的趋势方向。
EMA是一种趋势跟踪指标,相比简单移动平均线,它的权重分布更倾向于近期价格,因此对价格变化的反应更加敏感。在上升趋势中,EMA往往位于价格下方,起到支撑作用;在下降趋势中,EMA往往位于价格上方,起到压力作用。
该策略的交易逻辑如下: - 当G-Channel指标显示当前处于上升趋势,且收盘价向下穿越EMA时产生买入信号,此时价格很可能经过回调后继续向上运行。 - 当G-Channel指标显示当前处于下降趋势,且收盘价向上穿越EMA时产生卖出信号,此时价格很可能经过反弹后继续向下运行。
本文介绍了一个基于G-Channel指标和EMA指标的趋势跟踪策略。该策略利用G-Channel准确判断当前市场趋势方向,并在趋势中利用价格对EMA的穿越来捕捉买卖机会。策略优势在于趋势跟踪能力强、适应性广,但同时也要警惕趋势转折、参数设置不当以及黑天鹅事件带来的风险。未来可以通过引入更多辅助指标、优化仓位管理、结合市场情绪指标等方式,进一步提升该策略的稳健性和盈利能力。总的来说,该策略思路清晰,原理简单易懂,适合进行二次开发和实盘应用,值得量化交易者参考和学习。
/*backtest start: 2023-03-05 00:00:00 end: 2024-03-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jonathan_422 //@version=4 strategy("G-Channel and EMA Strategy", shorttitle="G-EMA Strategy", overlay=true) // G-Channel settings length = input(100) src = input(close) // Calculating G-Channel a = 0.0 b = 0.0 a := max(src, nz(a[1])) - nz(a[1] - b[1]) / length b := min(src, nz(b[1])) + nz(a[1] - b[1]) / length avg = avg(a, b) // EMA settings emaLength = input(9, title="EMA Length") ema = ema(close, emaLength) // G-Channel buy/sell signals crossup = b[1] < close[1] and b > close crossdn = a[1] < close[1] and a > close bullish = barssince(crossdn) <= barssince(crossup) // Strategy logic buySignal = bullish and close < ema sellSignal = not bullish and close > ema // Plotting plot(ema, "EMA", color=color.orange) plot(avg, "Average", color=color.blue) // Plot buy/sell signals plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Strategy execution strategy.entry("Buy", strategy.long, when=buySignal) strategy.close("Buy", when=sellSignal)