
Esta é uma estratégia de abrir posições em duas direções usando um sinal de ruptura forte em ambas as direções do mercado. Ele escolhe a direção de abertura após a aparição de duas linhas K fortes na mesma direção e, em seguida, configura um stop loss para gerenciar o risco.
A estratégia baseia-se em dois fortes sinais de linha K para determinar a direção do mercado. Especificamente, ela calcula os acréscimos e quedas de cada linha K. Quando os acréscimos e quedas de duas linhas K consecutivas superam o limite definido pelo usuário (por exemplo, 6%), a direção é julgada forte e a posição é aberta em uma terceira linha K.
Mais condições: dois fechamentos consecutivos da linha K aumentaram mais de 6% em relação ao dia anterior Condições de fechamento: Preços de fechamento de duas linhas K consecutivas caíram mais de 6% em relação ao dia anterior
Depois de abrir uma posição, é definida uma distância de parada para controlar o risco. A distância de parada é inserida pelo usuário e a distância de parada é um determinado múltiplo do preço de abertura da posição (por exemplo, 8 vezes).
A estratégia também possui algumas funções auxiliares para controlar o risco, como abrir posições apenas em determinados períodos de tempo, definir o máximo de perdas, etc.
É uma estratégia de negociação bidirecional mais estável e confiável. As principais vantagens são:
A utilização de negociações bidirecionais permite obter ganhos em mercados de alta e baixa, aumentando a estabilidade.
Com base em duas tendências de julgamento de sinais fortes, pode-se filtrar eficazmente o ruído e a qualidade das posições entradas é mais alta.
A configuração de stop-loss é razoável, favorável ao controle de risco, com perdas limitadas.
As funções auxiliares são perfeitas, como controle de tempo, controle de perda máxima, etc., o que permite um bom controle de risco.
É fácil de verificar e otimizar em tempo real, a lógica da estratégia é simples e clara.
Os principais riscos desta estratégia são:
Quando o mercado está em turbulência, as palavras de parada podem ser perdidas. O primeiro parâmetro de julgamento do sinal pode ser ajustado adequadamente para garantir a qualidade do sinal.
A probabilidade de encontrar três linhas K ultra-fortes é menor e a oportunidade de abrir uma posição é menor. Os parâmetros podem ser adequadamente baixados, mas a qualidade do sinal deve ser balanceada.
O comportamento irracional causado por eventos inesperados pode levar a perdas significativas além da distância de parada. Isso requer o controle de limite máximo de perda auxiliar para resolver.
Quando se trata de transações bidirecionais, deve-se ter cuidado com a gestão de fundos. Se os fundos não forem distribuídos de forma uniforme, a conta pode ficar em prejuízo.
A estratégia pode ser melhorada em alguns aspectos:
Otimizar a lógica de julgamento do primeiro sinal, melhorar a qualidade do sinal. Pode considerar adicionar mais fatores, como mudanças no volume de transação, taxa de flutuação, etc.
Optimizar o padrão de stop-loss. Pode ser ajustado de acordo com os parâmetros de diferentes mercados, tornando o stop-loss mais razoável. A distância de stop-loss também pode ser definida como stop-loss dinâmico.
Adicionar mais módulos de controle de risco. Por exemplo, o máximo de perdas em um dia, o máximo de perdas contínuas, etc.
Optimizar a taxa de utilização dos fundos. Tornar a distribuição de fundos de negociação mais racional e evitar que os investidores não ganhem.
Optimização de feedback para diferentes combinações de parâmetros para diferentes variedades de transação, aumentando a adaptabilidade.
Esta estratégia é uma estratégia de compensação bidirecional mais robusta. Tem uma qualidade de sinal mais alta e tem uma certa capacidade de controle de risco. Há também um amplo espaço de otimização que pode melhorar ainda mais a estabilidade dos ganhos.
/*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