Stratégie dynamique d'ajout de position bidirectionnelle

Auteur:ChaoZhang est là., Date: 2023-11-27 11h33
Les étiquettes:

img

Résumé

C'est une stratégie qui prend des positions dans les deux sens en utilisant des signaux de fortes percées dans les deux sens. Il choisira une direction pour ouvrir des positions après que deux chandeliers forts consécutifs apparaissent dans la même direction, puis définira un stop profit et un stop loss pour la gestion des risques.

Principe de stratégie

Cette stratégie juge la direction du marché en fonction des signaux de deux bougies fortes consécutives. Plus précisément, elle calcule le pourcentage d'augmentation / diminution de chaque bougie. Lorsque le pourcentage d'augmentation / diminution de deux bougies consécutives dépasse le seuil fixé par l'utilisateur (par exemple 6%), elle détermine que la direction est forte et ouvre une position longue / courte dans le troisième bougie.

Condition longue: les prix de clôture de deux chandeliers consécutifs augmentent de plus de 6% par rapport au prix de clôture précédent

Condition courte: les prix de clôture de deux chandeliers consécutifs baissent de plus de 6% par rapport au prix de clôture précédent

Après l'ouverture des positions, il définira des distances stop profit et stop loss pour contrôler les risques.

Cette stratégie comporte également certaines fonctions auxiliaires pour contrôler les risques, telles que permettre d'ouvrir des positions uniquement pendant des périodes de temps spécifiques, fixer le montant maximal des pertes, etc.

Analyse des avantages

Il s'agit d'une stratégie commerciale relativement stable et fiable à double sens.

  1. Le trading bidirectionnel peut générer des profits lorsque le marché monte et descend, améliorant la stabilité.

  2. Le jugement de la tendance sur la base de deux signaux forts peut filtrer efficacement les bruits et améliorer la qualité des positions ouvertes.

  3. Les paramètres de stop profit et de stop loss sont raisonnables, ce qui est bénéfique pour le contrôle des risques et limite les pertes.

  4. Les fonctions auxiliaires sont complètes, telles que le contrôle du temps, le contrôle des pertes maximales, etc. Elles peuvent très bien contrôler les risques.

  5. Il est facile de tester et d'optimiser cette stratégie car la logique est simple et claire.

Analyse des risques

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

  1. Il est susceptible de souffrir d'un stop loss pendant la consolidation du marché.

  2. La probabilité de trois chandeliers super forts consécutifs est relativement faible, ce qui peut entraîner moins d'opportunités d'ouverture de positions.

  3. Les comportements irrationnels causés par des événements soudains peuvent entraîner d'énormes pertes dépassant la distance de stop loss.

  4. Pour la mise en œuvre du trading bidirectionnel, nous devons prêter attention aux problèmes d'allocation des fonds, sinon cela peut conduire à des profits sans stop-loss.

Directions d'optimisation

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

  1. Optimiser la logique du jugement du premier signal pour améliorer la qualité du signal.

  2. Optimiser les normes de stop profit et de stop loss. Ajuster les paramètres basés sur différents marchés pour rendre le rapport risque-rendement plus raisonnable. La distance de stop loss peut également être définie comme stop loss dynamique.

  3. Ajouter plus de modules de contrôle des risques, par exemple, perte quotidienne maximale, perte consécutive maximale, etc., pour assurer une utilisation efficace et sûre des fonds.

  4. Optimiser le ratio d'allocation des fonds, afin de rendre l'allocation des capitaux de la négociation bidirectionnelle plus raisonnable, empêchant de réaliser des bénéfices sans stop-loss.

  5. Définir différentes combinaisons de paramètres pour l'optimisation des tests de retour vers différentes variétés de trading, afin d'améliorer l'adaptabilité.

Résumé

Cette stratégie est une stratégie de position d'ajout à double direction relativement robuste. Elle a une haute qualité de signal et certaines capacités de contrôle des risques. Elle a également une grande marge d'optimisation pour améliorer davantage la stabilité des bénéfices.


/*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

Plus de