Estrategia dinámica de llamada de margen bidireccional


Fecha de creación: 2023-11-27 11:33:11 Última modificación: 2023-11-27 11:33:11
Copiar: 1 Número de Visitas: 609
1
Seguir
1617
Seguidores

Estrategia dinámica de llamada de margen bidireccional

Descripción general

Se trata de una estrategia de apertura de posiciones en dos direcciones que utiliza las fuertes señales de ruptura de los mercados en ambos sentidos. Se selecciona la dirección de apertura de la posición después de que aparezcan dos fuertes líneas K simultáneas, y luego se establece un stop loss para la gestión del riesgo.

Principio de estrategia

La estrategia se basa en dos fuertes señales de la línea K para determinar la dirección del mercado. En concreto, se calcula el alza y bajada de cada línea K, y cuando los alzas y bajas de dos líneas K consecutivas superan el umbral establecido por el usuario (por ejemplo, el 6%), se determina la dirección como la dirección de la fuerza, y se abre una posición de ventaja / desventaja en la tercera línea K.

Más condiciones: dos líneas K consecutivas cerraron con un aumento de más del 6% respecto al día anterior Condiciones de apertura: cerramiento de dos líneas K consecutivas con una caída de más del 6% respecto al cierre del día anterior

La distancia de parada y pérdida se establece para controlar el riesgo después de abrir una posición. La distancia de parada y pérdida es un determinado múltiplo del precio de apertura (por ejemplo, 8 veces).

La estrategia también tiene algunas funciones auxiliares para controlar el riesgo, como abrir posiciones solo en un período de tiempo específico, establecer el monto máximo de pérdida, etc.

Análisis de las ventajas

Se trata de una estrategia de negociación bidireccional más estable y fiable. Las principales ventajas son:

  1. Utilizando el comercio bidireccional, se puede obtener ganancias tanto en los mercados altos como bajos, aumentando la estabilidad.

  2. Basado en dos fuertes señales para juzgar la tendencia, se puede filtrar eficazmente el ruido, la calidad de las posiciones entradas es más alta.

  3. La configuración de stop-loss es razonable, favorece el control de riesgos y limita las pérdidas.

  4. Las funciones auxiliares, como el control de tiempo, el control de pérdidas máximas, etc., son perfectas para controlar el riesgo.

  5. Es fácil de validar y optimizar en el entorno real, y la lógica de la estrategia es simple y clara.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. Cuando el mercado se agita, es fácil que se produzcan pérdidas. Se puede ajustar adecuadamente el primer parámetro de juicio de la señal para garantizar la calidad de la señal.

  2. La probabilidad de encontrarse con tres líneas K súper fuertes es menor, y es probable que haya menos oportunidades de abrir posiciones. Se pueden ajustar los parámetros de manera adecuada, pero se debe compensar la calidad de la señal.

  3. El comportamiento irracional provocado por un evento inesperado puede causar grandes pérdidas por encima de la distancia de parada. Esto requiere un control adicional del límite máximo de pérdidas para resolver.

  4. En el caso de las transacciones bidireccionales, se debe tener en cuenta la administración de fondos. Si los fondos no se distribuyen de manera equitativa, la cuenta puede perder dinero.

Dirección de optimización

La estrategia puede ser mejorada en los siguientes aspectos:

  1. Optimizar la lógica de juicio de la primera señal, mejorar la calidad de la señal. Se puede considerar agregar más factores, como cambios en el volumen de transacciones, la volatilidad, etc.

  2. Optimización de los parámetros de stop loss. Se pueden ajustar los parámetros de acuerdo con los diferentes mercados, lo que hace que los parámetros de stop loss sean más razonables. La distancia de stop loss también se puede configurar como stop loss dinámico.

  3. Añadir más módulos de control de riesgos. Por ejemplo, pérdidas máximas en un día, pérdidas máximas continuas, etc. Para garantizar el uso seguro y eficiente de los fondos.

  4. Optimización de la proporción de uso de fondos. Hacer que la distribución de fondos en operaciones abiertas sea más racional y evitar que solo se pierda.

  5. Optimización de la retroalimentación para mejorar la adaptabilidad mediante la configuración de diferentes combinaciones de parámetros para diferentes variedades de transacciones.

Resumir

Esta estrategia es una estrategia de compensación bidireccional más estable. Tiene una alta calidad de señal y una cierta capacidad de control de riesgo. También tiene un gran espacio de optimización que puede mejorar aún más la estabilidad de los ingresos.

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