Estratégia de arbitragem bilateral baseada nos indicadores TSI e HMACCI


Data de criação: 2024-01-23 11:26:14 última modificação: 2024-01-23 11:26:14
cópia: 0 Cliques: 575
1
focar em
1617
Seguidores

Estratégia de arbitragem bilateral baseada nos indicadores TSI e HMACCI

Visão geral

Esta estratégia combina sinais de negociação bilaterais do TSI e do CCI melhorado, abrindo posições frequentemente com arbitragem, com o objetivo de buscar lucros mais estáveis e contínuos. A lógica fundamental é o forco de ouro e o forco morto do indicador TSI, combinado com a linha de sinais de vazio do indicador HMACCI para determinar a direção de compra e venda do mercado.

Princípio da estratégia

A estratégia baseia-se principalmente na combinação de dois indicadores, o TSI e o HMACCI.

O indicador TSI contém uma média rápida e uma média lenta para determinar os sinais de compra e venda. Quando a linha rápida se move de baixo para cima, ela é usada como um sinal de compra e, ao contrário, como um sinal de venda. Isso permite capturar as tendências de mudança do mercado de forma mais sensível.

O indicador HMACCI é baseado no tradicional indicador CCI e usa a média móvel de Hull em vez do preço em si, para filtrar parte do ruído e determinar o intervalo de sobrevenda. O intervalo de sobrevenda pode confirmar novamente a direção do sinal do indicador TSI.

A lógica chave da estratégia é combinar os resultados desses dois indicadores e definir condições adicionais para filtrar os sinais de erro, como o preço de fechamento de uma linha K anterior e o preço máximo e mínimo antes de vários períodos, para controlar a qualidade do sinal de inversão.

No que diz respeito à abertura de posições, se as condições estiverem preenchidas, cada vez que a linha K fechar, a posição será aberta no preço de mercado, com mais vazio. Assim, você pode obter um lucro mais estável, mas precisa assumir o risco de arbitragem.

No que diz respeito ao stop loss, o stop float e o stop profit são todos equilibrados. Isso permite um bom controle do risco de negociação unilateral.

Vantagens estratégicas

É uma estratégia de arbitragem de alta frequência mais estável e confiável. As principais vantagens são:

  1. Combinação de dois indicadores para evitar falhas
  2. Cada linha K abre posições, operações de arbitragem frequentes, oscilações de ganhos e perdas são mais estáveis
  3. Logística rigorosa de abertura de posições e condições de stop loss para controlar o risco
  4. Combinação de tendência e reversão de julgamento, alta tolerância a erros
  5. Preferências sem direção, para todos os tipos de situações de mercado
  6. Os parâmetros são ajustáveis em tamanho de espaço e podem ser otimizados para diferentes variedades

Análise de Riscos

Os principais riscos a serem considerados são:

  1. A perda de mais taxas por transações de alta frequência
  2. A probabilidade de ser enganado em arbitragens é imperfeita.
  3. Parâmetros mal definidos podem levar a uma entrada excessiva no campo
  4. A possibilidade de grandes perdas unilaterais em curto prazo é insustentável.

Os riscos podem ser reduzidos através das seguintes medidas:

  1. Ajuste adequado da frequência de abertura para reduzir o impacto das taxas
  2. Optimizar os parâmetros do indicador para garantir a qualidade do sinal
  3. Aumentar o stop loss, mas sofrer mais perda de arbitragem
  4. Teste de configurações de parâmetros de diferentes variedades

Direção de otimização

A estratégia ainda tem muito espaço para otimização, e as principais linhas de atuação são:

  1. Optimizar e testar parâmetros como ciclo, duração, etc.
  2. Tente diferentes combinações de indicadores, como MACD, BOLL, etc.
  3. Modificação da lógica de abertura de estoque para definir condições de filtragem mais rigorosas
  4. Otimização de estratégias de stop loss para a realização de stop loss dinâmico e de ruptura
  5. Tente métodos de aprendizagem de máquina para encontrar uma gama de parâmetros mais estável
  6. Testes de variedades e períodos de tempo de transação
  7. Combinando os indicadores de tendência, evite a tendência de choque para entrar e sair de forma muito radical

Resumir

A estratégia é, em geral, uma estratégia de arbitragem bilateral estável, confiável e com alta tolerância a erros. Combina o julgamento de tendências e indicadores de reversão, obtendo ganhos estáveis através da abertura de posições bilaterais frequentes. Ao mesmo tempo, a estratégia em si tem um forte espaço e potencial de otimização e é uma ideia de negociação de alta frequência que vale a pena estudar.

Código-fonte da estratégia
/*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())