资源加载中... loading...

基于抛物线指标和移动平均线的多空趋势判断策略

Author: ChaoZhang, Date: 2024-03-27 17:59:11
Tags:

基于抛物线指标和移动平均线的多空趋势判断策略

概述

EPTS策略是一种基于抛物线指标(Parabolic SAR)和两条不同周期移动平均线(EMA)的趋势跟踪策略。该策略利用抛物线指标判断当前市场的趋势方向,同时结合快慢两条移动平均线的相对位置关系,产生开仓信号。策略的主要思想是”趋势跟随”,即在上升趋势中做多,在下降趋势中做空,以期获得稳定的收益。

策略原理

  1. 抛物线指标(Parabolic SAR)用于判断当前市场趋势的方向。当抛物线在K线上方时,市场处于下降趋势;当抛物线在K线下方时,市场处于上升趋势。

  2. 两条不同周期的指数移动平均线(EMA)用于确认趋势和产生开仓信号。本策略使用5日EMA和20日EMA。当5日EMA在20日EMA上方时,认为市场处于上升趋势;反之,则认为市场处于下降趋势。

  3. 开仓条件:当抛物线和EMA均显示上升趋势时,产生做多信号;当抛物线和EMA均显示下降趋势时,产生做空信号。

  4. 平仓条件:当抛物线突破K线时,平掉当前持仓,等待下一个开仓信号。

  5. 止损:开仓时,将止损价格设置为当前抛物线的位置。随着抛物线的移动,动态调整止损位置,实现移动止损。

通过抛物线指标和EMA的结合使用,EPTS策略能够较好地捕捉市场趋势,并在趋势反转时及时平仓,控制风险。同时,动态止损的设置进一步降低了策略的回撤风险。

优势分析

  1. 趋势跟踪:EPTS策略基于趋势跟随的思想,能够有效捕捉市场的主要趋势,获取稳定收益。

  2. 动态止损:策略采用抛物线作为动态止损位,随着趋势的发展不断调整止损位置,有效控制了风险。

  3. 双重确认:通过抛物线和EMA的双重确认,提高了开仓信号的可靠性,减少了假信号。

  4. 简单易用:策略逻辑清晰,参数设置简单,易于理解和实施。

风险分析

  1. 震荡市:在震荡市场中,趋势不明显,可能会产生较多的假信号,导致频繁交易和较大回撤。

  2. 趋势反转:当市场趋势突然反转时,策略可能会延迟平仓,承受一定的损失。

  3. 参数设置:策略的表现受到参数设置的影响,不同的参数可能会导致不同的结果。

优化方向

  1. 引入更多指标:在现有的抛物线和EMA基础上,引入其他趋势类指标,如MACD、ADX等,提高趋势判断的准确性。

  2. 优化入场条件:对开仓条件进行优化,如考虑价格与EMA的距离、交易量等因素,提高开仓信号的质量。

  3. 动态参数优化:根据市场状况的变化,动态调整策略参数,如抛物线的步长、EMA的周期等,以适应不同的市场环境。

  4. 加入仓位管理:根据市场趋势的强度和账户风险,动态调整仓位大小,在控制风险的同时提高收益。

总结

EPTS策略是一个基于抛物线指标和移动平均线的趋势跟踪策略,通过捕捉市场主要趋势,并及时平仓以控制风险,从而获取稳定收益。该策略逻辑清晰,易于实施,适合趋势明显的市场环境。但在震荡市中,策略可能面临较大回撤风险,需要结合其他指标和优化方法来提高策略的适应性和稳健性。此外,合理的参数设置和仓位管理也是策略成功运行的关键。总的来说,EPTS策略为趋势跟踪提供了一个简单有效的思路,但仍需根据实际市场状况进行优化和改进,以期获得更好的策略表现。


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("febin2024", overlay=true)

// Parabolic SAR Parameters
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)

// EMA Parameters
ema20_length = input(20, title="EMA 20 Length")
ema5_length = input(5, title="EMA 5 Length")

// Calculate EMAs
ema20 = ta.ema(close, ema20_length)
ema5 = ta.ema(close, ema5_length)

// Parabolic SAR Logic
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na

if bar_index > 0
    firstTrendBar = false
    SAR := nextBarSAR
    if bar_index == 1
        float prevSAR = na
        float prevEP = na
        lowPrev = low[1]
        highPrev = high[1]
        closeCur = close
        closePrev = close[1]
        if closeCur > closePrev
            uptrend := true
            EP := high
            prevSAR := lowPrev
            prevEP := high
        else
            uptrend := false
            EP := low
            prevSAR := highPrev
            prevEP := low
        firstTrendBar := true
        SAR := prevSAR + start * (prevEP - prevSAR)
    if uptrend
        if SAR > low
            firstTrendBar := true
            uptrend := false
            SAR := math.max(EP, high)
            EP := low
            AF := start
    else
        if SAR < high
            firstTrendBar := true
            uptrend := true
            SAR := math.min(EP, low)
            EP := high
            AF := start
    if not firstTrendBar
        if uptrend
            if high > EP
                EP := high
                AF := math.min(AF + increment, maximum)
        else
            if low < EP
                EP := low
                AF := math.min(AF + increment, maximum)
    if uptrend
        SAR := math.min(SAR, low[1])
        if bar_index > 1
            SAR := math.min(SAR, low[2])
    else
        SAR := math.max(SAR, high[1])
        if bar_index > 1
            SAR := math.max(SAR, high[2])
    nextBarSAR := SAR + AF * (EP - SAR)
    if barstate.isconfirmed
        if uptrend
            strategy.entry("ParSE", strategy.short, stop=nextBarSAR, comment="ParSE")
            strategy.cancel("ParLE")
        else
            strategy.entry("ParLE", strategy.long, stop=nextBarSAR, comment="ParLE")
            strategy.cancel("ParSE")

// Plot Parabolic SAR
plot(SAR, style=plot.style_cross, linewidth=3, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=3, color=color.aqua)

// Plot EMAs
plot(ema20, color=color.blue, linewidth=2, title="EMA 20")
plot(ema5, color=color.red, linewidth=2, title="EMA 5")

// Equity Plot
plot(strategy.equity, title="Equity", color=color.green, linewidth=2)


更多内容