Esta é uma estratégia que toma posições em ambas as direções usando sinais de fortes avanços em ambas as direções.
Esta estratégia julga a direção do mercado com base nos sinais de dois velas fortes consecutivas. Especificamente, calcula a porcentagem de aumento / diminuição de cada velas. Quando a porcentagem de aumento / diminuição de dois velas consecutivas exceder o limiar definido pelo usuário (como 6%), determina que a direção é forte e abre uma posição longa / curta no terceiro velas.
Condição longa: os preços de fechamento de dois candelabros consecutivos aumentam mais de 6% em relação ao preço de fechamento anterior
Condição curta: os preços de fechamento de dois candelabros consecutivos caem mais de 6% em relação ao preço de fechamento anterior
Após a abertura de posições, ele irá definir distâncias de stop profit e stop loss para controlar os riscos.
Esta estratégia tem também algumas funções auxiliares para controlar os riscos, tais como permitir apenas a abertura de posições durante períodos de tempo específicos, fixar o montante máximo de perdas, etc.
Trata-se de uma estratégia de negociação relativamente estável e fiável em duas direcções.
A negociação bidirecional pode obter lucros quando o mercado sobe e desce, melhorando a estabilidade.
A avaliação da tendência com base em dois sinais fortes pode efetivamente filtrar ruídos e melhorar a qualidade das posições abertas.
As definições de stop profit e stop loss são razoáveis, o que é benéfico para o controlo do risco e limita as perdas.
As funções auxiliares são abrangentes, tais como controlo do tempo, controlo das perdas máximas, etc. Podem controlar os riscos muito bem.
É fácil testar e otimizar esta estratégia, pois a lógica é simples e clara.
Os principais riscos desta estratégia são:
Podemos ajustar adequadamente o parâmetro do primeiro sinal para garantir a qualidade do sinal.
A probabilidade de três velas super fortes consecutivas é relativamente pequena, o que pode levar a menos oportunidades de abrir posições.
Comportamentos irracionais causados por eventos repentinos podem levar a perdas enormes que excedam a distância de stop loss.
Para a implementação da negociação de duas direcções, precisamos prestar atenção aos problemas de alocação de fundos, caso contrário, pode levar a obter lucros sem stop losses.
Esta estratégia pode ser melhorada nos seguintes aspectos:
Otimizar a lógica do julgamento do primeiro sinal para melhorar a qualidade do sinal. Mais fatores podem ser considerados, como mudança no volume de transações, taxa de volatilidade, etc.
Otimizar padrões de stop profit e stop loss. Ajustar parâmetros baseados em diferentes mercados para tornar a relação risco-recompensa mais razoável. A distância de stop loss também pode ser definida como stop loss dinâmico.
Adicionar mais módulos de controlo de riscos, por exemplo, perda máxima diária, perda máxima consecutiva, etc., para assegurar uma utilização eficiente e segura dos fundos.
Otimizar a relação de alocação de fundos, para tornar a alocação de capital da negociação bidirecional mais razoável, evitando obter lucros sem parar as perdas.
Definir diferentes combinações de parâmetros para a otimização de backtesting para diferentes variedades de negociação, para melhorar a adaptabilidade.
Esta estratégia é uma estratégia de posição de adição relativamente robusta de duas direções. Tem alta qualidade de sinal e certas capacidades de controle de risco. Também tem grande espaço para otimização para melhorar ainda mais a estabilidade dos lucros. A estratégia é adequada para mercados de tendência de médio e longo prazo, e também pode aproveitar oportunidades durante consolidações de 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