Estratégia quantitativa de acompanhamento de tendências com base nos indicadores Stoch e EMA


Data de criação: 2024-02-05 15:27:03 última modificação: 2024-02-05 15:27:03
cópia: 0 Cliques: 590
1
focar em
1617
Seguidores

Estratégia quantitativa de acompanhamento de tendências com base nos indicadores Stoch e EMA

Visão geral

Esta estratégia utiliza principalmente o cruzamento do indicador Stoch em áreas de sobrecompra e sobrevenda como sinal de entrada, e, em combinação com o indicador EMA para avaliar a direção da tendência atual, faz uma operação múltipla somente em uma tendência de EMA ascendente contínua, fazendo uma operação de shorting em uma tendência de EMA descendente contínua, e é uma estratégia típica de acompanhamento de tendência.

Princípio da estratégia

A estratégia consiste em três partes principais:

  1. Indicadores da EMA avaliam a direção da tendência

Usando dois EMAs diferentes, rápido e lento, quando o EMA está acima do EMA lento, é considerado uma tendência ascendente, e quando o EMA está abaixo do EMA lento, é considerado uma tendência descendente.

  1. Indicadores de Stoch avaliam os sinais de compra e venda

O indicador de Stoch é composto por linhas %K e %D, que produzem um sinal de compra quando o ouro se cruza com a linha %D acima da zona de superaquecimento e um sinal de venda quando a linha %K se cruza com a linha %D abaixo da zona de superaquecimento. A estratégia só emite um sinal de negociação quando o cruzamento do indicador de Stoch ocorre na zona de superaquecimento.

  1. Mecanismo de gestão de riscos

A estratégia estabelece simultaneamente um mecanismo de stop loss e de stop-loss. Ao manter várias posições, se o preço for abaixo do stop loss definido, a posição de equilíbrio será interrompida; se o preço for acima do stop stop definido, a posição de equilíbrio será encerrada.

Em geral, a estratégia é uma estratégia de negociação quantitativa mais típica, que usa um conjunto de indicadores para determinar a direção da tendência e os sinais de negociação, além de ser complementada por regras rigorosas de gerenciamento de risco, o que reduz efetivamente o risco de negociação.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. A EMA utiliza a tendência dos principais subníveis para evitar que os mercados se envolvam em turbulências desconhecidas.

  2. A característica do indicador Stoch é que ele é capaz de refletir muito bem se está atualmente em uma área de sobrecompra ou sobrevenda, portanto, a geração de sinais cruzados pode ser usada para negociação em uma área de sobrecompra ou sobrevenda.

  3. A estratégia define o ambiente em que o excesso e o excesso podem ocorrer, permitindo que a geração de sinais seja mais filtrada, reduzindo a probabilidade de sinais errados e evitando posições cegas em mercados complexos.

  4. O rigoroso mecanismo de gerenciamento de risco ajuda a controlar as perdas de uma única transação, tanto para controlar a retirada máxima do total, como para deixar espaço suficiente para negociações lucrativas.

Análise de Riscos

A estratégia também traz alguns riscos:

  1. Os indicadores EMA, Stoch e outros apresentam um certo atraso, o que dificulta a estratégia e a oportunidade de aproveitar o momento de uma reversão do mercado.

  2. A mera dependência de indicadores pode levar a uma tomada de posição preconceituosa sobre o mercado, o que pode fazer com que se perca as oportunidades de negociação que o mercado realmente oferece.

  3. O mecanismo de gestão de risco em si também pode ser um limite para a estratégia de ganho de espaço. A configuração de parada de perda e parada de posição em grandes tendências precisa ser especialmente cuidadosa.

  4. A estratégia também apresenta riscos na seleção de parâmetros, pois o impacto de diferentes parâmetros sobre os resultados requer uma grande quantidade de feedback e otimização para obter o melhor conjunto de parâmetros.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Tente diferentes tipos de EMAs, como a média móvel ponderada, a MA de Hull e outros indicadores para avaliar tendências e fazer análises comparativas.

  2. Tente combinar outros indicadores para gerar sinais de negociação, como MACD, KDJ, etc., construindo um sistema de negociação de vários indicadores.

  3. Optimizar as configurações de stop loss e stop-loss para que sejam mais adaptadas às situações reais de flutuação do mercado. Pode-se definir um stop loss mais flexível e um stop stop mais rigoroso.

  4. Teste a variabilidade de desempenho da estratégia em diferentes variedades e períodos, procurando a melhor combinação de variedades e períodos.

  5. Considere a inclusão de modelos de aprendizado de máquina ou de redes neurais para auxiliar na determinação da direção da tendência e dos sinais de negociação, para a inteligência da estratégia.

Resumir

Em geral, a estratégia usa indicadores comuns para combinar e construir um conjunto de estratégias de negociação de tendências mais maduras. Ela considera tanto o julgamento de tendências quanto a geração de sinais de negociação específicos, além de estabelecer mecanismos de gerenciamento de risco.

Código-fonte da estratégia
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)