STC MA ATR Estratégia integrada de negociação de tendências

Autora:ChaoZhang, Data: 2023-10-17 14:34:10
Tags:

img

Resumo

Esta estratégia combina os indicadores técnicos STC, Moving Average MA e Average True Range ATR para avaliar as tendências e implementar negociações relativamente estáveis de acompanhamento de tendências.

Princípio da estratégia

  1. O indicador STC julga a reversão da tendência. Ele utiliza a linha rápida menos a linha lenta, em seguida, processa suavização secundária, formando sinais de tendência consistentes. O sinal de compra vem quando o indicador cruza acima do eixo 0 e o sinal de venda abaixo do eixo 0.

  2. A média móvel MA julga a direção da tendência. Quando o preço da ação cruza acima da MA, ele sinaliza uma tendência de alta, dando um sinal de posição longa. Quando o preço cruza abaixo da MA, ele sinaliza uma tendência de queda, dando um sinal de posição curta.

  3. O indicador ATR define stop loss e take profit. ATR pode ajustar dinamicamente stop loss e take profit pontos com base na volatilidade do mercado. E ATR atua como um sinal para a direção da negociação em si, subindo na tendência de alta e caindo na tendência de baixa.

  4. A estratégia toma os sinais STC como o principal momento de entrada, usa MA como julgamento de tendência auxiliar e ATR para stop loss e take profit.

Análise das vantagens

  1. A estratégia combina múltiplos indicadores para julgar tendências e pontos de reversão, melhorando a precisão dos sinais de negociação.

  2. O STC pode capturar sinais de reversão e evitar ser preso em tendências.

  3. O ATR define stop loss dinâmico e take profit baseado na volatilidade do mercado, evitando grandes perdas.

  4. A combinação de múltiplos indicadores forma uma forte capacidade de acompanhamento da tendência.

Análise de riscos

  1. O STC tem um atraso de tempo, o que pode não ser o momento ideal para a reversão do preço.

  2. A MA tende a atrasar-se durante oscilações violentas de preços, o que pode gerar sinais errados.

  3. O multiplicador ATR deve ser afrouxado ou temporariamente desativado durante grandes tendências.

  4. Os parâmetros devem ser ajustados para evitar perdas desnecessárias.

Orientações de otimização

  1. Ajuste os parâmetros do STC para encontrar combinações de resposta mais rápidas para a reversão.

  2. Otimizar o parâmetro do período MA para um melhor acompanhamento da tendência.

  3. Impactos de ensaio de múltiplos ATR diferentes.

  4. Tente substituir o STC por outros indicadores para melhor correspondência.

  5. Introduzir algoritmos de aprendizagem de máquina para otimização automática de vários parâmetros.

  6. Considere as grandes tendências do ciclo e distinga as diferentes fases.

Resumo

A estratégia STC MA ATR combina 3 indicadores para capturar pontos de reversão de tendência para negociação de rastreamento de tendência estável. As combinações de indicadores filtram falsos sinais e controlam riscos com stop loss / take profit. Tem forte robustez e estabilidade.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 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/
// © Romedius

//@version=5
strategy("My Strategy", overlay=true, margin_long=100, margin_short=100)

// STC
EEEEEE=input(12,"Length",group="STC")
BBBB=input(26,"FastLength",group="STC")
BBBBB=input(50,"SlowLength",group="STC")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA
    
AAAAA(EEEEEE, BBBB, BBBBB) => 
    //AAA=input(0.5)
    var AAA = 0.5
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close,BBBB,BBBBB)     
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC    
    CCCCC := (CCCC > 0 ? ((BBBBBB - CCC) / CCCC) * 100 : nz(CCCCC[1])) 
    DDD := (na(DDD[1]) ? CCCCC : DDD[1] + (AAA * (CCCCC - DDD[1]))) 
    DDDD = ta.lowest(DDD, EEEEEE) 
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD     
    DDDDDD := (DDDDD > 0 ? ((DDD - DDDD) / DDDDD) * 100 : nz(DDDDDD[1])) 
    EEEEE := (na(EEEEE[1]) ? DDDDDD : EEEEE[1] + (AAA * (DDDDDD - EEEEE[1])))
    EEEEE

mAAAAA = AAAAA(EEEEEE,BBBB,BBBBB)
stc = mAAAAA > mAAAAA[1] ? true : false
stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0
stc_long = stc_sig == 1
stc_short = stc_sig == -1
// STC end

// ATR stops
nATRPeriod = input(5,group="ATR Stops")
nATRMultip = input(3.5,group="ATR Stops")

xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

pos = 0
pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)

atr_sig = pos == -1 ? false : true
// ATR stops end

// ma
ma_len = input(200, title="MA Length", group="Moving Average")
ma = ta.sma(close, 200)
ma_sig = close < ma ? false : true
// ma end

// strategy entries
tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy")
sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy")
early_stop = input(true, title="Close position when ATR changes color")

atr_stop = if close < xATRTrailingStop
    close - (close - xATRTrailingStop) * sl_mult
else
    close + (xATRTrailingStop - close) * sl_mult

longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true
shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop)
else if atr_sig == false and early_stop
    strategy.close("Long")

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop)
else if atr_sig == true and early_stop
    strategy.close("Short")
    
// plot stuff
atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(atr_stop, title="ATR Stop", color=atr_color)

ma_color = ma_sig ? color.green : color.red
plot(ma, title="Moving Average", color=ma_color)

stc_color = stc_long ? color.green : color.red
plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny)
plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny)
// plot stuff end

Mais.