
A estratégia de reversão de três ou quatro linhas de K é realizada através da identificação de três ou quatro linhas de K com maior impulso nas linhas de K, após as quais as linhas de K de menor amplitude formam suporte ou pressão. A estratégia de negociação de reversão de três ou quatro linhas de K é chamada de estratégia de negociação de reversão.
A lógica de identificação central da estratégia é composta por:
Identificar a linha K com aumento significativo ((Gap Bar): ultrapassar 1,5 vezes o ATR médio, com uma parte física maior que 0,65. A linha K é considerada como tendo uma forte tendência de queda.
Identificar as linhas K de recolhimento de diminuição ((Collecting Bar): Linhas K que seguem as linhas de colisão de uma ou duas pequenas variações atrás da barra de separação, com um ponto alto ou baixo próximo da barra de separação. Essas linhas K representam a diminuição e a recolha de tendências, formando suporte ou pressão.
Identificar a linha K do sinal de reversão: depois de compilar a linha K, se uma entidade quebrar a linha K dos pontos altos ou baixos das linhas K anteriores, ela pode ser considerada um sinal de reversão. Dependendo da direção da entidade, ela pode fazer mais ou menos, e abrir uma posição na linha K.
Parar e parar: parar é definido abaixo ou acima do ponto mais baixo da linha Gap K; parar é baseado no ponto de parada multiplicado pela proporção de perdas na configuração.
A estratégia tem as seguintes vantagens principais:
O uso de características da própria linha K para determinar tendências e pontos de reversão, sem depender de qualquer indicador, permite o uso de indicadores de borracha.
O Gap Bar e o Collecting Bar são selecionados de forma rigorosa, permitindo identificar e analisar as tendências reais.
O julgamento de sinais de inversão é baseado em entidades, reduzindo a probabilidade de falsos sinais.
Uma combinação de apenas 3-4 linhas K pode ser realizada em uma transação, com um período de tempo curto e alta frequência.
A configuração de stop-loss é clara, e o retorno e a taxa de ganho/perda são facilmente controlados.
A estratégia também apresenta os seguintes riscos:
Dependendo da qualidade dos parâmetros definidos, se os parâmetros forem definidos com demasiada flexibilidade, aumentam as chances de falsos sinais e de perda de dinheiro.
É suscetível a interferência de falhas de alta frequência e não pode filtrar efetivamente todos os falsos sinais.
Existe o risco de ser encurralado, sendo que se a inversão for insuficiente, é fácil de se formar um ajuste, o que pode impedir o prejuízo.
O limite de perda é grande e pode causar grandes perdas com o uso de oportunidades individuais.
Para minimizar esses riscos, pode-se fazer otimizar as seguintes coisas:
Parâmetros de otimização para identificar com mais precisão as Barras de Gap e Coleção.
Adicionar filtros e abrir posições após a confirmação da linha K inversa.
Otimizar o algoritmo de stop loss para que o stop loss fique mais próximo do preço e os prejuízos sejam mais controláveis.
A estratégia também tem algumas melhorias importantes:
Adicionar filtros complexos para evitar interferências de falsa ruptura. Por exemplo, aumentar o indicador de volume de transação e considerar os sinais de negociação somente se o volume de transação for maior.
Combinado com o indicador de linha média, apenas se considera um sinal de negociação quando o preço quebra uma linha média importante (como a linha de 20 dias, a linha de 60 dias).
Verificação de múltiplos períodos de tempo, só se abre uma posição quando vários períodos são sinalizados simultaneamente.
Otimização das condições de suspensão, ajustando a taxa de ganhos e perdas de acordo com a volatilidade do mercado e a preferência de risco.
Em combinação com um sistema de avaliação de vazio de mercado, a estratégia é usada somente em um mercado de tendência.
Essas otimizações podem aumentar ainda mais a estabilidade e a probabilidade de lucro das estratégias.
A estratégia de reversão de três ou quatro linhas K é executada através da identificação de segmentos de potencial de tendência de alta qualidade e sinais de reversão. O ciclo de operação é curto, a frequência é alta e o lucro excedente é esperado.
/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Three (3)-Bar and Four (4)-Bar Plays Strategy", shorttitle="Three (3)-Bar and Four (4)-Bar Plays Strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)
frommonth = input(defval = 1, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 1, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")
tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
garBarSetting1 = input(defval = 1.5, minval = 0.0, maxval = 100.0, title = "Gap Bar Size", type = input.float)
garBarSetting2 = input(defval = 0.65, minval = 0.0, maxval = 100.0, title = "Gap Bar Body Size", type = input.float)
TopSetting = input(defval = 0.10, minval = 0.0, maxval = 100.0, title = "Bull Top Bar Size", type = input.float)
profitMultiplier = input(defval = 2.0, minval = 1.0, maxval = 100.0, title = "Profit Multiplier", type = input.float)
// ========== 3-Bar and 4-Bar Play Setup ==========
barSize = abs(high - low)
bodySize = abs(open - close)
gapBar = (barSize > (atr(1000) * garBarSetting1)) and (bodySize >= (barSize * garBarSetting2)) // find a wide ranging bar that is more than 2.5x the size of the average bar size and body is at least 65% of bar size
bullTop = close > close[1] + barSize[1] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (first collecting bull bar)
bullTop2 = close > close[2] + barSize[2] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (first collecting bear bar)
bearTop = close < close[1] - barSize[1] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (second collecting bull bar)
bearTop2 = close < close[2] - barSize[2] * TopSetting ? false : true // check if top of bar is relatively equal to top of the gap bar (second collecting bear bar)
collectingBarBull = barSize < barSize[1] / 2 and low > close[1] - barSize[1] / 2 and bullTop // find a collecting bull bar
collectingBarBear = barSize < barSize[1] / 2 and high < close[1] + barSize[1] / 2 and bearTop // find a collecting bear bar
collectingBarBull2 = barSize < barSize[2] / 2 and low > close[2] - barSize[2] / 2 and bullTop2 // find a second collecting bull bar
collectingBarBear2 = barSize < barSize[2] / 2 and high < close[2] + barSize[2] / 2 and bearTop2 // find a second collecting bear bar
triggerThreeBarBull = close > close[1] and close > close[2] and high > high[1] and high > high[2] // find a bull trigger bar in a 3 bar play
triggerThreeBarBear = close < close[1] and close < close[2] and high < high[1] and high < high[2] // find a bear trigger bar in a 3 bar play
triggerFourBarBull = close > close[1] and close > close[2] and close > close[3] and high > high[1] and high > high[2] and high > high[3] // find a bull trigger bar in a 4 bar play
triggerFourBarBear = close < close[1] and close < close[2] and close < close[3] and high < high[1] and high < high[2] and high < high[3] // find a bear trigger bar in a 4 bar play
threeBarSetupBull = gapBar[2] and collectingBarBull[1] and triggerThreeBarBull // find 3-bar Bull Setup
threeBarSetupBear = gapBar[2] and collectingBarBear[1] and triggerThreeBarBear // find 3-bar Bear Setup
fourBarSetupBull = gapBar[3] and collectingBarBull[2] and
collectingBarBull2[1] and triggerFourBarBull // find 4-bar Bull Setup
fourBarSetupBear = gapBar[3] and collectingBarBear[2] and
collectingBarBear2[1] and triggerFourBarBear // find 4-bar Bear Setup
labels = input(title="Show Buy/Sell Labels?", type=input.bool, defval=true)
plotshape(threeBarSetupBull and labels, title="3-Bar Bull", text="3-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(threeBarSetupBear and labels, text="3-Bar Bear", title="3-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
plotshape(fourBarSetupBull and labels, title="4-Bar Bull", text="4-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(fourBarSetupBear and labels, text="4-Bar Bear", title="4-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
alertcondition(threeBarSetupBull or threeBarSetupBear or fourBarSetupBull or fourBarSetupBear, title="3-bar or 4-bar Play", message="Potential 3-bar or 4-bar Play")
float sl = na
float tp = na
sl := nz(sl[1], 0.0)
tp := nz(tp[1], 0.0)
plot(sl==0.0?na:sl,title='SL', color = color.red)
plot(tp==0.0?na:tp,title='TP', color = color.green)
if (true)
if threeBarSetupBull and strategy.position_size <=0
strategy.entry("3 Bar Long", strategy.long, when=threeBarSetupBull)
sl :=low[1]
if threeBarSetupBear and strategy.position_size >=0
strategy.entry("3 Bar Short", strategy.short, when=threeBarSetupBull)
sl :=high[1]
if fourBarSetupBull and strategy.position_size <=0
strategy.entry("4 Bar Long", strategy.long, when=fourBarSetupBull)
sl :=min(low[1], low[2])
if fourBarSetupBear and strategy.position_size >=0
strategy.entry("4 Bar Short", strategy.short, when=fourBarSetupBear)
sl :=max(high[1], high[2])
if sl !=0.0
if strategy.position_size > 0
tp := strategy.position_avg_price + ((strategy.position_avg_price - sl) * profitMultiplier)
strategy.exit(id="Exit", limit=tp, stop=sl)
if strategy.position_size < 0
tp := strategy.position_avg_price - ((sl - strategy.position_avg_price) * profitMultiplier)
strategy.exit(id="Exit", limit=tp, stop=sl)