Tendência cruzada de média estocástica e média móvel seguindo uma estratégia quantitativa

Autora:ChaoZhang, Data: 2024-02-05 15:27:03
Tags:

img

Resumo

Esta estratégia utiliza principalmente os cruzamentos do indicador Stoch na área de sobrecompra/supervenda como sinais de entrada, enquanto julga a direção da tendência atual com o indicador EMA.

Princípios

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

  1. EMA para determinar a direcção da tendência

    Usando uma EMA rápida e uma EMA lenta, quando a EMA rápida está acima da EMA lenta, ela é determinada como uma tendência ascendente.

  2. Stock para gerar sinais de negociação

    O indicador de Stoch consiste em linhas %K e %D. Quando %K cruza acima de %D na área de sobrecompra, ele gera um sinal de compra. Quando %K cruza abaixo de %D na área de sobrevenda, ele gera um sinal de venda. Esta estratégia só leva sinais de cruzamento de Stoch quando eles acontecem nas zonas de sobrecompra / sobrevenda.

  3. Mecanismo de gestão de riscos

    A estratégia também define os níveis de stop loss e take profit. Ao manter uma posição longa, se o preço quebra o nível de stop loss, ele sairá do comércio. Se o preço quebra o nível de take profit, ele fechará a posição para lucro. A mesma lógica se aplica às posições curtas.

Em geral, trata-se de uma estratégia de negociação quantitativa típica que utiliza uma combinação de indicadores para determinar a direção da tendência e sinais de negociação, complementados por regras rigorosas de gestão de riscos para reduzir o risco de negociação.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. Usar a EMA para determinar as tendências principais e secundárias evita ficar preso num mercado lateral.

  2. A força do indicador Stoch reside na sua capacidade de refletir com precisão os níveis de sobrecompra/supervenda.

  3. A estratégia especifica claramente os possíveis cenários longos e curtos, o que filtra ainda mais os sinais e evita a abertura cega de posições num mercado complexo.

  4. A gestão estrita do risco ajuda a controlar a perda de negociações individuais, limita o máximo de retirada, enquanto ainda dá espaço para negociações lucrativas.

Análise de riscos

Há também alguns riscos com esta estratégia:

  1. Indicadores como a EMA e a Stoch têm uma natureza retardada, o que dificulta esta estratégia para capturar as reversões do mercado em tempo hábil.

  2. Confiar apenas em indicadores pode facilmente estabelecer um viés, perdendo assim as oportunidades de negociação realmente oferecidas pelo mercado.

  3. O próprio mecanismo de gestão do risco pode também limitar o potencial de lucro, estabelecendo um stop loss e um take profit prematuros.

  4. Existem riscos associados à seleção de parâmetros. É necessário um extenso backtesting e otimização para encontrar os parâmetros ideais.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Tente diferentes tipos de EMA para a determinação da tendência, como WMA, Hull MA etc e compare os resultados.

  2. Combinar outros indicadores para gerar sinais de negociação, por exemplo, MACD, KDJ para construir um sistema multi-indicador.

  3. Otimizar as configurações de stop loss e take profit para se adaptar melhor à volatilidade do mercado.

  4. Teste a variação do desempenho em diferentes produtos e prazos para encontrar a combinação ideal.

  5. Considere a introdução de modelos de aprendizagem de máquina para ajudar a tendência e o julgamento de sinais para tornar a estratégia mais inteligente.

Conclusão

Em conclusão, esta estratégia combina indicadores comumente usados para formar um sistema de tendência relativamente maduro, levando em conta a determinação da tendência, sinais de negociação e gestão de riscos. Com otimização adicional, acredito que esta estratégia pode alcançar melhores resultados de negociação ao vivo. Ao mesmo tempo, também devemos estar cientes das limitações de estratégias individuais e continuar a aprender as complexidades do mercado em busca de lucros constantes a longo prazo.


/*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)




Mais.