O recurso está a ser carregado... Carregamento...

Estratégia de negociação de quantidades cruzadas bidireccional da EMA

Autora:ChaoZhang, Data: 2024-01-24 17:31:41
Tags:

img

Resumo

Esta estratégia utiliza indicadores EMA bidirecionais para determinar a principal direção da tendência do mercado e combina o indicador RSI como o momento da seleção da entrada, que pertence à tendência após a estratégia de negociação do algoritmo.

Princípio da estratégia

  1. Calcular múltiplos grupos de EMA com ciclos diferentes para identificar a principal direção da tendência do mercado em três dimensões: curto, médio e longo prazo
  2. Quando a EMA de curto prazo cruza acima da EMA de médio e longo prazo, determina-se que se formou uma tendência de alta.
  3. Quando a EMA de curto prazo cruza abaixo da EMA de médio e longo prazo, determina-se que se formou uma tendência de baixa.
  4. Combine o indicador RSI para encontrar o momento de entrada adequado.
  5. Em uma tendência de alta, vá longo quando o indicador RSI estiver em níveis baixos; em uma tendência de baixa, vá curto quando o indicador RSI estiver em níveis altos

A estratégia acima aplica principalmente o indicador EMA bidirecional para determinar a direção principal da tendência e usa o indicador RSI como a seleção do sinal de entrada, que pertence a uma tendência típica após a estratégia de negociação por algoritmo.

Análise das vantagens

A maior vantagem desta estratégia é que ela pode determinar claramente a principal direção da tendência do mercado e selecionar um melhor momento de entrada com base no indicador RSI.

  1. Usar múltiplos conjuntos de EMA para identificar a principal direção da tendência do mercado sob múltiplas dimensões temporais
  2. O cálculo do indicador EMA é simples, com menos ruído e determina a principal tendência do mercado de forma precisa e fiável
  3. O indicador RSI pode determinar efetivamente pontos de entrada e stop loss para otimizar significativamente a retorização do retorno
  4. A estrutura do algoritmo é clara e fácil de entender e modificar.
  5. Pode ser combinado de forma flexível com outros indicadores técnicos para melhorar ainda mais o desempenho da estratégia

Análise de riscos

A estratégia apresenta também alguns riscos, principalmente nos seguintes aspectos:

  1. Quando a tendência se inverte, o ponto de stop loss pode ser demasiado idealizado, aumentando assim as perdas
  2. Incapacidade de determinar eficazmente o ponto de inversão da tendência, possivelmente perdendo a oportunidade de parar a perda a tempo
  3. Os parâmetros EMA e RSI necessitam de testes e otimização repetidos, caso contrário podem causar instabilidade
  4. Não podemos garantir que cada entrada seja o momento perfeito, pode haver repetências múltiplas desnecessárias
  5. É difícil evitar de forma eficaz grandes lacunas sob a influência de acontecimentos súbitos

Para enfrentar os riscos acima referidos, podem ser realizadas otimizações nas seguintes áreas:

  1. Pontos de parada de perdas razoavelmente definidos para evitar perdas excessivas
  2. Aumentar outros indicadores para determinar a reversão da tendência para garantir um stop loss oportuno
  3. Otimizar as combinações de parâmetros para se adaptarem às condições mais amplas do mercado
  4. Modificar a lógica de entrada e stop loss para reduzir o número de repetições
  5. Aumentar o julgamento das exceções para evitar efeitos negativos das lacunas de mercado

Orientações de otimização

A partir das vantagens e riscos desta estratégia, podemos obter as seguintes direcções otimizáveis:

  1. No quadro da EMA bidirecional existente, introduzir indicadores como o MACD e o BOLL para julgar os pontos de inversão da tendência, otimizando assim as estratégias de take profit e stop loss
  2. Introduzir modelos de aprendizagem de máquina para prever a probabilidade de reversão da tendência e melhorar ainda mais o desempenho da estratégia
  3. Aplicar filtros avançados para identificar automaticamente condições anormais de mercado e prevenir efetivamente perdas
  4. Usar algoritmos genéticos, aprendizado de reforço profundo e outros métodos para otimizar automaticamente parâmetros para que as estratégias possam se adaptar a mais tipos de mercado
  5. Adicionar módulo automático stop loss, pode ajustar dinamicamente pontos stop loss de acordo com a situação real

Através da introdução de mais indicadores, modelos de previsão, otimização de parâmetros, módulos de controlo de riscos e outros meios, esta estratégia pode ser melhorada para se adaptar a condições de mercado mais complexas e voláteis.

Conclusão

Este artigo apresentou detalhadamente o principal conteúdo da estratégia de negociação quantitativa cruzada bidirecional EMA. Primeiro, delineou as principais ideias e princípios operacionais da estratégia. Em seguida, as vantagens da estratégia foram totalmente analisadas. Ao mesmo tempo, também analisou os principais riscos potenciais da estratégia. Nesta base, várias direções principais otimizáveis foram propostas. Em resumo, esta estratégia tem a vantagem de determinar a principal tendência do mercado e também tem algum espaço para otimização, que é uma estratégia de negociação quantitativa típica. Através da melhoria contínua e otimização, esta estratégia pode se tornar uma escolha importante para os investidores negociação algorítmica.


/*backtest
start: 2023-01-23 00:00:00
end: 2024-01-23 00:00:00
period: 4h
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/
// © Investoz
// Indikatorn är byggd som ett utbildningsyfte och är därför ingen rekommendation för köp/sälj av aktier. Tanken är att skapa en visuell form i en graf
// som visar om det finns någon trend såväl positiv som negativ. En dialogruta med en varning talar om vilken trend som råder. I koden finns en möjlighet
// att ta position eller gå ur position om man vill skapa en startegi kring denna trendindikator. Rekommenderar dock starkt att inte enbart förlita sig på denna
// indikator som beslut för köp/sälj då resultaten blir negativa om man köper på psoitiv trend och säljer på negativ trend. Det måste kombineras med andra idéer
// och därför fungerar denna skript mer som ett komplement till sin egen strategi.
// Det är fritt fram för vem som helst att använda sig av denna indikator.  
//@version=4
//Skapar en strategiskript med 5 % av eget kapital som ett exempel. Detta går att ändra i skriptets inställningar, välj egenskaper och sedan ändra orderstorlek
//till ett annat värde av % på eget kapital.
strategy("© Investoz trendvarningar", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
//Lägger till inmatningar till skriptindikatorn. Användaren kan se och redigera inmatningar i objektdialogen efter eget val.
ema1 = input(21, minval=1, maxval=500, title="Lila linje")
valema1=input(true, title="Visa lila linje")
ema2 = input(34, minval=1, maxval=500, title="Blå linje")
valema2=input(true, title="Visa blå linje")
ema3 = input(55, minval=1, maxval=500, title="Grön linje")
valema3=input(true, title="Visa grön linje")
ema4 = input(89, minval=1, maxval=500, title="Gul linje")
valema4=input(true, title="Visa gul linje")
ema5 = input(141, minval=1, maxval=500, title="Orange linje")
valema5=input(true, title="Visa orange linje")
ema6 = input(230, minval=1, maxval=500, title="Röd linje")
valema6=input(true, title="Visa röd linje")
ema7 = input(371, minval=1, maxval=500, title="Röd linje")
valema7=input(true, title="Visa röd linje")
//Inmatningar för antal staplar
startbar = input(1, minval=1, maxval=1, title="Första stapeln")
Endbar = bar_index
//Källa input, stängning. Användaren kan själv byta till vilken källa som önskas.
src = input(close, title="Source")
//Antal staplar sedan den längsta ema började och framåt. 
tid=Endbar + startbar - 371
//EMA loop
aema1 = ema(src, ema1)
bema2 = ema(src, ema2)
cema3 = ema(src, ema3)
dema4 = ema(src, ema4)
eema5 = ema(src, ema5)
fema6 = ema(src, ema6)
gema7 = ema(src, ema7)
//Skriver ut linjer i diagrammet om förhållandet är sant, annars falskt.
h=plot(valema1 ? aema1 : na, title="Lila linje", style=plot.style_line, linewidth=1, color=color.purple)
i=plot(valema2 ? bema2 : na, title="Blå linje", style=plot.style_line, linewidth=1, color=color.blue)
j=plot(valema3 ? cema3 : na, title="Grön linje", style=plot.style_line, linewidth=1, color=color.green)
k=plot(valema4 ? dema4 : na, title="Gul linje", style=plot.style_line, linewidth=1, color=color.yellow)
l=plot(valema5 ? eema5 : na, title="Orange linje", style=plot.style_line, linewidth=1, color=color.orange)
m=plot(valema6 ? fema6 : na, title="Röd linje", style=plot.style_line, linewidth=1, color=color.red)
n=plot(valema7 ? gema7 : na, title="Brun linje", style=plot.style_line, linewidth=1, color=color.maroon)
//Fyller bakgrunden mellan två linjer med en viss färg.
fill(h, i, color = color.purple,transp=34)
fill(i, j, color = color.blue,transp=34)
fill(j, k, color = color.green,transp=34)
fill(k, l, color = color.yellow,transp=34)
fill(l, m, color = color.orange,transp=34)
fill(m, n, color = color.red,transp=34)
//Skapa en algoritm för positiv trend
PositivTrend = crossover(aema1,gema7)?1:0
TrendPositiv = ema(close,1) > aema1 and aema1 > bema2?1:0
//Skapa en algoritm för negativ trend
NegativTrend = crossunder(aema1,gema7)?1:0
TrendNegativ = ema(close,1) < aema1 and aema1 < bema2?1:0
//Skapar en textruta med varningstext för positiv trend
varningtextpositiv = "Varning för positiv trend."+"\n" + "Leta efter att ta position!"
// if PositivTrend
//     varningpositiv=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.green,
//      text=varningtextpositiv,
//      style=label.style_label_down,
//      textalign=text.align_left)
//Skapar en textruta med varningstext för negativ trend
varningtextnegativ = "Varning för negativ trend."+"\n" + "Leta efter utgången!"
// if NegativTrend
//     varningnegativ=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.red,
//      text=varningtextnegativ,
//      style=label.style_label_up,
//      textalign=text.align_left)
//Köp om positiv trend
if (PositivTrend) 
    strategy.entry("Ta position", strategy.long, when = PositivTrend)
//Sälj om negativ trend
if (NegativTrend)
    strategy.close("Ta position", when = NegativTrend, comment="Gå ur position")
//Beräkning av positiv trend
vspositiv(positiv)=>valuewhen(Endbar==startbar,positiv,0)
vepositiv(positiv)=>valuewhen(Endbar==Endbar,positiv,0)
positivmean(TrendPositiv)=>
    csumpositiv = cum(TrendPositiv)
//Slut//   
    a = vepositiv(csumpositiv)
//Start//
    b = vspositiv(csumpositiv)
//Slut - Start// 
    (a - b)/(tid)
positivmeanpositiv = positivmean(TrendPositiv) 
//Beräkning av negativ trend
vsnegativ(negativ)=>valuewhen(Endbar==startbar,negativ,0)
venegativ(negativ)=>valuewhen(Endbar==Endbar,negativ,0)
negativmean(TrendNegativ)=>
    csumnegativ = cum(TrendNegativ)
//Slut//   
    a = venegativ(csumnegativ)
//Start//
    b = vsnegativ(csumnegativ)
//Slut - Start// 
    (a - b)/(tid)
negativmeannegativ = negativmean(TrendNegativ) 
//Inmatning av text som ska in i texruta som visar antal staplar i trend
logga = "© Investoz: Trend i tid"+ "\n"
streck = "--------------------------------------------------------"
totalastaplar = "\n" + "Dagar totalt: " + tostring(tid)+ " dagar "+"\n"+ streck + "\n"
totalpositiv = "Dagar totalt i positiv trend "+" 📈 : "  +tostring(positivmeanpositiv*tid, "##.##") +" dagar " + "\n"
totalnegativ = "\n" + "Dagar totalt i negativ trend" + " 📉 : "  +tostring(negativmeannegativ*tid, "##.##") +" dagar " 
//Textruta för antal staplar i trend
// if barstate.ishistory
//     barcountlbl=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.yellow,
//      text=logga+streck+totalastaplar+totalpositiv+streck+totalnegativ,
//      style=label.style_label_lower_left,
//      textalign=text.align_left)
//     label.delete(barcountlbl[1])
////////////////////////////////// 

Mais.