Estrategia dinámica de posición de adición bidireccional

El autor:¿ Qué pasa?, Fecha: 2023-11-27 11:33:11
Las etiquetas:

img

Resumen general

Esta es una estrategia que toma posiciones en ambas direcciones mediante el uso de señales de fuertes avances en ambas direcciones.

Principio de la estrategia

Esta estrategia juzga la dirección del mercado basándose en las señales de dos velas fuertes consecutivas. Específicamente, calcula el porcentaje de aumento/disminución de cada velas. Cuando el porcentaje de aumento/disminución de dos velas consecutivas excede el umbral establecido por el usuario (como el 6%), determina que la dirección es fuerte, y abre una posición larga/corta en la tercera velas.

Condición larga: los precios de cierre de dos velas consecutivas aumentan más del 6% en comparación con el precio de cierre anterior

Condición corta: los precios de cierre de dos velas consecutivas caen más del 6% en comparación con el precio de cierre anterior

Después de abrir posiciones, establecerá distancias de stop profit y stop loss para controlar los riesgos.

Esta estrategia también tiene algunas funciones auxiliares para controlar los riesgos, como permitir la apertura de posiciones solo durante períodos de tiempo específicos, establecer el importe máximo de pérdida, etc.

Análisis de ventajas

Se trata de una estrategia comercial relativamente estable y fiable en dos direcciones.

  1. El comercio bidireccional puede obtener ganancias cuando el mercado sube y baja, mejorando la estabilidad.

  2. La evaluación de la tendencia basada en dos señales fuertes puede filtrar eficazmente los ruidos y mejorar la calidad de las posiciones abiertas.

  3. Los ajustes de stop profit y stop loss son razonables, lo que es beneficioso para controlar el riesgo y limitar las pérdidas.

  4. Las funciones auxiliares son completas, como el control del tiempo, el control de pérdidas máximas, etc. Pueden controlar los riesgos muy bien.

  5. Es fácil de backtest y optimizar esta estrategia ya que la lógica es simple y clara.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. Podemos ajustar adecuadamente el parámetro de la primera señal para garantizar la calidad de la señal.

  2. La probabilidad de tres velas super fuertes consecutivas es relativamente pequeña, lo que puede llevar a menos oportunidades para abrir posiciones.

  3. Los comportamientos irracionales causados por eventos repentinos pueden conducir a pérdidas enormes que exceden la distancia de stop loss.

  4. Para la implementación del comercio bidireccional, debemos prestar atención a los problemas de asignación de fondos, de lo contrario puede conducir a obtener ganancias sin pérdidas de parada.

Direcciones de optimización

Esta estrategia puede optimizarse aún más en los siguientes aspectos:

  1. Optimizar la lógica del juicio de primera señal para mejorar la calidad de la señal.

  2. Optimizar los estándares de stop profit y stop loss. Ajustar parámetros basados en diferentes mercados para hacer que la relación riesgo-recompensación sea más razonable. La distancia de stop loss también se puede establecer como stop loss dinámico.

  3. Añadir más módulos de control de riesgos, por ejemplo, pérdida máxima diaria, pérdida máxima consecutiva, etc., para garantizar un uso eficiente y seguro de los fondos.

  4. Optimizar la proporción de asignación de fondos, para hacer que la asignación de capital de la negociación bidireccional sea más razonable, evitando obtener ganancias sin parar pérdidas.

  5. Establecer diferentes combinaciones de parámetros para la optimización de backtesting hacia diferentes variedades comerciales, para mejorar la adaptabilidad.

Resumen de las actividades

Esta estrategia es una estrategia de posición de adición de doble dirección relativamente robusta. Tiene una alta calidad de señal y ciertas capacidades de control de riesgos. También tiene un amplio margen de optimización para mejorar aún más la estabilidad de las ganancias. La estrategia es adecuada para los mercados de tendencia a mediano y largo plazo, y también puede aprovechar las oportunidades durante las consolidaciones del mercado.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="GAVAD", shorttitle="GAVAD", overlay=false, initial_capital=36000)

////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                     GAVAD %                        //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
Sinal = input(6, title="Sinal", type=input.integer, minval=1, maxval=150)
//Objetivo = input(6, title="Objetivo", type=input.integer, minval=1, maxval=100)
Multip = input(10000, title="Sinal", type=input.integer, minval=1, maxval=100000)



//GavadEntrada1 = (close - low [1])/close[1]
//plot(GavadEntrada1, style=plot.style_line, linewidth=3, color=color.yellow)

//sombra
//DownOL = (low - open ) / open * -10000
//plot(DownOL, style=plot.style_area, linewidth=3, color=color.silver)


// imprime o GAVAD
GavadEntrada = (close - close [1])/close[1] * Multip
plot(GavadEntrada, style=plot.style_histogram, linewidth=3, color=color.purple)

//linha do Sinal
plot(Sinal, style=plot.style_line, linewidth=1, color=color.yellow)
//linha do Objetivo
//plot(Objetivo, style=plot.style_line, linewidth=1, color=color.white)

Fura1 = GavadEntrada [0] >= Sinal
Fura2 = GavadEntrada [1] >= Sinal

Alert = Fura1
plotshape(Alert, style=shape.circle,  location = location.top, color= color.yellow)

SinalON = Fura1 and Fura2
plotshape(SinalON, style=shape.circle,  location = location.bottom, color= color.green)



////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//              CONDIÇÕES DE OPERACAO                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////



Sell_Forte2 = SinalON
//plotshape(Sell_Forte2, style=shape.xcross, color=color.yellow, location=location.bottom)

//Call_Forte2 = SinalON
//plotshape(Call_Forte2, style=shape.xcross, color=color.yellow, location=location.top)


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                    CALENDARIO                      //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

//052)
// trading view solicita que se ja informado data para gerar backtest a partir de tal data
//começa backtest do trading sistem em qual data ?

ano = input(2021, minval=1, title="Ano")
mes = input(1, minval=1, maxval=12, title="Mes")
dia = input(1, minval=1, maxval=30, title="Dia")
hora = input(0, minval=1, maxval=23, title="hora")
minuto = input(0, minval=1, maxval=59, title="minuto")
horaabertura = input(10, minval=1, maxval=23, title="hora Inicio Operacao Robo")
minutoabertura = input(40, minval=1, maxval=59, title="Minuto Encerra Tudo")
horaencerra = input(17, minval=1, maxval=23, title="hora Fechamento")
minutoencerra = input(50, minval=1, maxval=59, title="Minuto Encerra Novas Operacoes")
minutofinaliza = input(50, minval=1, maxval=59, title="Minuto Encerra Tudo")


//valida se o dia de hoje é posterior ao dia informado acima
Validadia = year >= ano and month >= mes and dayofmonth >= dia


//cria horario de abertura de negociaçao, considerar default 10 hs, pois os indicadores ja estarão corrigidos
abreloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaabertura
//and minute >= minutoabertura)


//cria horario de fechamento de todas as negociaçoes, considerar default 17:00 hs
//nenhuma ordem pode ser aberta depois dessa data e as abertas devem ser fechadas
fechaloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra
//and minute >= minutoencerra)

fechaloja2 = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra
//and minute >= minutofinaliza)


//valida horario de negociação, pra liberar as operacoes.
lojaaberta = abreloja == true and fechaloja == false and fechaloja2 == false


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//             GERENCIAMENTO DE RISCO                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

//seta meta mensal
meta = input(150000, "Meta de Lucro")
Contratos= input(5, "Contratos")

//seta tamanho do lote (ordem inicial-unica)
tamanhodolote = Contratos

//seta stop gain final em pontos (metade da barra anterior)
//gaintotal = input(30, "Gain")
gaintotal = input(3, "Gain")

//seta stop loss final em pontos
lossmaximo = input(8, "Loss")
//lossmaximo = (open- close)*100

////////////////////////////////////////////////////////
//                                                    //
//                     Checkbox                       //
//                                                    //
////////////////////////////////////////////////////////

//ativacomprasretorno = input(title="Ativar Compras Retorno", type=input.bool , defval=true)
//ativavendasretorno = input(title="Ativar Vendas Retorno", type=input.bool , defval=true)


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                  COMPRA E VENDA                    //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

Tradenumber = strategy.closedtrades + 1
Batemeta = strategy.netprofit < meta

//COMPRA RETORNO
//longcondition2 = Validadia and Call_Forte2 and Batemeta


//strategy.entry("Comprar", strategy.long, tamanhodolote, when=longcondition2, comment="[Oper=" + tostring(Tradenumber) + "]win=" + tostring(strategy.wintrades) + " | Loss=" + tostring(strategy.losstrades))
//strategy.exit("Saida Compra", "Comprar", profit=gaintotal, loss=lossmaximo)
//if (CruzamentoFechaCallGG)
    //strategy.close(id="Comprar")
//if (EscapeFechaCall)
  // strategy.close(id="Comprar")   
   
    
//plotchar(longcondition2, char="C", location=location.bottom, color=color.lime, transp=0)
//alertcondition(longcondition2, "Comprar", "Compra Rápida!")

//VENDA RETORNO
Shortcondition2 = Validadia and Sell_Forte2 and Batemeta

strategy.entry("Vender", strategy.short, tamanhodolote, when=Shortcondition2)
strategy.exit("Fecha Venda", "Vender", profit=gaintotal, loss=lossmaximo)
//if (CruzamentoFechaSellGG)
   // strategy.close(id="Vender")
//if (EscapeFechaSell)
   // strategy.close(id="Comprar")  
//plotchar(CruzamentoFechaSellGG, char="Y", location=location.top, color=color.lime, transp=0) 

//plotchar(longcondition2, char="S", location=location.bottom, color=color.lime, transp=0)
//alertcondition(longcondition2, "Vender", "Venda Rápida!")

//fim do codigo

Más.