Estratégia do Santo Graal

Autora:ChaoZhang, Data: 2023-12-01 15:27:39
Tags:

img

Estratégia do Santo Graal

A estratégia do Santo Graal é uma estratégia quantitativa de negociação que combina um sistema de média móvel dupla com o indicador ADX.

Princípio da estratégia

A estratégia utiliza tanto a média móvel exponencial de 20 dias (EMA) quanto o indicador ADX para identificar oportunidades de entrada.

  1. Quando o valor do ADX estiver abaixo de 30 (indicando uma tendência mais fraca) e o preço atravessar a EMA de 20 dias a partir de baixo, vá long;

  2. Quando o valor do ADX estiver acima de 30 (indicando uma tendência mais forte), e o preço atravessar a EMA de 20 dias de cima, vá curto.

Pode-se ver que esta estratégia depende do ADX para julgar a força e direção da tendência, e, em seguida, combina o suporte e a resistência da média móvel para procurar oportunidades de reversão.

Análise das vantagens

A maior vantagem da estratégia do Santo Graal é que ela leva em conta tanto a direção quanto a força da tendência, o que pode efetivamente evitar falhas e reduzir a probabilidade de stop loss.

  1. A utilização de um sistema dual de médias móveis permite identificar de forma eficaz as tendências;
  2. Com a ajuda do ADX para avaliar a força da tendência, é possível evitar quebras inválidas;
  3. A combinação de conceitos de reversão e de negociação de tendências pode capturar tendências e reverter-se em pontos de virada;
  4. As regras de funcionamento são claras e simples, fáceis de aplicar.

Análise de riscos

A estratégia do Santo Graal também tem alguns riscos, principalmente nas seguintes áreas:

  1. O ADX, enquanto indicador auxiliar de avaliação, também emitirá sinais errados;
  2. Os cruzamentos de médias móveis duplas não podem evitar completamente as perdas causadas por pequenas altas;
  3. As definições de parâmetros inadequadas (tais como valores-alvo do ADX, períodos de média móvel, etc.) podem fazer com que os sinais sejam demasiado frequentes ou conservadores.

Para reduzir os riscos acima, os parâmetros podem ser ajustados para alcançar o melhor efeito. O stop loss também pode ser definido para controlar perdas individuais. Além disso, também é necessário testar estratégias em diferentes variedades e ciclos.

Orientações de otimização

Ainda há muitas direções de otimização para a estratégia do Santo Graal:

  1. Tente diferentes tipos de médias móveis, tais como médias móveis ponderadas, etc.
  2. O valor-alvo do ADX pode ser otimizado como parâmetro;
  3. Podem ser testados diferentes parâmetros do ciclo, tais como a EMA de 10 ou 30 dias;
  4. Outros indicadores auxiliares podem ser adicionados, como RSI, Bandas de Bollinger, etc., para confirmar os sinais de negociação.

Ajustar parâmetros ou adicionar novos indicadores pode aumentar a rentabilidade ou a taxa de vitória da estratégia.

Resumo

Em resumo, a estratégia Holy Grail combina as vantagens das médias móveis duplas e do indicador ADX, e usa regras de negociação claras para capturar inversões de tendência. Ele tem o potencial de ter um bom desempenho. No entanto, os comerciantes ainda precisam otimizar combinações de parâmetros e regras de stop loss para se adaptar a diferentes ambientes de mercado. Além disso, não importa o quão melhorado, é impossível evitar completamente o stop loss, que é um dilema enfrentado por toda estratégia de negociação.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("LAT Holy Grail v3", overlay=true)

/////////////TEST TIME ////////////////////////
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(4, "Backtest Start Month")
testStartDay = input(15, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(5, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////

myema= ema(close, 20)
plot(myema, color=green, title="eMA", linewidth=3)



//longCondition = (crossover(close, myema)) //and adx3 < target
//if (longCondition)
    //strategy.entry("My Long Entry Id", strategy.long)

//shortCondition = (crossunder(close, myema)) //and adx3 > target
//if (shortCondition)
    //strategy.entry("My Short Entry Id", strategy.short)
    
    //////////////////////////////////////////////////////////
    ///////////////////////////////////////   DMI  ///////////////////////////////////////////////
len3 = input(14, minval=1, title="DI Length")                           /////////////////////
lensig3 = input(14, title="ADX Smoothing", minval=1, maxval=50)         ////////////////////
up3 = change(high)                                                      ///////////////////
down3 = -change(low)                                                    //////////////////
plusDM3 = na(up3) ? na : (up3 > down3 and up3 > 0 ? up3 : 0)            /////////////////
minusDM3 = na(down3) ? na : (down3 > up3 and down3 > 0 ? down3 : 0)     ////////////////
trur3 = rma(tr, len3)                                                   ///////////////
plus3 = fixnan(100 * rma(plusDM3, len3) / trur3)                        //////////////
minus3 = fixnan(100 * rma(minusDM3, len3) / trur3)                      /////////////
sum3 = plus3 + minus3                                                   ////////////
adx3 = 100 * rma(abs(plus3 - minus3) / (sum3 == 0 ? 1 : sum3), lensig3) ///////////
//plot(plus3, color=green, style=circles, linewidth=2, title="+DI")     //////////
//plot(minus3, color=red, style=circles, linewidth=2, title="-DI")      /////////
plot(adx3, color=aqua, style=line, linewidth=3, title="ADX")            ////////
target = input(30, title=" ADX Target Line")                            ///////
plot(target, color=yellow, title="ADX Target Line")                     //////
/////////////////////////////////////////////////////////////////////////////////////////////////
                                                                                        
plot(hl2)


///////////////////////////////////////////////  eMA SIGNAL LINE   ///////////////////////////////////////

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

//////////////////////////////////////// HOLY GRAIL STRATEGY ///////////////////////////////////////////////////////////////////

if (adx3 <= target) and crossover(close, myema)
    strategy.entry("HolyGrail", strategy.long, comment="Long")
 
if (adx3 >= target) and crossunder(close, myema)
    strategy.entry("HolyGrail", strategy.short, comment="Short")
    


Mais.