Estrategias comerciales de seguimiento de tendencias a corto plazo


Fecha de creación: 2024-01-04 17:52:21 Última modificación: 2024-01-04 17:52:21
Copiar: 0 Número de Visitas: 588
1
Seguir
1621
Seguidores

Estrategias comerciales de seguimiento de tendencias a corto plazo

Descripción general

Esta estrategia se basa en el indicador de tendencia ADX, el índice de tendencia promedio y la combinación de líneas medias, para realizar el juicio y el seguimiento de la tendencia. Cuando se determina que la tendencia se invierte, se utiliza una operación de ruptura para realizar operaciones de línea corta.

Principio de estrategia

  1. Utilice el índice de tendencia promedio de ADX para determinar la tendencia. Cuando el ADX es mayor que 20, indica que se encuentra en una situación de tendencia.
  2. La EMA es un indicador de tendencia, el EMA Gold Fork muestra una tendencia alcista y el EMA Dead Fork muestra una tendencia bajista.
  3. VWAP como un precio de referencia importante, el precio en la parte superior de VWAP es el mercado de más de una cabeza, la parte inferior es el mercado de cabeza vacía.
  4. Basado en la combinación de los indicadores mencionados anteriormente, juzgue la tendencia y la reversión del mercado, realice operaciones de ruptura, siga la tendencia y realice operaciones de corto plazo.

Análisis de las ventajas

  1. La combinación de varios indicadores para determinar la dirección de la tendencia, para determinar con precisión las grandes tendencias.
  2. VWAP como un precio de referencia importante para evitar el comercio en zonas no válidas.
  3. El ADX decide que la tendencia existe y entonces actúa para reducir las transacciones no válidas.
  4. La brecha tiene una alta tasa de éxito y está en línea con la tendencia.

Análisis de riesgos

  1. Existe la probabilidad de que el fracaso en la ruptura cause un stop loss. Se puede reducir el riesgo optimizando la posición del stop loss.
  2. El número de transacciones es mayor, y las transacciones individuales pueden tener pérdidas. Se puede ajustar adecuadamente el número de posiciones para reducir la pérdida por transacción.
  3. La elección de la hora y el tipo de transacción también influye en el rendimiento de la estrategia. Se pueden probar diferentes horas de transacción y diferentes tipos de transacción.

Dirección de optimización

  1. Optimización de los parámetros de ADX para encontrar mejores tendencias de diferenciación y valores de ADX consolidados.
  2. Optimice la combinación de parámetros de la línea media para encontrar una combinación de líneas medias que represente mejor la tendencia.
  3. Optimización de la posición de la pérdida. La ampliación adecuada del rango de pérdida para evitar un costo de pérdida excesivo.
  4. Optimizar el tamaño de la posición. Reducir el riesgo de una sola transacción.

Resumir

Esta estrategia utiliza una combinación de indicadores de línea media, indicadores de juicio de tendencia y precios de referencia importantes para juzgar con precisión las tendencias mayores; y cuando se juzga que la tendencia se invierte, se utiliza una operación de ruptura para seguir la tendencia y realizar operaciones de línea corta. A través de la optimización de parámetros, se puede mejorar aún más el rendimiento de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-27 00:00:00
end: 2023-12-29 23:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mariocastel

//@version=5
strategy("Wave Rider", overlay=true, initial_capital = 100000)

session = input(defval = "1400-1500", title = "Session Time")
t = not na(time(timeframe.period,session))
RR = input.float(1.5, "Risk to reward", step=0.5)
var bool movetoBE = input(false, "Move to Break Even")
BE = input.float(1, "Break Even at", step=0.5)

vwap_mult = 0.001 * input(3, "VWAP Multiplier")
aboveVWAP = ta.vwap(close) * (1 + vwap_mult)
belowVWAP = ta.vwap(close) * (1 - vwap_mult)
sym = input("BTC_USDT:swap", "VWAP Source")

QQQaboveVWAP = request.security(sym, "3", aboveVWAP)
QQQbelowVWAP = request.security(sym, "3", belowVWAP)
QQQclose = request.security(sym, "3", close)

ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema60 = ta.ema(close, 60)
ema9 = ta.ema(close, 9)

opentrades = strategy.opentrades > 0

aboveEMA = close > ema60
belowEMA = close < ema60

uptrend = aboveEMA and aboveEMA[1] and aboveEMA[2] and aboveEMA[3] and aboveEMA[4] and aboveEMA[5] and aboveEMA[6] and aboveEMA[7] and aboveEMA[8] and aboveEMA[9] and aboveEMA[10] and aboveEMA[11] and aboveEMA[12] and aboveEMA[13] and aboveEMA[14] and aboveEMA[15] and aboveEMA[16] and aboveEMA[17] and aboveEMA[18] and aboveEMA[19] and aboveEMA[20] and aboveEMA[21] and aboveEMA[22] and aboveEMA[23] and aboveEMA[24] and aboveEMA[25] and aboveEMA[26] and aboveEMA[27] and aboveEMA[28] and aboveEMA[29]
downtrend = belowEMA and belowEMA[1] and belowEMA[2] and belowEMA[3] and belowEMA[4] and belowEMA[5] and belowEMA[6] and belowEMA[7] and belowEMA[8] and belowEMA[9] and belowEMA[10] and belowEMA[11] and belowEMA[12] and belowEMA[13] and belowEMA[14] and belowEMA[15] and belowEMA[16] and belowEMA[17] and belowEMA[18] and belowEMA[19] and belowEMA[20] and belowEMA[21] and belowEMA[22] and belowEMA[23] and belowEMA[24] and belowEMA[25] and belowEMA[26] and belowEMA[27] and belowEMA[28] and belowEMA[29]

buy = (low < ema20 and low > ema50 and close > ema9) and QQQclose > QQQaboveVWAP  or (low[1] < ema20 and low[1] > ema50 and close > ema9) and QQQclose > QQQaboveVWAP and uptrend
sell = (high > ema20 and high < ema50 and close < ema9) and QQQclose < QQQbelowVWAP  or (high[1] > ema20 and high[1] < ema50 and close < ema9) and QQQclose < QQQbelowVWAP and downtrend

var float entry = na
var float sl = na
var float qty = na
var float tp = na
var float be = na

if ema20 > ema50 and ema9 > ema20 
    if buy and not opentrades and t and uptrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(close - sl) * 1
        if close - sl > syminfo.mintick*300
            tp := close + ((close - sl)*1)
        else 
            tp := close + ((close - sl)*RR)
        be := close + ((close - sl)*BE)
        strategy.entry("Buy", strategy.long, qty=qty)
        strategy.exit("Close Buy", "Buy",qty=qty, stop=sl, limit=tp)

if ema20 < ema50 and ema9 < ema20 
    if sell and not opentrades and t and downtrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(sl - close) * 1
        if sl - close > syminfo.mintick*300
            tp := close - ((sl - close)*1)
        else
            tp := close - ((sl - close)*RR)
        be := close - ((sl - close)*BE)
        strategy.entry("Sell", strategy.short, qty=qty)
        strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)

// Adjust BEs
if movetoBE == true
    if strategy.position_size > 0
        if high >= be
            sl := entry
            strategy.cancel("Close Buy")
            strategy.exit("Close Buy", "Buy", qty=qty, stop=sl, limit=tp)   
    if strategy.position_size < 0
        if low <= be
            sl := entry
            strategy.cancel("Close Sell")  
            strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)  


EoD_time = timestamp(year, month, dayofmonth, 15, 58, 00)
EoD = time == EoD_time
if EoD
    strategy.close_all()

barcolor(color=buy ? color.rgb(191, 255, 131): na)
barcolor(color=sell ? color.rgb(255, 149, 149): na)
ema20plot = plot(ema20, color=color.rgb(168, 131, 131, 55))
ema50plot = plot(ema50, color=color.black)
fill(ema20plot, ema50plot, color=color.rgb(168, 131, 131, 85))
plot(ema9, color=color.red)
plot(ema60, color=color.purple)
plot(QQQaboveVWAP)
plot(QQQbelowVWAP)
plotshape(uptrend, style=shape.triangleup, location=location.belowbar, color=color.black)
plotshape(downtrend, style=shape.triangledown, location=location.abovebar, color=color.black)