Estratégia de consolidação da média móvel de momentum


Data de criação: 2024-01-25 11:39:00 última modificação: 2024-01-25 11:39:00
cópia: 0 Cliques: 682
1
focar em
1617
Seguidores

Estratégia de consolidação da média móvel de momentum

Visão geral

A estratégia usa principalmente a correlação de linha de equilíbrio entre a HMA e a EMA da média móvel para determinar o momento de compra. Quando a HMA usa a EMA, a correlação é considerada como terminada e uma nova tendência ascendente é formada, portanto, a compra é feita ao mesmo tempo que a EMA é usada na HMA.

A estratégia combina o indicador RSI para detectar sobrecompra e sobrevenda. A compra é permitida quando o RSI está abaixo de 70 e uma parada parcial é considerada quando o RSI está acima de 80.

Princípio da estratégia

A estratégia utiliza o EMA e o HMA de 200 ciclos para construir um sistema de linha média. O HMA é um indicador de média móvel mais sensível, baseado no design aprimorado do EMA.

No caso de uma posição já construída, se o preço da ação voltar a cair, a HMA volta a baixar a EMA, indicando o início de uma nova liquidação, então a posição está totalmente em equilíbrio. Ao mesmo tempo, se o RSI estiver acima de 80, a paralisação parcial será de 20% para evitar perdas.

A lógica de negociação da estratégia é relativamente simples, consistindo principalmente em cruzamentos múltiplos entre HMA e EMA, combinados com o julgamento de altos e baixos do RSI, formando uma estratégia de negociação mais robusta.

Análise de vantagens

A maior vantagem da estratégia é que, usando a configuração de negociação de equilibração da EMA e da HMA, pode-se filtrar a maior parte dos False Break, aumentando assim a taxa de ganho. Ao mesmo tempo, o auxiliar do indicador RSI também pode controlar eficazmente o risco, a combinação dos dois torna a estratégia ideal para mercados de choque de equilibração.

Além disso, a estratégia usa apenas 3 indicadores e a lógica é simples, o que facilita a otimização e o feedback de seus parâmetros, o que facilita a verificação e o aprimoramento da estratégia.

Análise de Riscos

Embora a estratégia tenha alguns benefícios, existem alguns riscos a serem considerados. Por exemplo, o tempo de manutenção de posições pode ser longo e o suporte financeiro adequado pode ser necessário.

Além disso, a estratégia se baseia principalmente em indicadores de equilíbrio, o que pode levar a um risco maior se houver uma ruptura anormal no preço, e as medidas de parada podem não funcionar o suficiente. Além disso, a configuração de parâmetros também pode afetar o desempenho da estratégia, o que requer um grande número de testes para encontrar o parâmetro ideal.

Direção de otimização

Considerando os riscos acima mencionados, a estratégia pode ser otimizada em vários aspectos:

  1. Combinando com os indicadores de volatilidade, ajustar posições de forma dinâmica de acordo com as flutuações do mercado.

  2. Aumentar o discernimento dos indicadores de tendência e evitar inversões desnecessárias.

  3. Otimizar os parâmetros das médias móveis para se aproximarem das características atuais do mercado.

  4. A utilização de um sistema de tempo para evitar o problema de perdas individuais.

Resumir

Esta estratégia é, em geral, uma estratégia de balanço de choque mais simples e clássica. Ela é aplicada principalmente a negociações de curto e médio prazo de índices de ações e ações populares, obtendo um valor de alfa relativamente estável. Com a otimização dos parâmetros e o reforço das medidas de controle de risco, o desempenho da estratégia tem muito espaço para melhorar.

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 Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
strategy(title="EMA_HMA_RSI_Strategy", overlay=true, pyramiding=2,     default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 

//longCondition = crossover(sma(close, 14), sma(close, 28))
//if (longCondition)
    //strategy.entry("My Long Entry Id", strategy.long)

//shortCondition = crossunder(sma(close, 14), sma(close, 28))
//if (shortCondition)
  //  strategy.entry("My Short Entry Id", strategy.short)

//HMA
HMA(src1, length1) =>  wma(2 * wma(src1, length1/2) - wma(src1, length1), round(sqrt(length1)))

var stopLossVal=0.00

//variables BEGIN
length=input(200,title="EMA and HMA Length")   //square root of 13

rsiLength=input(13, title="RSI Length")

takePartialProfits = input(true, title="Take Partial Profits (if this selected, RSI 13 higher reading over 80 is considered for partial closing ) ")

stopLoss = input(title="Stop Loss%", defval=8, minval=1)
//variables  END

//RSI 
rsi13=rsi(close,rsiLength)


ema200=ema(close,length)
hma200=HMA(close,length)

//exitOnAroonOscCrossingDown = input(true, title="Exit when Aroon Osc cross down zero ")


// Drawings

//Aroon oscillator

arronUpper = 100 * (highestbars(high, length+1) + length)/length
aroonLower = 100 * (lowestbars(low, length+1) + length)/length

aroonOsc  = arronUpper - aroonLower

aroonMidpoint = 0
//oscPlot = plot(aroonOsc, color=color.green)
//midLine= plot(aroonMidpoint, color=color.green)
//topLine = plot(90,style=plot.style_circles, color=color.green)
//bottomLine = plot(-90,style=plot.style_circles, color=color.red)

//fill(oscPlot, midLine, color=aroonOsc>0?color.green:color.red, transp=50)
//fill(topLine,bottomLine, color=color.blue)
//fill(topLine,oscPlot, color=aroonOsc>90?color.purple:na, transp=25)


// RSI 
//plot(rsi13, title="RSI", linewidth=2, color=color.purple)
//hline(50, title="Middle Line", linestyle=hline.style_dotted)
//obLevel = hline(80, title="Overbought", linestyle=hline.style_dotted)
//osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
//fill(obLevel, osLevel, title="Background", color=rsi13 >=30 ? color.green:color.purple, transp=65)  // longTermRSI >=50

hullColor = hma200 > hma200[2] ? #00ff00 : #ff0000

plot(hma200, title="HULL 200", color=hullColor,  transp=25)
plot(ema200, title="EMA 200", color=color.orange)

//Entry--
strategy.initial_capital = 50000
strategy.entry(id="Long Entry", comment="LE", qty=(strategy.initial_capital * 0.10)/close, long=true,  when=strategy.position_size<1 and hma200 < ema200   and  hma200 > hma200[2]  and rsi13<70 )     //  // aroonOsc<0

//Add
if(strategy.position_size>=1 and  close < strategy.position_avg_price and  ( crossover(rsi13,30) or  crossover(rsi13,40) ) )   // hma200 < ema200   and  hma200 > hma200[2]   and hma200[2] < hma200[3] )  //and crossover(rsi13,30)  aroonOsc<0    //and hma200 > hma200[2]  and hma200[2] <= hma200[3]  //crossover(rsi13,30)
    qty1=(strategy.initial_capital * 0.10)/close
    //stopLossVal:= abs(strategy.position_size)>1 ?  ( (close > close[1] and close > open and close>strategy.position_avg_price) ? close[1]*(1-stopLoss*0.01) : stopLossVal ) : 0.00 
    strategy.entry(id="Long Entry", comment="Add", qty=qty1, long=true )     //crossover(close,ema34)  //and close>ema34  //crossover(rsi5Val,rsiBuyLine)  --   SL="+tostring(stopLossVal, "####.##")


//stopLossVal:= abs(strategy.position_size)>1 ? strategy.position_avg_price*(1-0.5) : 0.00 

stopLossVal:= abs(strategy.position_size)>1 ?  ( (close > close[1] and close > open and close>strategy.position_avg_price) ? close[1]*(1-stopLoss*0.01) : stopLossVal ) : 0.00 
//stopLossVal:= abs(strategy.position_size)>1 ?  strategy.position_avg_price*(1-stopLoss*0.01) :  0.00

barcolor(color=strategy.position_size>=1? rsi13>80 ? color.purple: color.blue:na)

//close partial
if(takePartialProfits==true)
    strategy.close(id="Long Entry", comment="Partial X  points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=20 , when=abs(strategy.position_size)>=1 and crossunder(rsi13, 80)  and close > strategy.position_avg_price  )   //close<ema55 and rsi5Val<20 //ema34<ema55



//close All
//if(exitOnAroonOscCrossingDown)
  //  strategy.close(id="Long Entry", comment="Exit All points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and crossunder(aroonOsc, 0) )   //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89

//close All on stop loss
strategy.close(id="Long Entry", comment="Stoploss X points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89

strategy.close(id="Long Entry", comment="hmaXema X points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close > strategy.position_avg_price  and  crossunder(hma200,ema200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89