
A ideia principal desta estratégia é detectar se o preço ultrapassou o preço mínimo no período especificado, e se ultrapassou mais, esperar que o preço volte à linha de equilíbrio. Pertence à estratégia de acompanhamento de tendências.
A estratégia é obtida por meio da invocação do método ta.lowest do script Pine para obter o preço mais baixo do período especificado e compará-lo com o preço mais baixo do período anterior.
Se o preço mínimo do último ciclo (lowestLow) for menor que o preço mínimo do período anterior (prevLow), será emitido um sinal de multiplicação. Depois de multiplicação, será comparado com o preço máximo do período especificado (highestHigh). Se o preço máximo do último ciclo for maior que o preço máximo do período anterior, a posição será neutralizada.
A estratégia permite escolher a condição de disparo, ou seja, que o preço mínimo precise de uma, duas, três ou quatro rupturas consecutivas do preço mínimo anterior para controlar a frequência de negociação.
Além disso, a estratégia também traça a média do preço mínimo (lowestLow) e a média do preço máximo (highestHigh) em um gráfico para visualizar as mudanças de tendência.
A estratégia captura uma reversão de tendência após a ruptura de uma nova baixa, com uma maior probabilidade de sucesso.
Permite escolher a quantidade de quebra de preços mínimos e controlar a frequência de negociação.
Desenhar uma linha de equilíbrio ajuda a intuir os pontos de mudança de tendência.
A lógica da estratégia é simples, clara e fácil de entender.
Pode ser configurado para testes de otimização em diferentes ações e períodos de tempo.
A falsa ruptura não permite determinar o ponto de reversão da tendência e pode levar a perdas.
A configuração de otimização de diferentes combinações de parâmetros precisa ser testada, caso contrário, a frequência de negociação pode ser muito alta ou muito baixa.
Os parâmetros precisam ser ajustados para diferentes ações, não é adequado para aplicações mecânicas.
A falta de tempo de retorno pode levar a uma estratégia de sobre-ajuste.
Os preços podem ser mais baixos após a ruptura, e o risco deve ser controlado através de uma parada de perda.
Aumentar os mecanismos de suspensão, como suspensão móvel, suspensão de rastreamento, etc., para controlar a perda individual.
Otimizar o número de brechas e equilibrar a frequência de negociação com a qualidade do sinal.
Teste de otimização de parâmetros em diferentes ações e períodos de tempo.
Aumentar as condições de filtragem para evitar transações frequentes em mercados turbulentos.
Considere a inclusão de indicadores de tendência para evitar negociações contractuais.
Testar diferentes sinais de saída.
A estratégia de capturar oportunidades de reversão através da monitorização de brechas de preços mínimos, pertence à típica estratégia de retorno de brechas. Os benefícios são simples e fáceis de entender, a frequência de negociação é controlável e pode ser aplicada em vários tipos de ações. Mas também existe um certo risco de falsa brecha, que requer a adição de condições auxiliares para otimização de filtragem e controle de risco.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © merovinh
//@version=5
strategy(title="Merovinh - Mean Reversion Lowest low",
overlay = true,
default_qty_type = strategy.percent_of_equity,
initial_capital = 10000,
default_qty_value = 10,
commission_type = strategy.commission.percent,
slippage = 1,
commission_value = 0.04)
GR_TIME = 'Time Period'
bars = input(9, title = "Minimum number of bars", tooltip = "The minimum number of bars before updating lowest low / highest high")
numberOfLows = input.string(defval='One', title='Number of broken lows', options=['One', 'Two', 'Three', 'Four'])
//Period
var prevLow = .0
var prevHigh = .0
var prevLow2 = .0
var prevLow3 = .0
var prevLow4 = .0
truetime = true
highestHigh = ta.highest(high, bars)
lowestLow = ta.lowest(low, bars)
if numberOfLows == 'One'
if truetime and prevLow > 0 and lowestLow < prevLow
strategy.entry('long', strategy.long)
if numberOfLows == 'Two'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2
strategy.entry('long', strategy.long)
if numberOfLows == 'Three'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3
strategy.entry('long', strategy.long)
if numberOfLows == 'Four'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3 and prevLow3 < prevLow4
strategy.entry('long', strategy.long)
if truetime and prevHigh > 0 and highestHigh > prevHigh
strategy.close('long')
if prevLow != lowestLow
prevLow4 := prevLow3
prevLow3 := prevLow2
prevLow2 := prevLow
prevLow := lowestLow
prevHigh := highestHigh
plot(lowestLow, color=color.green, linewidth=1, title="Lowest Low Line")
plot(highestHigh, color=color.green, linewidth=1, title="Highest High Line")