Estratégia de negociação de aprendizagem automática

Autora:ChaoZhang, Data: 2024-01-29 11:20:42
Tags:

img

Resumo

Esta estratégia utiliza métodos de aprendizado de máquina para implementar uma estratégia de negociação automatizada pronta para uso.

Princípio da estratégia

Esta estratégia baseia-se principalmente nos seguintes pontos-chave:

  1. Usar a média móvel de Hull para determinar a direção da tendência do mercado
  2. Usar a EMA para avaliar as tendências a curto e médio prazo
  3. Utilize o canal do corpo da vela para localizar os níveis principais de SUPPORTO/RESISTÊNCIA
  4. Tomar decisões com base no cruzamento entre os preços de abertura e de fechamento a partir de quadros de tempo múltiplos

Especificamente, a estratégia traçará o Hull MA, a EMA de 13 períodos e a EMA de 21 períodos. Julgando as direções de tendência de curto e médio prazo com base no status longo e curto das EMAs. Combinado com o Hull MA para determinar tendências de ciclos mais longos. Isso fornece orientação sobre a direção geral para os sinais comerciais subsequentes.

Antes do ajustamento das posições, a estratégia referirá-se aos preços mais altos e mais baixos no canal da entidade correspondentes aos níveis de suporte e resistência, evitando assim a geração de sinais de negociação nas principais zonas de preços.

Finalmente, a estratégia invoca os preços de abertura e fechamento de 60 períodos. Quando o preço de fechamento cruza acima do preço de abertura, um sinal de compra é gerado. Quando cruza abaixo, um sinal de venda é gerado. Isso completa toda a lógica de negociação.

Análise das vantagens

A maior vantagem desta estratégia é que combina indicadores de aprendizagem de máquina e análise técnica para obter uma solução de negociação automatizada lógica, ajustável e fácil de usar.

  1. Combinação de múltiplos indicadores melhora a precisão do sinal

    A estratégia não se baseia apenas em um ou dois indicadores, mas leva em conta vários fatores, como tendências, suporte / resistência e avanços de preços.

  2. Configuração flexível dos parâmetros

    A duração dos períodos Hull MA, EMA, períodos crossover aberto/fechado pode ser ajustada através de parâmetros, tornando a estratégia adaptável a diferentes ambientes de mercado.

  3. Sinais de negociação automatizados

    Os sinais de negociação baseados em indicadores e crossovers podem desencadear automaticamente compras e vendas sem julgamento manual, reduzindo a dificuldade.

  4. Exibição visualizada

    Os gráficos da estratégia podem mostrar claramente a estrutura do mercado, o estado da tendência e os preços-chave, apresentando intuitivamente a base para o julgamento da estratégia.

Análise de riscos

Embora esta estratégia tenha sido otimizada em vários aspectos, ainda existem alguns riscos potenciais:

  1. Incapacidade de acompanhar movimentos drásticos de preços

    Em mercados voláteis, os indicadores podem tornar-se ineficazes ou atrasados, fazendo com que a estratégia falhe em rastrear as mudanças de preço no tempo.

  2. Existência de taxa de erro do sinal

    Os sinais de negociação baseados em indicadores e modelos, mais ou menos, terão alguns sinais falsos ou sinais em falta.

  3. Risco de combinação longo/curto

    A estratégia que faz simultaneamente posições longas e curtas tem o risco de perdas em ambos os lados se os julgamentos forem errados.

  4. Risco de sobreajuste

    As definições de parâmetros excessivamente complexas correm o risco de sobreajuste, sendo necessário simplificar o sistema com um número limitado de combinações de parâmetros.

Orientações de otimização

Ainda há espaço para otimizar esta estratégia, principalmente nos seguintes aspectos:

  1. Adicionar mais sinais de indicador

    Para além dos indicadores existentes, podem ser introduzidos mais indicadores auxiliares, tais como canais BOLL, indicadores KD, etc., para enriquecer a referência do sistema.

  2. Aplicar modelos de aprendizagem profunda

    Usar indicadores simples como características para treinar o LSTM e outros modelos de aprendizagem profunda para melhorar a qualidade do sinal.

  3. Incorporar dados fundamentais

    Adicionar dados macroeconómicos, informações sobre políticas e outros fatores fundamentais para otimizar as decisões de longo ciclo.

  4. Valor do risco e da posição

    Introduzir estratégias de stop loss, ajustar dinamicamente o tamanho das posições com base na volatilidade do retorno da estratégia para controlar estritamente os riscos.

Conclusão

Esta estratégia integra tendências, níveis de suporte/resistência, breakouts e vários outros indicadores, utilizando métodos de aprendizado de máquina para alcançar soluções quantitativas automatizadas e prontas para uso. Tem as vantagens de combinações de indicadores diversos, parâmetros ajustáveis e sinais automatizados, ao mesmo tempo em que enfrenta desvios de rastreamento, erros de sinal, riscos de mistura longa/curta até certo ponto.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title='Ali Jitu Abus', shorttitle='Ali_Jitu_Abis_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Period=input('60')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)
longCondition = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

plot(request.security(syminfo.tickerid, Period, close), color=red, title="Period request.security Close")
plot(request.security(syminfo.tickerid, Period, open), color=green, title="Period request.security Open")

///////////////////////////////////////////////////////////////////////////////////////////

Mais.