Estratégia de cobertura de tendências baseada em indicadores da ETI e HMACCI

Autora:ChaoZhang, Data: 2024-01-23 11:26:14
Tags:

img

Resumo

Esta estratégia combina os sinais bilaterais de negociação da ETI e indicadores CCI melhorados e adota uma abordagem de cobertura para posições abertas e fechadas com frequência, visando obter lucros contínuos mais estáveis. A lógica chave é a cruz de ouro e a cruz morta das médias rápidas e lentas do indicador ETI, combinadas com os sinais de compra e venda do indicador HMACCI para determinar a direção do mercado. Os riscos são controlados limitando as condições de abertura, enquanto são definidas as lógicas de stop loss e take profit.

Princípio da estratégia

A estratégia baseia-se principalmente na combinação dos indicadores da ETI e do HMACCI.

O indicador TSI contém uma média móvel rápida e uma lenta para determinar os sinais de negociação. Quando a linha rápida quebra a linha lenta para cima, é um sinal de compra, e vice-versa para os sinais de venda. Isso pode capturar mudanças nas tendências do mercado de forma mais sensível.

O indicador HMACCI baseia-se no indicador CCI tradicional que utiliza a média móvel do casco em vez do preço em si, o que pode filtrar algum ruído e avaliar as zonas de sobrecompra e sobrevenda.

A lógica fundamental da estratégia consiste em combinar os julgamentos destes dois indicadores e estabelecer certas condições adicionais para filtrar sinais falsos, tais como examinar o preço de fechamento das barras anteriores e os preços máximos e mínimos em vários períodos para controlar a qualidade dos sinais de reversão.

Para as posições de abertura, se as condições estiverem preenchidas, as ordens de mercado são colocadas cada vez que a barra se fecha, indo longas e curtas.

Para obter lucro e parar de perda, stop loss flutuante e fechar todas as ordens quando atingir o lucro alvo são definidos.

Vantagens da estratégia

Trata-se de uma estratégia relativamente estável e fiável de cobertura de alta frequência, cujas principais vantagens são:

  1. A combinação de dois indicadores pode evitar eficazmente falsos sinais
  2. Operações de cobertura frequentes a cada barra conduzem a flutuações mais estáveis nos lucros e perdas
  3. A lógica de abertura rigorosa e as condições de stop loss podem controlar os riscos
  4. A combinação de julgamentos de tendência e inversão leva a uma maior tolerância a falhas
  5. Sem desvio direcional, adequado para várias condições de mercado
  6. Grande espaço de parâmetros ajustável, pode ser otimizado para diferentes produtos

Análise de riscos

Os principais riscos a ter em conta são:

  1. Maior perda de comissões causada pela negociação de alta frequência
  2. Impossibilidade de evitar perfeitamente ser preso numa cerca
  3. Entrada excessivamente agressiva se os parâmetros não forem definidos adequadamente
  4. Dificuldade em suportar perdas enormes de uma só vez a curto prazo

Os riscos podem ser reduzidos através de:

  1. Ajustar a frequência de abertura adequadamente para reduzir o impacto das taxas
  2. Otimizar os parâmetros do indicador para garantir a qualidade do sinal
  3. Aumentar a amplitude de stop loss mas sofrer mais perdas de cobertura
  4. Parâmetros de ensaio em diferentes produtos

Orientações de otimização

Ainda há muito espaço para otimizar esta estratégia, principalmente:

  1. Optimizar parâmetros como período, comprimento, etc. através de testes
  2. Experimentar diferentes combinações de indicadores, por exemplo MACD, BOLL, etc.
  3. Modificando a lógica de abertura, definindo filtros mais rigorosos
  4. Otimização de estratégias de captação de lucro e stop-loss, por exemplo, paradas dinâmicas e de ruptura
  5. Usando métodos de aprendizagem de máquina para encontrar intervalos de parâmetros mais estáveis
  6. Testes em diferentes produtos e prazos de negociação
  7. Combinação da detecção de tendências para evitar negociações excessivamente agressivas em mercados de gama

Conclusão

Em geral, esta estratégia é uma estratégia de hedge estável e confiável com alta tolerância a falhas. Combina indicadores de tendência e reversão, obtendo retornos constantes através de frequentes negociações bidirecionais. Além disso, a própria estratégia tem um forte potencial de otimização e representa uma idéia de negociação de alta frequência que vale a pena pesquisar ainda mais.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the suns bipolarity
//©SeaSide420
//@version=4
strategy(title="TSI HMA CCI", default_qty_type=strategy.cash,default_qty_value=1000,commission_type=strategy.commission.percent,commission_value=0.001)
long = input(title="TSI Long Length", type=input.integer, defval=25)
short = input(title="TSI Short Length", type=input.integer, defval=25)
signal = input(title="TSI Signal Length", type=input.integer, defval=13)
length = input(33, minval=1, title="HMACCI Length")
src = input(open, title="Price Source")
ld = input(50, minval=1, title="Line Distance")
CandlesBack = input(8,minval=1,title="Candles Look Back")
StopLoss= input(3000,minval=1, title="Stop Loss")
TargetProfitAll= input(3000,minval=1, title="Target Profit Close All")
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2020)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true
ul = (ld)
ll = (ld-ld*2)
ma = hma(src, length)
cci = (src - ma) / (0.015 * dev(src, length))
price = close
double_smooth(src, long, short) =>
	fist_smooth = ema(src, long)
	ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)*10
tsi_value2=ema(tsi_value/10, signal)*10
cc = color.white
ct = color.new(color.gray, 90)
if cci<ll or cci[1]<ll
    cc:=color.red
if cci>ul or cci[1]>ul
    cc:=color.green
if cci<ul and cci>ll
    cc:=color.new(color.yellow, 90)
ccc = color.white
if cci>ul
    ccc:=color.green
if cci<cci[1] and cci<ul and cci>ll
    ccc:=color.red
if cci<ll
    ccc:=color.red
if cci>cci[1] and cci>ll and cci<ul
    ccc:=color.green
tsiplot= plot(tsi_value, color=color.lime)
tsiplot2=plot(tsi_value2, color=color.red)    
colorchange2 =tsi_value>tsi_value2?color.lime:color.orange
fill(tsiplot, tsiplot2, color=colorchange2, title="TSIBackground", transp=50)
band1 = hline(ul, "Upper Band 1", color=ct, linestyle=hline.style_dashed)
band0 = hline(ll, "Lower Band 1", color=ct, linestyle=hline.style_dashed)
fill(band1, band0, color=cc, title="MidBandBackground", transp=0)
band2 = hline(ul, "Upper Band 2", color=ct, linestyle=hline.style_dashed)
band3 = hline(ll, "Lower Band 2", color=ct, linestyle=hline.style_dashed)
cciplot2 = plot(cci, "CCIvHMA 2", color=color.black, transp=0, linewidth=5)
cciplot = plot(cci, "CCIvHMA", color=ccc, transp=0, linewidth=3)
hline(0, title="Zero")
hline(420, title="420")
hline(-420, title="-420")
fill(cciplot, cciplot2, color=ccc, title="CCIBackground", transp=0)
LongCondition=cci>cci[1] and cci>ll and src>src[CandlesBack] and tsi_value>tsi_value2
ShortCondition=cci<cci[1] and cci<ul and src<src[CandlesBack] and tsi_value<tsi_value2
plotshape(LongCondition, title="BUY", style=shape.circle, location=location.top, color=color.green)
plotshape(ShortCondition, title="SELL", style=shape.circle, location=location.top, color=color.red)
if  strategy.openprofit>TargetProfitAll
    strategy.close_all(when=window(),comment="close all profit target")
if LongCondition and strategy.openprofit>-1
    strategy.order("BUY", strategy.long,when=window())
if ShortCondition and strategy.openprofit>-1
    strategy.order("SELL", strategy.short,when=window())
strategy.exit("SL exit a sell", "SELL", loss = StopLoss,when=window())     
strategy.exit("SL exit a buy", "BUY", loss = StopLoss,when=window()) 

Mais.