Stratégie dynamique d'appel de marge bidirectionnel


Date de création: 2023-11-27 11:33:11 Dernière modification: 2023-11-27 11:33:11
Copier: 1 Nombre de clics: 609
1
Suivre
1617
Abonnés

Stratégie dynamique d’appel de marge bidirectionnel

Aperçu

Il s’agit d’une stratégie d’ouverture de position bidirectionnelle utilisant les signaux de rupture de marché dans les deux sens. Il choisit la direction d’ouverture de la position après l’apparition de deux lignes K fortes dans la même direction, puis définit un stop loss et une gestion du risque.

Principe de stratégie

La stratégie est basée sur deux signaux de K-ligne forts pour déterminer la direction du marché. Plus précisément, elle calcule les gains et les pertes de chaque K-ligne. Lorsque les gains et les pertes de deux K-lignes consécutives dépassent le seuil défini par l’utilisateur (par exemple, 6%), la direction est jugée comme une direction de force et une position est ouverte sur la troisième K-ligne.

Plus de conditions: prix de clôture de deux lignes K consécutives plus de 6% par rapport à la clôture de la veille Conditions de dépréciation: deux clôtures K consécutives ont été clôturées après une baisse de plus de 6% par rapport à la clôture de la veille.

Après l’ouverture de la position, un stop loss est défini pour contrôler le risque. Le stop loss est entré par l’utilisateur et le stop loss est un certain nombre de fois le prix d’ouverture (par exemple 8 fois).

La stratégie a également des fonctionnalités auxiliaires pour contrôler le risque, comme le fait de ne prendre de positions que pendant une certaine période, de définir un montant de perte maximal, etc.

Analyse des avantages

Il s’agit d’une stratégie de trading bidirectionnelle plus stable et plus fiable. Les principaux avantages sont:

  1. L’utilisation de la négociation bidirectionnelle permet d’obtenir des bénéfices à la fois en hausse et en baisse du marché, ce qui augmente la stabilité.

  2. Il est possible de filtrer efficacement le bruit en fonction de deux tendances de jugement de signaux puissants, et d’entrer dans des positions de meilleure qualité.

  3. Les paramètres de stop-loss sont raisonnables, favorisent le contrôle des risques et limitent les pertes.

  4. Les fonctions auxiliaires, telles que le contrôle du temps, le contrôle de la perte maximale, etc., permettent de bien contrôler les risques.

  5. Les logiciels sont faciles à vérifier et à optimiser, et les stratégies sont simples et claires.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. Les stopwords sont sujettes à des pertes en cas de choc du marché. Le premier signal peut être ajusté de manière appropriée pour garantir la qualité du signal.

  2. La probabilité de rencontrer trois lignes K ultra-puissantes est faible et les chances d’ouvrir une position sont plus faibles. Les paramètres peuvent être ajustés de manière appropriée, mais la qualité du signal doit être mise en balance.

  3. Les actions irrationnelles provoquées par les événements imprévus peuvent entraîner des pertes massives au-delà de la distance d’arrêt. Cela nécessite un contrôle supplémentaire du seuil de perte maximale.

  4. Les transactions bilatérales doivent faire l’objet d’une bonne gestion des fonds. Si les fonds ne sont pas répartis équitablement, le compte risque de perdre.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser la logique de jugement du premier signal, améliorer la qualité du signal. Vous pouvez envisager d’ajouter d’autres facteurs, tels que la variation du volume des transactions, la volatilité, etc.

  2. Optimiser les paramètres de stop-loss. Les paramètres peuvent être ajustés en fonction des différents marchés pour rendre les pertes plus raisonnables. La distance de stop-loss peut également être définie comme un stop-loss dynamique.

  3. Ajout d’autres modules de contrôle des risques, tels que la perte maximale d’un jour, la perte maximale continue, etc.

  4. Optimiser le taux d’utilisation des fonds. Rendre plus rationnelle l’allocation des fonds sur les transactions en espèces et éviter les pertes.

  5. Optimisation de la rétroaction et amélioration de l’adaptabilité en définissant différentes combinaisons de paramètres pour différentes variétés de transactions.

Résumer

Cette stratégie est une stratégie de compensation bidirectionnelle plus robuste. Elle a une qualité de signal élevée et une certaine capacité de contrôle des risques. Il y a également beaucoup de marge d’optimisation qui peut améliorer encore la stabilité des gains.

Code source de la stratégie
/*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