Estrategia de negociación de tendencia de Ruda Momentum

El autor:¿ Qué pasa?, Fecha: 2024-04-03 15:16:47
Las etiquetas:El EMAVehículo de transporte

img

Resumen general

La estrategia de trading de tendencia de Ruda Momentum es una estrategia de trading cuantitativa basada en indicadores de impulso y tendencia. La estrategia utiliza indicadores como OBV (On Balance Volume), EMA (Exponential Moving Average), y candlestick body ratio para determinar las señales de compra y venta. Cuando la EMA a corto plazo cruza por encima de la EMA a largo plazo, OBV alcanza un nuevo máximo, y la relación del cuerpo de las velas es mayor que el umbral establecido, la estrategia compra al precio de apertura del día siguiente; cuando el precio cae por debajo del precio de stop-loss o el precio de cierre cae por debajo de la EMA a corto plazo, la estrategia cierra la posición.

Principio de la estrategia

  1. Calcular dos líneas de EMA con parámetros de 5 para la EMA a corto plazo y 21 para la EMA a largo plazo.
  2. Cuando el OBV alcanza un máximo de 10 días, el impulso alcista se considera fuerte.
  3. Cuando la relación del cuerpo es mayor que el umbral establecido (por defecto 50%), la tendencia se considera establecida.
  4. Cuando la tendencia es al alza, el impulso alcista es fuerte y la tendencia se establece, la estrategia compra al precio de apertura del día siguiente con un precio de stop-loss establecido en el mínimo del mínimo del día actual y el precio de apertura menos 1%.
  5. Cuando el precio cae por debajo del precio de stop-loss o el precio de cierre cae por debajo de la EMA a corto plazo, la estrategia cierra la posición.

Análisis de ventajas

  1. Al combinar indicadores de tendencia e impulso, la estrategia puede capturar instrumentos fuertes.
  2. El uso del precio de apertura del día siguiente para comprar y el stop-loss dinámico puede evitar algunas rupturas falsas.
  3. Las condiciones de stop loss y take profit son claras y el riesgo es controlable.

Análisis de riesgos

  1. Los indicadores de tendencia e impulso presentan un retraso, lo que puede llevar a comprar a precios altos y a detener las pérdidas prematuras.
  2. Los parámetros fijos carecen de adaptabilidad y el rendimiento puede variar significativamente en diferentes condiciones de mercado.
  3. Las pruebas de retroceso en un mercado único e instrumento requieren una mayor verificación de la estabilidad y aplicabilidad de la estrategia.

Dirección de optimización

  1. Optimizar los parámetros de los indicadores de tendencia e impulso para mejorar la sensibilidad y la eficacia de los indicadores.
  2. Introducir un juicio sobre el estado del mercado y ajustar dinámicamente los parámetros de acuerdo con las características actuales del mercado.
  3. Ampliar el ámbito de aplicación de las pruebas retroactivas, aumentar las pruebas en diferentes mercados e instrumentos para mejorar la solidez de la estrategia.
  4. Considere la posibilidad de introducir módulos de gestión de posiciones y control de riesgos para mejorar la relación riesgo/beneficio.

Resumen de las actividades

La Ruda Momentum Trend Trading Strategy es una estrategia de trading cuantitativa simple y fácil de usar que captura instrumentos fuertes y oportunidades de tendencia mediante la combinación de indicadores de tendencia e impulso. Sin embargo, la estrategia también tiene ciertas limitaciones, como el retraso del indicador y parámetros fijos.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © lhcbenac

//@version=5
strategy('Ruda_Strategy', overlay=true , initial_capital=5000 , pyramiding = 3, commission_type =  strategy.commission.cash_per_contract , commission_value =  1 )

//
// 
////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                    Otimizações                     //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
//
// 

////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                 Codigo Operacional                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
//
//
// Indica situação de Compra ou Venda

// Condição True or False 
YEAR_BT= input.int(1,title="Nº Anos ", group = "Backtest")

INPUT_ME1 = input.int(5,title="Momentum ", group = "RUDA")
INPUT_ME2 = input.int(21,title="Trend ", group = "RUDA")
INPUT_CORPO = input.int(50,title="CORPO ", group = "RUDA")/100



v_obv = ta.obv
v_med1 = ta.ema(close , INPUT_ME1)
v_med2 = ta.ema(close , INPUT_ME2)
valid_1 = v_med1 > v_med2 
valid_2 = v_obv >= ta.highest(v_obv[1], 10)
valid_3 = math.abs(close - open) / (high-low) > INPUT_CORPO
plot(v_med1)
plot(v_med2)

compra = valid_1 and valid_2 and  strategy.position_size == 0 and valid_3


var float v_minima_ref = na

dataInicio = timestamp(year(timenow) - YEAR_BT, month(timenow), dayofmonth(timenow), 00, 00)

// Variáveis globais
var float preco_entrada = na
var float preco_stop = na

if compra and time >= dataInicio and ta.change(time("D")) != 0 and ta.change(compra)  
    v_minima_ref := low
    preco_entrada := open
    preco_stop := math.min(low, open - 0.01 * open)
    strategy.entry("Compra", strategy.long , stop = preco_stop )
    if (not na(preco_entrada) and not na(preco_stop))
        label.new(x=bar_index, y= low * 0.9, text= "Dia: " + str.tostring(dayofmonth) + "\nPreço de Entrada: " + str.tostring(preco_entrada) + "\nPreço de Stop Loss: " + str.tostring(preco_stop), style=label.style_label_up, color=color.green)

    
    
// Lógica de saída
// Saída no stop loss
if (not na(preco_stop) and low < preco_stop and ta.change(low) < 0)
    strategy.close("Compra", comment="Saída no Stop")

// Saída no lucro
if (close < v_med1 and ta.change(close) < 0)
    strategy.close("Compra", comment="Saída na Media")

venda =( (not na(preco_stop) and low < preco_stop and ta.change(low) < 0) or (close < v_med1 and ta.change(close) < 0) ) and strategy.position_size > 0
codiff = compra ? 1 : venda ? -1 : na 
plotarrow(codiff, colorup=#00c3ff, colordown=#ff0062,title="Compra", maxheight=20, offset=0)






Relacionados

Más.