Estrategia de trading de tendencia de impulso de Ruda

EMA OBV
Fecha de creación: 2024-04-03 15:16:47 Última modificación: 2024-04-03 15:16:47
Copiar: 0 Número de Visitas: 700
1
Seguir
1617
Seguidores

Estrategia de trading de tendencia de impulso de Ruda

Descripción general

La estrategia de trading de tendencia dinámica de Ruda es una estrategia de trading cuantitativa basada en la dinámica y los indicadores de tendencia. La estrategia utiliza indicadores como el OBV (Volumen de Balance), EMA (Exponencial Moving Average) y el porcentaje de entidades de la línea K para determinar el momento de comprar y vender.

Principio de estrategia

  1. Calcular dos líneas de EMA, con parámetros de EMA a corto plazo de 5 y EMA a largo plazo de 21. Cuando se usa un EMA a largo plazo sobre un EMA a corto plazo, se considera que la tendencia es al alza, y al contrario, la tendencia es a la baja.
  2. En el cálculo de la OBV, se considera que la energía dinámica es fuerte cuando la OBV alcanza un máximo de 10 días.
  3. Calcula el porcentaje de entidades de la línea K, cuando el porcentaje de entidades es mayor que el umbral establecido (el 50% por defecto), se considera que la tendencia está establecida.
  4. Cuando la tendencia es ascendente, la dinámica es fuerte y la tendencia está establecida, la estrategia es comprar al precio de apertura del día siguiente, con el precio de parada de pérdida como mínimo el precio más bajo del día y el precio de apertura del 1%.
  5. La estrategia de liquidación se utiliza cuando el precio cae por debajo del precio de parada o el precio de cierre cae por debajo de la EMA a corto plazo.

Análisis de las ventajas

  1. La combinación de tendencias y indicadores de dinámica permite capturar las variedades más fuertes.
  2. Se pueden evitar algunos false breaks utilizando el precio de apertura del día siguiente de la compra y la parada dinámica.
  3. Las condiciones para detener y detener los daños son claras y los riesgos son controlables.

Análisis de riesgos

  1. El retraso en los indicadores de tendencia y dinámica, con la posibilidad de que se produzcan compras excesivas y pérdidas prematuras.
  2. Los parámetros son fijos, la falta de adaptabilidad, el rendimiento puede variar mucho en diferentes estados de mercado.
  3. La estabilidad y la aplicabilidad de la estrategia de la recuperación del mercado único y de las variedades están pendientes de una verificación adicional.

Dirección de optimización

  1. Optimización de los parámetros de los indicadores de tendencia y dinámica para mejorar la sensibilidad y eficacia de los indicadores.
  2. Introducción de los parámetros de ajuste del estado del mercado según la dinámica de las características del mercado actual.
  3. Ampliar el alcance de las respuestas, aumentar las pruebas en diferentes mercados y variedades, y mejorar la solidez de las estrategias.
  4. Considerar la introducción de un módulo de gestión de posiciones y control de riesgos para mejorar la relación riesgo-ganancias.

Resumir

La estrategia de comercio de tendencias dinámicas de Ruda es una estrategia de comercio cuantitativa simple y fácil de usar que puede capturar variedades y oportunidades de tendencias fuertes a través de la combinación de tendencias y indicadores de tendencias. Sin embargo, la estrategia también tiene ciertas limitaciones, como el retraso de los indicadores, la fijación de parámetros, etc.

Código Fuente de la Estrategia
/*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)