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.
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.
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.
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.
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.
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.
O STC pode capturar sinais de reversão e evitar ser preso em tendências.
O ATR define stop loss dinâmico e take profit baseado na volatilidade do mercado, evitando grandes perdas.
A combinação de múltiplos indicadores forma uma forte capacidade de acompanhamento da tendência.
O STC tem um atraso de tempo, o que pode não ser o momento ideal para a reversão do preço.
A MA tende a atrasar-se durante oscilações violentas de preços, o que pode gerar sinais errados.
O multiplicador ATR deve ser afrouxado ou temporariamente desativado durante grandes tendências.
Os parâmetros devem ser ajustados para evitar perdas desnecessárias.
Ajuste os parâmetros do STC para encontrar combinações de resposta mais rápidas para a reversão.
Otimizar o parâmetro do período MA para um melhor acompanhamento da tendência.
Impactos de ensaio de múltiplos ATR diferentes.
Tente substituir o STC por outros indicadores para melhor correspondência.
Introduzir algoritmos de aprendizagem de máquina para otimização automática de vários parâmetros.
Considere as grandes tendências do ciclo e distinga as diferentes fases.
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